diff --git a/include/ctools/cTools.h b/include/ctools/cTools.h index dc8d6d8..f4711bb 100644 --- a/include/ctools/cTools.h +++ b/include/ctools/cTools.h @@ -162,6 +162,39 @@ using namespace cocos2d; namespace ct // cTools { +///////////////////////////////////////////// +///////////////////////////////////////////// +///////////////////////////////////////////// + +// is a user datas of type void* is used +// we cant do a dynamic_cast, so for test if we have the good class +// we can use a magic number, because this member will not cause compiling issue +// and if this is the good class, the magic_number will point to a random memory zone +// so will not have the good value + +inline int64_t EncodeId(const std::string& vArr) { + if (vArr.empty() || vArr.size() != 8U) { + return 0; + } + return vArr[0] | // + (vArr[1] << 8) | // + (vArr[2] << 16) | // + (vArr[3] << 24) | // + ((int64_t)(vArr[4]) << 32) | // + ((int64_t)(vArr[5]) << 40) | // + ((int64_t)(vArr[6]) << 48) | // + ((int64_t)(vArr[7]) << 56); +} + +inline bool IsIdEqualTo(const int64_t& vId, char vArr[8]) { + return (EncodeId(vArr) == vId); +} + +///////////////////////////////////////////// +///////////////////////////////////////////// +///////////////////////////////////////////// +///////////////////////////////////////////// + template class SearchableVector { private: @@ -198,7 +231,8 @@ class SearchableVector { } return false; } - bool exist(const T& vKey) const { return (m_Dico.find(vKey) != m_Dico.end()); } + bool exist(const T& vKey) const { + return (m_Dico.find(vKey) != m_Dico.end()); } }; CTOOLS_API std::string toStr(const char* fmt, ...); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b0e4178..aebaa0a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -483,3 +483,7 @@ AddTest("cTools.float.Plane.construtor.point_and_normal") AddTest("cTools.float.Plane.construtor.3_points") AddTest("cTools.float.Plane.get_plane_intersection") AddTest("cTools.float.Plane.is_on_plane") + +### TESTS for cTools.EncodeID + +AddTest("cTools.EncodeID") diff --git a/tests/TestCode/cTools/Test_cTools.cpp b/tests/TestCode/cTools/Test_cTools.cpp index f780027..6ddb0f9 100644 --- a/tests/TestCode/cTools/Test_cTools.cpp +++ b/tests/TestCode/cTools/Test_cTools.cpp @@ -2792,6 +2792,30 @@ int Test_cTools_float_double_Plane_run_test(const std::string& vTestCode) return 1; // error } + +/////////////////////////////////////////////////////////// +//// ENCODE ID //////////////////////////////////////////// +/////////////////////////////////////////////////////////// + +int Test_cTools_Encode_ID() { + if (ct::EncodeId("lgfkhklfgjhlgkfkjfghlkfgh") != 0) { // more than 8 + return 1; // error + } + if (ct::EncodeId("") != 0) { // empty + return 1; // error + } + if (ct::EncodeId("IProject") != 5282848185757557618) { + return 1; // error + } + if (!ct::IsIdEqualTo(5282848185757557618, "IProject")) { + return 1; // error + } + if (ct::IsIdEqualTo(5282848185757557618, "TOTO")) { + return 1; // error + } + return 0; // no error +} + /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// @@ -2876,7 +2900,13 @@ int Test_cTools_run_test(const std::string& vTestCode) else if (vTestCode.find("cTools.float.Plane.") != std::string::npos) { return Test_cTools_float_double_Plane_run_test(vTestCode); - } + } + + // Encode ID + + else if (vTestCode.find("cTools.EncodeID") != std::string::npos) { + return Test_cTools_Encode_ID(); + } return 1; // error } \ No newline at end of file