diff --git a/pokerth_lib.pro b/pokerth_lib.pro index 90641983..86034996 100644 --- a/pokerth_lib.pro +++ b/pokerth_lib.pro @@ -156,7 +156,6 @@ SOURCES += \ src/engine/local_engine/localberoturn.cpp \ src/engine/local_engine/localberoriver.cpp \ src/engine/local_engine/localberopostriver.cpp \ - src/engine/local_engine/tools.cpp \ src/engine/local_engine/localbero.cpp \ src/engine/local_engine/localexception.cpp \ src/engine/local_engine/arraydata.cpp \ @@ -205,6 +204,13 @@ SOURCES += \ src/net/common/sendbuffer.cpp \ src/net/common/receivebuffer.cpp +!android{ + SOURCES += src/engine/local_engine/tools.cpp +} +android{ + SOURCES += src/engine/local_engine/tools_android.cpp +} + official_server{ INCLUDEPATH += pkth_stat/daemon_lib/src DEFINES += POKERTH_OFFICIAL_SERVER @@ -225,12 +231,12 @@ win32{ } mac{ - # make it x86_64 only - CONFIG += x86_64 - CONFIG -= x86 - CONFIG -= ppc - QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6 - QMAKE_CXXFLAGS -= -std=gnu++0x + # make it x86_64 only + CONFIG += x86_64 + CONFIG -= x86 + CONFIG -= ppc + QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6 + QMAKE_CXXFLAGS -= -std=gnu++0x # for universal-compilation on PPC-Mac uncomment the following line # on Intel-Mac you have to comment this line out or build will fail. diff --git a/src/engine/local_engine/tools.cpp b/src/engine/local_engine/tools.cpp index 9a2653d7..22a5c58a 100755 --- a/src/engine/local_engine/tools.cpp +++ b/src/engine/local_engine/tools.cpp @@ -18,6 +18,10 @@ #define NOMINMAX // for Windows +#ifdef ANDROID +#error This file is not for android. +#endif + #include "tools.h" #include #include @@ -26,8 +30,6 @@ #include #include #include -#include -#include using namespace std; @@ -68,27 +70,3 @@ void Tools::GetRand(int minValue, int maxValue, unsigned count, int *out) } } -void Tools::GetRandUnique(int minValue, int maxValue, unsigned count, int *out) -{ - InitRandState(); - unsigned numCreated = 0; - int *startPtr = out; - set tmpSet; - for (unsigned i = 0; i < count; i++) { - boost::uniform_int<> dist(minValue, maxValue - numCreated); - boost::variate_generator > gen(*g_rand_state, dist); - *startPtr = gen(); - set::const_iterator v = tmpSet.begin(); - set::const_iterator end = tmpSet.end(); - while (v != end) { - if (*v <= *startPtr) { - (*startPtr)++; - } - ++v; - } - tmpSet.insert(*startPtr); - startPtr++; - numCreated++; - } -} - diff --git a/src/engine/local_engine/tools.h b/src/engine/local_engine/tools.h index 0e26aeec..25d5a4ac 100755 --- a/src/engine/local_engine/tools.h +++ b/src/engine/local_engine/tools.h @@ -25,9 +25,6 @@ public: static void ShuffleArrayNonDeterministic(int *inout, unsigned count); static void GetRand(int minValue, int maxValue, unsigned count, int *out); - static void GetRandUnique(int minValue, int maxValue, unsigned count, int *out); - - //static void getRandNumber(int, int, int, int*, bool, int* = 0, int = 0); }; diff --git a/src/engine/local_engine/tools_android.cpp b/src/engine/local_engine/tools_android.cpp new file mode 100644 index 00000000..03df92a6 --- /dev/null +++ b/src/engine/local_engine/tools_android.cpp @@ -0,0 +1,72 @@ +/***************************************************************************** + * PokerTH - The open source texas holdem engine * + * Copyright (C) 2006-2011 Felix Hammer, Florian Thauer, Lothar May * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU Affero General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Affero General Public License for more details. * + * * + * You should have received a copy of the GNU Affero General Public License * + * along with this program. If not, see . * + *****************************************************************************/ + +#define NOMINMAX // for Windows + +#ifndef ANDROID +#error This file is only for android. +#endif + +#include "tools.h" +#include +#include + +#include +#include +#include +#include + +using namespace std; + +boost::thread_specific_ptr g_rand_state; + +struct det_rng : std::unary_function { + boost::mt19937 &_state; + unsigned operator()(unsigned i) { + boost::uniform_int<> rng(0, i - 1); + return rng(_state); + } + det_rng(boost::mt19937 &state) : _state(state) {} +}; + +static inline void InitRandState() +{ + if (!g_rand_state.get()) { + g_rand_state.reset(new boost::mt19937(static_cast(std::time(0)))); + } +} + +void Tools::ShuffleArrayNonDeterministic(int *inout, unsigned count) +{ + // On android, a deterministic rng is used (for now). + InitRandState(); + det_rng rand(*g_rand_state); + random_shuffle(&inout[0], &inout[count], rand); +} + +void Tools::GetRand(int minValue, int maxValue, unsigned count, int *out) +{ + InitRandState(); + boost::uniform_int<> dist(minValue, maxValue); + boost::variate_generator > gen(*g_rand_state, dist); + int *startPtr = out; + for (unsigned i = 0; i < count; i++) { + *startPtr++ = gen(); + } +} +