Boost logo

Boost Users :

From: bert hubert (bert.hubert_at_[hidden])
Date: 2006-12-14 05:50:57


Hi everybody,

I have this boost::multi_index container (I'm very very happy with
boost::multi_index!):

typedef multi_index_container<
  CacheEntry,
  indexed_by <
              ordered_unique<
                    composite_key<
                      CacheEntry,
                      member<CacheEntry,string,&CacheEntry::d_qname>,
                      member<CacheEntry,uint16_t,&CacheEntry::d_qtype>
>,
                    composite_key_compare<CIStringCompare, std::less<uint16_t> >
>,
             sequenced<>
>
> cache_t;

For details on CacheEntry, see
http://wiki.powerdns.com/cgi-bin/trac.fcgi/browser/trunk/pdns/pdns/recursor_cache.hh

What I want to do is use a compatible key ('char *') to search only on
d_qname.

I've tried:

struct string_char_comp
{
  bool operator()(const char* x, const tuple<string,uint16_t>& )const
  {
    return false; // bogus, just compile testing
  }

  bool operator()(const tuple<string,uint16_t>&, const char* x )const
  {
    return false;
  }
};

Followed by:
    cache_t d_cache;
    // ...
    d_cachecache=d_cache.equal_range(qname.c_str(), string_char_comp());

But this doesn't compile with famously huge template errors (I've shortened
boost::multi_index to bi::):

ord_index_ops.hpp:87: error: no match for call to `(const string_char_comp)
(bi::composite_key_result<bi::composite_key<MemRecursorCache::CacheEntry,
bi::member<MemRecursorCache::CacheEntry, std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
&MemRecursorCache::CacheEntry::d_qname>,
bi::member<MemRecursorCache::CacheEntry, short unsigned int,
&MemRecursorCache::CacheEntry::d_qtype>, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type, boost::tuples::null_type,
boost::tuples::null_type> >, const char* const&)'

These errors make me wonder if what I want is even possible - unless I make
my comparison function accept a composite_key_result with lots of bi
internals in it.

Joaquin?

-- 
http://www.PowerDNS.com      Open source, database driven DNS Software 
http://netherlabs.nl              Open and Closed source services

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net