Skip to content
  • Thomas Haller's avatar
    core: track addresses for NMIP4Config/NMIP6Config via NMDedupMultiIndex · 22edeb5b
    Thomas Haller authored
    Reasons:
    
     - it adds an O(1) lookup index for accessing NMIPxConfig's addresses.
       Hence, operations like merge/intersect have now runtime O(n) instead
       of O(n^2).
       Arguably, we expect low numbers of addresses in general. For low
       numbers, the O(n^2) doesn't matter and quite likely in those cases
       the previous implementation was just fine -- maybe even faster.
       But the simple case works fine either way. It's important to scale
       well in the exceptional case.
     - the tracked objects can be shared between the various NMPI4Config,
       NMIP6Config instances with NMPlatform and everybody else.
     - the NMPObject can be treated generically, meaning it enables code to
       handle both IPv4 and IPv6, or addresses and routes. See for example
       _nm_ip_config_add_obj().
     - I want core to evolve to somewhere where we don't keep copies of
       NMPlatformIP4Address, et al. instances. Instead they shall all be
       shared. I hope this will reduce memory consumption (although tracking a
       reference consumes some memory too). Also, it shortcuts nmp_object_equal()
       when comparing the same object. Calling nmp_object_equal() on the
       identical objects would be a common case after the hash function
       pre-evaluates equality.
    22edeb5b