Source code repo: http://github.com/khizmax/libcds/
Download: http://sourceforge.net/projects/libcds/files/
-
+
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CDSUNIT_SET_TYPE_H
namespace cc = cds::container;
namespace co = cds::opt;
- typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_gpi;
- typedef cds::urcu::gc< cds::urcu::general_buffered<> > rcu_gpb;
- typedef cds::urcu::gc< cds::urcu::general_threaded<> > rcu_gpt;
+ typedef cds::urcu::gc< cds::urcu::general_instant_stripped > rcu_gpi;
+ typedef cds::urcu::gc< cds::urcu::general_buffered_stripped > rcu_gpb;
+ typedef cds::urcu::gc< cds::urcu::general_threaded_stripped > rcu_gpt;
#ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED
- typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_shb;
- typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_sht;
+ typedef cds::urcu::gc< cds::urcu::signal_buffered_stripped > rcu_shb;
+ typedef cds::urcu::gc< cds::urcu::signal_threaded_stripped > rcu_sht;
#endif
template <typename Key>
struct less;
template <typename Key>
- struct cmp
+ struct cmp
{
int operator ()(Key const& k1, Key const& k2) const
{
- if ( less<Key>( k1, k2 ) )
+ if ( less<Key>( k1, k2 ))
return -1;
return less<Key>( k2, k1 ) ? 1 : 0;
}
}
};
+ template <>
+ struct less<std::string>
+ {
+ bool operator ()( std::string const& k1, std::string const& k2 ) const
+ {
+ return cmp<std::string>()( k1, k2 ) < 0;
+ }
+ bool operator ()( std::string const& k1, char const* k2 ) const
+ {
+ return cmp<std::string>()( k1, k2 ) < 0;
+ }
+ bool operator ()( char const* k1, std::string const& k2 ) const
+ {
+ return cmp<std::string>()( k1, k2 ) < 0;
+ }
+ };
+
template <typename T>
struct hash
{
}
};
+ template <>
+ struct hash<std::string>
+ {
+ typedef size_t result_type;
+ typedef std::string argument_type;
+
+ size_t operator()( std::string const& k ) const
+ {
+ return std::hash<std::string>()(k);
+ }
+ };
// forward
template <typename ImplSelector, typename Key, typename Value>
key_type key;
value_type val;
- /*explicit*/ key_val( key_type const& k ): key(k), val() {}
+ explicit key_val( key_type const& k ): key(k), val() {}
key_val( key_type const& k, value_type const& v ): key(k), val(v) {}
template <typename K>
// print_stat
// *************************************************
+ struct empty_stat {};
+ static inline cds_test::property_stream& operator <<( cds_test::property_stream& o, empty_stat const& )
+ {
+ return o;
+ }
+
template <typename Set>
- static inline void print_stat( cds_test::property_stream&, Set const& /*s*/ )
- {}
+ static inline void print_stat( cds_test::property_stream& o, Set const& s )
+ {
+ o << s.statistics();
+ }
//*******************************************************