From d923556e8925b837a9e8a662fb969637e862bf97 Mon Sep 17 00:00:00 2001 From: redpony Date: Mon, 2 Apr 2012 04:48:48 +0000 Subject: fix mkcls to use unordered_map --- mkcls-v2/KategProblemTest.cpp | 10 ++------ mkcls-v2/Makefile | 2 +- mkcls-v2/myleda.h | 58 +++++-------------------------------------- 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 #include #include -#include +#include typedef pair 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 +#include +#include #include "myassert.h" - - -#if defined(USE_LEDA_array)||defined(USE_LEDA) -#include -#else - #include "FixedArray.h" +using namespace std; template class leda_array : public FixedArray @@ -42,14 +39,7 @@ public: leda_array() {} leda_array(int n) : FixedArray(n) {} }; -#endif - -#if defined(USE_LEDA_set)||defined(USE_LEDA) -#include -#define forall_set(a,b,c) forall(b,c) -#else -#include template class leda_set : public set { @@ -77,15 +67,6 @@ leda_set operator-(const leda_set&a,const leda_set&b) return c; } -#endif - - -#if defined(USE_LEDA_d_array)||defined(USE_LEDA) -#include -#define forall_defined_d(a,b,c,d) forall_defined(c,d) -#define forall_d(a,b,c,d) forall(c,d) -#else -#include template class leda_d_array : public map { @@ -118,22 +99,8 @@ public: #define forall_defined_d(a,b,c,d) for(typename leda_d_array::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::const_iterator __ii__=(d).begin();__ii__!=(d).end()&&((c=__ii__->second),1);++__ii__) -#endif - - -#if defined(USE_LEDA_h_array)||defined(USE_LEDA) -#include -#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 my_hash @@ -143,15 +110,8 @@ public: }; inline int Hash(int value) { return value; } -#define MY_HASH_BASE hash_map > +#define MY_HASH_BASE std::tr1::unordered_map -#if __GNUC__>2 -#include -using __gnu_cxx::hash_map; -using __gnu_cxx::hash; -#else -#include -#endif template 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::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::const_iterator __jjj__=(d).begin();__jjj__!=(d).end()&&((c=__jjj__->second),1);++__jjj__) -#endif - -#endif - - template int compare(const T&a,const T&b) {if(a==b)return 0; else if(a&p1,const leda_d_array&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 #include -#if __GNUC__>2 -#include -using __gnu_cxx::hash_map; -using __gnu_cxx::hash; -#else -#include -#endif +#include #include using namespace std; -#define over_string(a,i) for(unsigned int i=0;i + struct hash > { + static inline void hash_combine(std::size_t & seed, const T & v) { + hash hasher; + seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); + } + + size_t operator()(const std::pair& x) const { + size_t h = 0; + hash_combine(h, x.first); + hash_combine(h, x.second); + return h; + } + }; + } } -template int Hash(const pair&a) -{ return Hash(a.first)+4*Hash(a.second); } +#define over_string(a,i) for(unsigned int i=0;i istream& operator>>(istream &in,pair &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; } -- cgit v1.2.3