static uint32 __bro_table_val_hash(BroTableVal *tv) { uint32 result; D_ENTER; if (! tv) D_RETURN_(0); result = __bro_sobject_hash((BroSObject*) tv->table_type); result ^= __bro_sobject_hash((BroSObject*) tv->attrs); result ^= __bro_table_hash(tv->table); D_RETURN_(result); }
static uint32 __bro_val_hash(BroVal *val) { uint32 result; int i; D_ENTER; if (! val) D_RETURN_(0); result = __bro_sobject_hash((BroSObject*) val->val_type); switch (val->val_type->internal_tag) { case BRO_INTTYPE_INT: case BRO_INTTYPE_UNSIGNED: result ^= val->val_int64; break; case BRO_INTTYPE_IPADDR: for ( i = 0; i < 4; ++i ) result ^= val->val_addr.addr[i]; break; case BRO_INTTYPE_DOUBLE: result ^= (uint32) val->val_double; break; case BRO_INTTYPE_STRING: result ^= __bro_ht_str_hash(val->val_str.str_val); break; case BRO_INTTYPE_SUBNET: for ( i = 0; i < 4; ++i ) result ^= val->val_subnet.sn_net.addr[i]; result ^= val->val_subnet.sn_width; break; case BRO_INTTYPE_OTHER: D(("WARNING -- __bro_val_hash() invoked on derived type.\n")); break; default: D(("Unknown internal type tag: %i\n", val->val_type->internal_tag)); break; } D_RETURN_(result); }
static uint32 __bro_list_val_hash(BroListVal *lv) { uint32 result; BroList *l; D_ENTER; if (! lv) D_RETURN_(0); result = lv->len ^ lv->type_tag; for (l = lv->list; l; l = __bro_list_next(l)) result ^= __bro_sobject_hash((BroSObject *) __bro_list_data(l)); D_RETURN_(result); }
uint32 __bro_vector_hash(BroVector *vec) { int i; uint32 result; D_ENTER; if ( ! vec ) D_RETURN_(0); result = vec->length; for ( i = 0; i < vec->length; ++i ) result ^= __bro_sobject_hash((BroSObject*) vec->vector[i]); D_RETURN_(result); }