diff options
author | redpony <redpony@ca354974-eb3a-0410-8f5c-d3948404989b> | 2012-04-02 08:48:48 +0400 |
---|---|---|
committer | redpony <redpony@ca354974-eb3a-0410-8f5c-d3948404989b> | 2012-04-02 08:48:48 +0400 |
commit | d923556e8925b837a9e8a662fb969637e862bf97 (patch) | |
tree | d5ad746aae325c65d748810ff6bf4a5ed20e0fea | |
parent | 135ccb682c6c06549169512507b2648a9ba2a601 (diff) |
fix mkcls to use unordered_map
-rw-r--r-- | mkcls-v2/KategProblemTest.cpp | 10 | ||||
-rw-r--r-- | mkcls-v2/Makefile | 2 | ||||
-rw-r--r-- | mkcls-v2/myleda.h | 58 | ||||
-rw-r--r-- | mkcls-v2/mystl.h | 44 |
4 files changed, 28 insertions, 86 deletions
diff --git a/mkcls-v2/KategProblemTest.cpp b/mkcls-v2/KategProblemTest.cpp index 117a755..df88d18 100644 --- a/mkcls-v2/KategProblemTest.cpp +++ b/mkcls-v2/KategProblemTest.cpp @@ -35,7 +35,7 @@ USA. #include <stdlib.h> #include <stdio.h> #include <string> -#include <strstream> +#include <sstream> typedef pair<string,string> PSS; @@ -304,7 +304,7 @@ KategProblem *fromKModel(const char *str,int maxClass,int initialisierung, } if(!f)break; - istrstream f2(line.c_str()); + istringstream f2(line); while( 1 ) { f2 >> text; @@ -314,12 +314,6 @@ KategProblem *fromKModel(const char *str,int maxClass,int initialisierung, f2.clear(ios::failbit); } if(!f2){break;} - - - - - - if( text == "$" ) text = "mkcls-mapped-dollar-symbol-$"; if( !setVokabular.member(text) )setVokabular.insert(text); diff --git a/mkcls-v2/Makefile b/mkcls-v2/Makefile index a37a70d..66a86d0 100644 --- a/mkcls-v2/Makefile +++ b/mkcls-v2/Makefile @@ -5,7 +5,7 @@ OBJS = GDAOptimization.o HCOptimization.o Problem.o \ KategProblemWBC.o KategProblem.o StatVar.o general.o \ mkcls.o -CFLAGS = -Wall -W -DNDEBUG -O3 -Wno-deprecated +CFLAGS = -Wall -W -DNDEBUG -O3 -funroll-loops .cpp.o: $(CXX) $(CFLAGS) -c $< -o $@ diff --git a/mkcls-v2/myleda.h b/mkcls-v2/myleda.h index 6fc936b..81091c9 100644 --- a/mkcls-v2/myleda.h +++ b/mkcls-v2/myleda.h @@ -25,15 +25,12 @@ USA. #ifndef myleda_HEADER_defined #define myleda_HEADER_defined -using namespace std; +#include <map> +#include <set> +#include <tr1/unordered_map> #include "myassert.h" - - -#if defined(USE_LEDA_array)||defined(USE_LEDA) -#include <LEDA/array.h> -#else - #include "FixedArray.h" +using namespace std; template<class T> class leda_array : public FixedArray<T> @@ -42,14 +39,7 @@ public: leda_array() {} leda_array(int n) : FixedArray<T>(n) {} }; -#endif - -#if defined(USE_LEDA_set)||defined(USE_LEDA) -#include <LEDA/set.h> -#define forall_set(a,b,c) forall(b,c) -#else -#include <set> template<class T> class leda_set : public set<T> { @@ -77,15 +67,6 @@ leda_set<T> operator-(const leda_set<T>&a,const leda_set<T>&b) return c; } -#endif - - -#if defined(USE_LEDA_d_array)||defined(USE_LEDA) -#include <LEDA/d_array.h> -#define forall_defined_d(a,b,c,d) forall_defined(c,d) -#define forall_d(a,b,c,d) forall(c,d) -#else -#include <map> template<class A,class B> class leda_d_array : public map<A,B> { @@ -118,22 +99,8 @@ public: #define forall_defined_d(a,b,c,d) for(typename leda_d_array<a,b>::const_iterator __ii__=(d).begin();__ii__!=(d).end()&&((c=__ii__->first),1) ;++__ii__) #define forall_d(a,b,c,d) for(typename leda_d_array<a,b>::const_iterator __ii__=(d).begin();__ii__!=(d).end()&&((c=__ii__->second),1);++__ii__) -#endif - - -#if defined(USE_LEDA_h_array)||defined(USE_LEDA) -#include <LEDA/h_array.h> -#define forall_defined_h(a,b,c,d) forall_defined(c,d) -#define forall_h(a,b,c,d) forall(c,d) -#else double used_time(); -#if 0 - -#include "my_hashmap.h" -#define leda_h_array my_hashmap - -#else template<class T> class my_hash @@ -143,15 +110,8 @@ public: }; inline int Hash(int value) { return value; } -#define MY_HASH_BASE hash_map<A,B,my_hash<A> > +#define MY_HASH_BASE std::tr1::unordered_map<A,B> -#if __GNUC__>2 -#include <ext/hash_map> -using __gnu_cxx::hash_map; -using __gnu_cxx::hash; -#else -#include <hash_map> -#endif template<class A,class B> class leda_h_array : public MY_HASH_BASE { @@ -177,7 +137,7 @@ public: typename MY_HASH_BASE::iterator pos=this->find(a); if( pos==this->end() ) { - insert(typename MY_HASH_BASE::value_type(a,init)); + this->insert(typename MY_HASH_BASE::value_type(a,init)); pos=this->find(a); iassert(pos!=this->end()); } @@ -189,11 +149,6 @@ public: #define forall_defined_h2(a,b,c,d) for(leda_h_array<a,b>::const_iterator __jj__=(d).begin();__jj__!=(d).end()&&((c=__jj__->first),1); ++__jj__) #define forall_h(a,b,c,d) for(typename leda_h_array<a,b>::const_iterator __jjj__=(d).begin();__jjj__!=(d).end()&&((c=__jjj__->second),1);++__jjj__) -#endif - -#endif - - template<class T> int compare(const T&a,const T&b) {if(a==b)return 0; else if(a<b) return -1; else return 1;} @@ -274,5 +229,4 @@ bool operator==(const leda_d_array<A,B>&p1,const leda_d_array<A,B>&p2) - #endif diff --git a/mkcls-v2/mystl.h b/mkcls-v2/mystl.h index bcda88d..0eb311f 100644 --- a/mkcls-v2/mystl.h +++ b/mkcls-v2/mystl.h @@ -27,51 +27,45 @@ USA. #define MY_STL_H_DEFINED #include <string> #include <utility> -#if __GNUC__>2 -#include <ext/hash_map> -using __gnu_cxx::hash_map; -using __gnu_cxx::hash; -#else -#include <hash_map> -#endif +#include <tr1/unordered_map> #include <cmath> using namespace std; -#define over_string(a,i) for(unsigned int i=0;i<a.length();i++) - -inline int Hash(const string& s) -{ - int sum=0; - string::const_iterator i=s.begin(),end=s.end(); - for(;i!=end;i++)sum=5*sum+(*i); - return sum; +namespace std { + namespace tr1 { + template <typename T, typename V> + struct hash<pair<T, V> > { + static inline void hash_combine(std::size_t & seed, const T & v) { + hash<T> hasher; + seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); + } + + size_t operator()(const std::pair<T, V>& x) const { + size_t h = 0; + hash_combine(h, x.first); + hash_combine(h, x.second); + return h; + } + }; + } } -template<class V> int Hash(const pair<V,V>&a) -{ return Hash(a.first)+4*Hash(a.second); } +#define over_string(a,i) for(unsigned int i=0;i<a.length();i++) template<class T1,class T2> istream& operator>>(istream &in,pair<T1,T2> &ir) { char c; - do in.get(c); while (in && isspace(c)); - if (!in) return in; - if (c != '(') in.putback(c); - in >> ir.first; - do in.get(c); while (isspace(c)); if (c != ',') in.putback(c); - in >> ir.second; - do in.get(c); while (c == ' '); if (c != ')') in.putback(c); - return in; } |