diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5761fdf..5b0df27 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,11 @@ set(SRC_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/jaclks-internal) -aux_source_directory(${SRC_ROOT_DIR}/javac-base/java/lang SRC_FILES) -aux_source_directory(${SRC_ROOT_DIR}/javac-base/java/security SRC_FILES) +set(CXX_SRC_ROOT_DIR ${SRC_ROOT_DIR}/cxx-detail) +aux_source_directory(${CXX_SRC_ROOT_DIR}/utils SRC_FILES) + +set(JBASE_SRC_ROOT_DIR ${SRC_ROOT_DIR}/javac-base) +aux_source_directory(${JBASE_SRC_ROOT_DIR}/java/lang SRC_FILES) +aux_source_directory(${JBASE_SRC_ROOT_DIR}/java/security SRC_FILES) if(BUILD_SHARED_LIBS) add_library(jaclks_shared SHARED ${SRC_FILES}) diff --git a/src/jaclks-internal/cxx-detail/utils/string_utils.cc b/src/jaclks-internal/cxx-detail/utils/string_utils.cc new file mode 100644 index 0000000..be783ce --- /dev/null +++ b/src/jaclks-internal/cxx-detail/utils/string_utils.cc @@ -0,0 +1,62 @@ +#include "jaclks-internal/cxx-detail/utils/string_utils.h" + +namespace jaclks::cxx_detail { + +namespace { +using std::string; + +/** + * Steal to access private _M_string_length member + */ +using size_type = string::size_type; + +size_type *StealLength(string *str); + +template +struct LengthMemberAccesser { + friend size_type *StealLength(string *victim_object) { + return &(victim_object->*MEMBER_INT_PTR); + } +}; + +template struct LengthMemberAccesser<&string::_M_string_length>; + +/** + * Steal local capacity + */ +int StealLocalCapacity(const string &str); + +template +struct LocalCapacityMemberAccesser { + friend int StealLocalCapacity(const string &victim_object) { + return Cap; + } +}; + +template struct LocalCapacityMemberAccesser; + +/** + * Steal to access private _M_is_local function + */ +bool IsLocalData(const string &str); + +template +struct LocalFunctionAccesser { + friend bool IsLocalData(const string &victim_object) { + return (victim_object.*Func)(); + ; + } +}; + +template struct LocalFunctionAccesser<&string::_M_is_local>; + +} // namespace + +std::string StringUtils::ToStdString(javac_base::String str) { + std::string result; + + + return ""; +} + +} // namespace jaclks::cxx_detail diff --git a/src/jaclks-internal/cxx-detail/utils/string_utils.h b/src/jaclks-internal/cxx-detail/utils/string_utils.h new file mode 100644 index 0000000..7d928d6 --- /dev/null +++ b/src/jaclks-internal/cxx-detail/utils/string_utils.h @@ -0,0 +1,14 @@ +#pragma once + +#include + +#include "jaclks/javac-base/java/lang/string.h" + +namespace jaclks::cxx_detail { + +class StringUtils { + public: + static std::string ToStdString(javac_base::String str); +}; + +} // namespace jaclks::cxx_detail diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ad4a764..8a0efaa 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -8,6 +8,7 @@ add_executable(jaclks_gtest main.cc ${SRC_FILES} ${TEST_SRC_FILES}) target_link_libraries(jaclks_gtest PRIVATE GTest::gtest) +add_subdirectory(cxx-detail) add_subdirectory(javac-base) # Registers googletests diff --git a/tests/cxx-detail/CMakeLists.txt b/tests/cxx-detail/CMakeLists.txt new file mode 100644 index 0000000..5225770 --- /dev/null +++ b/tests/cxx-detail/CMakeLists.txt @@ -0,0 +1,14 @@ +include_directories(${PROJECT_ROOT_DIR}/src) + +# add all test files +aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/utils JCXX_TEST_SRC_FILES) + +add_executable(jcxx_gtest main.cc ${JCXX_TEST_SRC_FILES}) + +target_link_libraries(jcxx_gtest PRIVATE MyThirdParty::All jaclks_static + GTest::gtest) + +add_dependencies(jcxx_gtest jaclks_static) + +# Registers googletests +add_test(NAME jcxx_gtest COMMAND $) diff --git a/tests/cxx-detail/main.cc b/tests/cxx-detail/main.cc new file mode 100644 index 0000000..4d820af --- /dev/null +++ b/tests/cxx-detail/main.cc @@ -0,0 +1,6 @@ +#include + +int main(int argc, char **argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/tests/cxx-detail/utils/string_utils_test.cc b/tests/cxx-detail/utils/string_utils_test.cc new file mode 100644 index 0000000..fe3904a --- /dev/null +++ b/tests/cxx-detail/utils/string_utils_test.cc @@ -0,0 +1,9 @@ +#include "jaclks-internal/cxx-detail/utils/string_utils.h" + +#include + +namespace jaclks::cxx_detail { + +TEST(StringUtils, ToStdString) {} + +} // namespace jaclks::cxx_detail