bool MetaKeyHasher::operator()

in meta/MetaKeyHasher.cpp [324:388]


bool MetaKeyHasher::operator()(
        _In_ const sai_object_meta_key_t& a,
        _In_ const sai_object_meta_key_t& b) const
{
    // SWSS_LOG_ENTER(); // disabled for performance reasons

    if (a.objecttype != b.objecttype)
        return false;

    auto meta = sai_metadata_get_object_type_info(a.objecttype);

    if (meta && meta->isobjectid)
        return a.objectkey.key.object_id == b.objectkey.key.object_id;

    if (a.objecttype == SAI_OBJECT_TYPE_ROUTE_ENTRY)
        return a.objectkey.key.route_entry == b.objectkey.key.route_entry;

    if (a.objecttype == SAI_OBJECT_TYPE_NEIGHBOR_ENTRY)
        return a.objectkey.key.neighbor_entry == b.objectkey.key.neighbor_entry;

    if (a.objecttype == SAI_OBJECT_TYPE_FDB_ENTRY)
        return a.objectkey.key.fdb_entry == b.objectkey.key.fdb_entry;

    if (a.objecttype == SAI_OBJECT_TYPE_NAT_ENTRY)
        return a.objectkey.key.nat_entry == b.objectkey.key.nat_entry;

    if (a.objecttype == SAI_OBJECT_TYPE_INSEG_ENTRY)
        return a.objectkey.key.inseg_entry == b.objectkey.key.inseg_entry;

    if (a.objecttype == SAI_OBJECT_TYPE_MY_SID_ENTRY)
        return a.objectkey.key.my_sid_entry == b.objectkey.key.my_sid_entry;

    if (a.objecttype == SAI_OBJECT_TYPE_MCAST_FDB_ENTRY)
        return a.objectkey.key.mcast_fdb_entry == b.objectkey.key.mcast_fdb_entry;

    if (a.objecttype == SAI_OBJECT_TYPE_L2MC_ENTRY)
        return a.objectkey.key.l2mc_entry == b.objectkey.key.l2mc_entry;

    if (a.objecttype == SAI_OBJECT_TYPE_IPMC_ENTRY)
        return a.objectkey.key.ipmc_entry == b.objectkey.key.ipmc_entry;

    if ((sai_object_type_extensions_t)a.objecttype == SAI_OBJECT_TYPE_DIRECTION_LOOKUP_ENTRY)
        return a.objectkey.key.direction_lookup_entry == b.objectkey.key.direction_lookup_entry;

    if ((sai_object_type_extensions_t)a.objecttype == SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY)
        return a.objectkey.key.eni_ether_address_map_entry == b.objectkey.key.eni_ether_address_map_entry;

    if ((sai_object_type_extensions_t)a.objecttype == SAI_OBJECT_TYPE_VIP_ENTRY)
        return a.objectkey.key.vip_entry == b.objectkey.key.vip_entry;

    if ((sai_object_type_extensions_t)a.objecttype == SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY)
        return a.objectkey.key.inbound_routing_entry == b.objectkey.key.inbound_routing_entry;

    if ((sai_object_type_extensions_t)a.objecttype == SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY)
        return a.objectkey.key.pa_validation_entry == b.objectkey.key.pa_validation_entry;

    if ((sai_object_type_extensions_t)a.objecttype == SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY)
        return a.objectkey.key.outbound_routing_entry == b.objectkey.key.outbound_routing_entry;

    if ((sai_object_type_extensions_t)a.objecttype == SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY)
        return a.objectkey.key.outbound_ca_to_pa_entry == b.objectkey.key.outbound_ca_to_pa_entry;

    SWSS_LOG_THROW("not implemented: %s",
            sai_serialize_object_meta_key(a).c_str());
}