00001
00002
00003 #ifndef HASH_SET_H
00004 #define HASH_SET_H
00005
00006 #include "osl/stl/hash.h"
00007 #include "osl/stl/pool_allocator.h"
00008 #if (__GNUC__ >= 4 && __GNUC_MINOR__ >=3)
00009 # include <tr1/unordered_set>
00010 #elif __GNUC__
00011 # include <ext/hash_set>
00012 #else
00013 # include <boost/unordered_set.hpp>
00014 #endif
00015
00016 namespace osl
00017 {
00018 namespace stl
00019 {
00020 #if (__GNUC__ >= 4 && __GNUC_MINOR__ >=3)
00021 template<class Value, class HashFun=std::tr1::hash<Value>,
00022 class Equal=std::equal_to<Value> >
00023 struct hash_set
00024 : public std::tr1::unordered_set<Value, HashFun, Equal, pool_allocator<Value> >
00025 {
00026 typedef std::tr1::unordered_set<Value, HashFun, Equal, pool_allocator<Value> > base_t;
00027 hash_set() {}
00028 hash_set(size_t s) : base_t(s)
00029 {
00030 }
00031 };
00032 #elif defined __GNUC__
00033 template<class Value, class HashFun=__gnu_cxx::hash<Value>,
00034 class Equal=std::equal_to<Value> >
00035 struct hash_set
00036 : public __gnu_cxx::hash_set<Value, HashFun, Equal, pool_allocator<Value> >
00037 {
00038 typedef __gnu_cxx::hash_set<Value, HashFun, Equal,
00039 pool_allocator<Value> > base_t;
00040 hash_set() {}
00041 hash_set(size_t s) : base_t(s)
00042 {
00043 }
00044 };
00045 #else
00046 template<class Value, class HashFun=osl::stl::hash<Value>,
00047 class Equal=std::equal_to<Value> >
00048 struct hash_set
00049 : public boost::unordered_set<Value, HashFun, Equal, pool_allocator<Value> >
00050 {
00051 typedef boost::unordered_set<Value, HashFun, Equal, pool_allocator<Value> > base_t;
00052 hash_set() {}
00053 hash_set(size_t s) : base_t(s)
00054 {
00055 }
00056 };
00057 #endif
00058 }
00059 using stl::hash_set;
00060 }
00061
00062 #endif
00063
00064
00065
00066