diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b59255a..e0ec603 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -14,3 +14,5 @@ add_executable(klotski main.cc) target_link_libraries(klotski all_cases) target_link_libraries(klotski short_code) target_link_libraries(klotski common_code) + +target_link_libraries(klotski pthread) diff --git a/src/all_cases/all_cases.cc b/src/all_cases/all_cases.cc index 143ab16..e54fd8d 100644 --- a/src/all_cases/all_cases.cc +++ b/src/all_cases/all_cases.cc @@ -5,7 +5,7 @@ std::mutex AllCases::all_cases_building; bool AllCases::all_cases_available = false; std::vector AllCases::all_cases[]; -AllCases::Status AllCases::all_cases_status() { // get all cases status +AllCases::Status AllCases::get_status() { // get all cases status if (all_cases_available) { return AVAILABLE; // all cases already built } diff --git a/src/all_cases/all_cases.h b/src/all_cases/all_cases.h index 79e235d..fb9ddf9 100644 --- a/src/all_cases/all_cases.h +++ b/src/all_cases/all_cases.h @@ -8,7 +8,7 @@ class AllCases : public BasicRanges { public: static void build_all_cases(); - static enum Status all_cases_status(); + static enum Status get_status(); static const std::vector (*get_all_cases())[16]; private: diff --git a/src/all_cases/basic_ranges.cc b/src/all_cases/basic_ranges.cc index c07ce7c..eb023c7 100644 --- a/src/all_cases/basic_ranges.cc +++ b/src/all_cases/basic_ranges.cc @@ -15,7 +15,7 @@ inline uint32_t binary_count(uint32_t bin) { // get number of non-zero bits return bin & 0b111111; } -BasicRanges::Status BasicRanges::basic_ranges_status() { // get basic ranges status +BasicRanges::Status BasicRanges::get_status() { // get basic ranges status if (basic_ranges_available) { return AVAILABLE; // basic ranges already built } diff --git a/src/all_cases/basic_ranges.h b/src/all_cases/basic_ranges.h index e5b0f87..c14bb65 100644 --- a/src/all_cases/basic_ranges.h +++ b/src/all_cases/basic_ranges.h @@ -11,8 +11,8 @@ public: BUILDING, AVAILABLE, }; + static enum Status get_status(); static void build_basic_ranges(); - static enum Status basic_ranges_status(); // TODO: convert to get_status function static const std::vector* get_basic_ranges(); private: diff --git a/src/main.cc b/src/main.cc index 5f927d3..1163c6c 100644 --- a/src/main.cc +++ b/src/main.cc @@ -4,46 +4,51 @@ #include "common_code.h" #include "short_code.h" -//void get_status() { -// switch (BasicRanges::basic_ranges_status()) { -// case BasicRanges::NO_INIT: -// std::cout << "basic ranges no init" << std::endl; -// break; -// case BasicRanges::BUILDING: -// std::cout << "basic ranges building" << std::endl; -// break; -// case BasicRanges::AVAILABLE: -// std::cout << "basic ranges available" << std::endl; -// break; -// } -// -// switch (AllCases::all_cases_status()) { -// case AllCases::NO_INIT: -// std::cout << "all cases no init" << std::endl; -// break; -// case AllCases::BUILDING: -// std::cout << "all cases building" << std::endl; -// break; -// case AllCases::AVAILABLE: -// std::cout << "all cases available" << std::endl; -// break; -// } -//} +#include + +void get_status() { + switch (BasicRanges::get_status()) { + case BasicRanges::NO_INIT: + std::cout << "basic ranges no init" << std::endl; + break; + case BasicRanges::BUILDING: + std::cout << "basic ranges building" << std::endl; + break; + case BasicRanges::AVAILABLE: + std::cout << "basic ranges available" << std::endl; + break; + } + + switch (AllCases::get_status()) { + case AllCases::NO_INIT: + std::cout << "all cases no init" << std::endl; + break; + case AllCases::BUILDING: + std::cout << "all cases building" << std::endl; + break; + case AllCases::AVAILABLE: + std::cout << "all cases available" << std::endl; + break; + } +} int main() { -// get_status(); -// BasicRanges::build_basic_ranges(); -// get_status(); -// AllCases::build_all_cases(); -// get_status(); -// -// for (auto const &all_case : *AllCases::get_all_cases()) { -// std::cout << " " << all_case.size() << std::endl; -// } -// -// std::cout << BasicRanges::get_basic_ranges() << std::endl; -// std::cout << AllCases::get_basic_ranges() << std::endl; + get_status(); + BasicRanges::build_basic_ranges(); + get_status(); + AllCases::build_all_cases(); + get_status(); + + for (auto const &all_case : *AllCases::get_all_cases()) { + std::cout << " " << all_case.size() << std::endl; + } + + std::cout << BasicRanges::get_basic_ranges() << std::endl; + std::cout << AllCases::get_basic_ranges() << std::endl; + + printf("%p\n", BasicRanges::get_status); + printf("%p\n", AllCases::get_status); // std::cout << CommonCode::check(0x123456789) << std::endl; @@ -62,15 +67,23 @@ int main() { // std::cout << CommonCode(0x1A9BF0C00).to_string() << std::endl; - std::cout << "start NORMAL speed up" << std::endl; - ShortCode::speed_up(ShortCode::NORMAL); - std::cout << "NORMAL speed up complete" << std::endl; - - std::cout << "start FAST speed up" << std::endl; - ShortCode::speed_up(ShortCode::FAST); - std::cout << "FAST speed up complete" << std::endl; - - std::cout << ShortCode::all_cases_list.size() << std::endl; +// std::cout << "start NORMAL speed up" << std::endl; +//// ShortCode::speed_up(ShortCode::NORMAL); +// std::thread t1(ShortCode::speed_up, ShortCode::NORMAL); +// std::thread t2(ShortCode::speed_up, ShortCode::NORMAL); +// t1.join(); +// t2.join(); +// std::cout << "NORMAL speed up complete" << std::endl; +// +// std::cout << "start FAST speed up" << std::endl; +//// ShortCode::speed_up(ShortCode::FAST); +// std::thread t3(ShortCode::speed_up, ShortCode::FAST); +// std::thread t4(ShortCode::speed_up, ShortCode::FAST); +// t3.join(); +// t4.join(); +// std::cout << "FAST speed up complete" << std::endl; +// +// std::cout << ShortCode::all_cases_list.size() << std::endl; return 0; }