Patricia Tries
by Konstantin Knizhnik 

=============================
class Route
{
	Vector<bool> dest;
	uint4 gateway;
	uint4 interf;
	uint2 metric;
	unique patricia<dest> by_dest;
};

=============================

mco_cursor_t csr;
if (MCO_S_OK == Route_by_dest_index_cursor(trans, &csr)) {
    uint1 mask[4];
    make_mask(mask, ip, 32);
    /* find routes which mask match this IP address */
    if (MCO_S_OK == Route_by_dest_prefix_match(trans, &csr, mask,32);
        Route route;
        Route_from_cursor(trans, &csr, &route);
        ...
    }
}
     
=============================

void make_mask(uint1* mask, uint4 val, int bitnum)
{
    int i;
    val = val >> (32-bitnum);
    memset(mask, 0, 4);
    for (i = 0; i < bitnum; i++, val = val >> 1)
    {
         mask[i >> 3] |= (val&1) << (i&7);
    }
}







1


