
On Thu, Dec 14, 2006 at 07:13:03PM +0100, Joaqu?n M? L?pez Mu?oz wrote:
d_cachecache=d_cache.equal_range( boost::make_tuple(qname.c_str()), // you can omit the make_tuple wrapper in Boost 1.34 composite_key_compare<string_char_comp>());
Wonderful!
d_cachecache=d_cache.equal_range( boost::make_tuple(qname.c_str(),105), // you cannot omit make_tuple here composite_key_compare<string_char_comp,std::less<uint16_t> >());
The power of Boost.MultiIndex never ceases to amaze me Joaquin! In the end, I've solved the problem slightly differently, before your answer came in: 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;
I've taught CIStringCompare that it can also compare const char*'s against std::strings, and things Just Worked - I tested it uses the char*/string comparisons now, and not the string/string comparison.
Hope this helps. Thanks for using Boost.MultiIndex in such exciting ways as you're doing in PowerDNS.
To a large extent, PowerDNS is just a frontend to Boost.MultiIndex. Also see: http://blog.netherlabs.nl/articles/2006/12/14/powerdns-speedups Thanks again Joaquin! -- http://www.PowerDNS.com Open source, database driven DNS Software http://netherlabs.nl Open and Closed source services