Browse Source

perf: CommonCode module

master
Dnomd343 2 years ago
parent
commit
4f4831a0a2
  1. 7
      src/common_code/common_code.cc
  2. 6
      src/common_code/common_code.h
  3. 125
      src/main.cc
  4. 1
      src/short_code/short_code.h

7
src/common_code/common_code.cc

@ -45,16 +45,16 @@ CommonCode::CommonCode(const std::string &common_code_str) {
code = common_code; code = common_code;
} }
std::string CommonCode::to_string(bool shorten) const { std::string CommonCode::to_string(bool shorten) const { // convert uint64_t code to string
char result[10]; // max length 9-bits char result[10]; // max length 9-bits
sprintf(result, "%09lX", code); sprintf(result, "%09lX", code);
if (shorten) { // remove `0` after common code if (shorten) { // remove `0` after common code
if (code == 0x000000000) { if (code == 0x000000000) {
return "0"; // special case return "0"; // special case -> only one `0`
} }
result[9 - last_zero_num(code) / 4] = '\0'; // truncate string result[9 - last_zero_num(code) / 4] = '\0'; // truncate string
} }
return result; return result; // char* -> std::string
} }
bool CommonCode::check(uint64_t common_code) { // check whether common code is valid bool CommonCode::check(uint64_t common_code) { // check whether common code is valid
@ -63,6 +63,7 @@ bool CommonCode::check(uint64_t common_code) { // check whether common code is v
return false; // invalid common code return false; // invalid common code
} }
/// ensure that there are >= 2 space blocks
uint32_t fill_num = 0, space_num = 0; uint32_t fill_num = 0, space_num = 0;
auto range = Common::range_reverse((uint32_t)common_code); // get common code range auto range = Common::range_reverse((uint32_t)common_code); // get common code range
for (int i = 0; i < 32; i += 2) { // traverse range for (int i = 0; i < 32; i += 2) { // traverse range

6
src/common_code/common_code.h

@ -5,13 +5,13 @@
class CommonCode { class CommonCode {
public: public:
explicit CommonCode(uint64_t common_code);
explicit CommonCode(const std::string &common_code_str);
uint64_t unwrap() const; uint64_t unwrap() const;
static bool check(uint64_t common_code); static bool check(uint64_t common_code);
std::string to_string(bool shorten = false) const; std::string to_string(bool shorten = false) const;
explicit CommonCode(uint64_t common_code);
explicit CommonCode(const std::string &common_code_str);
private: private:
uint64_t code; uint64_t code;
}; };

125
src/main.cc

@ -6,77 +6,74 @@
#include <thread> #include <thread>
void get_status() { //void get_status() {
switch (BasicRanges::status()) { // switch (BasicRanges::status()) {
case BasicRanges::NO_INIT: // case BasicRanges::NO_INIT:
std::cout << "basic ranges no init" << std::endl; // std::cout << "basic ranges no init" << std::endl;
break; // break;
case BasicRanges::BUILDING: // case BasicRanges::BUILDING:
std::cout << "basic ranges building" << std::endl; // std::cout << "basic ranges building" << std::endl;
break; // break;
case BasicRanges::AVAILABLE: // case BasicRanges::AVAILABLE:
std::cout << "basic ranges available" << std::endl; // std::cout << "basic ranges available" << std::endl;
break; // break;
} // }
//
switch (AllCases::status()) { // switch (AllCases::status()) {
case AllCases::NO_INIT: // case AllCases::NO_INIT:
std::cout << "all cases no init" << std::endl; // std::cout << "all cases no init" << std::endl;
break; // break;
case AllCases::BUILDING: // case AllCases::BUILDING:
std::cout << "all cases building" << std::endl; // std::cout << "all cases building" << std::endl;
break; // break;
case AllCases::AVAILABLE: // case AllCases::AVAILABLE:
std::cout << "all cases available" << std::endl; // std::cout << "all cases available" << std::endl;
break; // break;
} // }
} //}
int main() { int main() {
printf("%p\n", BasicRanges::build); // printf("%p\n", BasicRanges::build);
printf("%p\n", AllCases::build); // printf("%p\n", AllCases::build);
//
printf("%p\n", BasicRanges::status); // printf("%p\n", BasicRanges::status);
printf("%p\n", AllCases::status); // printf("%p\n", AllCases::status);
//
printf("%p\n", BasicRanges::fetch); // printf("%p\n", BasicRanges::fetch);
printf("%p\n", AllCases::fetch); // printf("%p\n", AllCases::fetch);
//
get_status(); // get_status();
BasicRanges::build(); // BasicRanges::build();
get_status(); // get_status();
AllCases::build(); // AllCases::build();
get_status(); // get_status();
//
std::cout << BasicRanges::fetch()->size() << std::endl; // std::cout << BasicRanges::fetch()->size() << std::endl;
//
uint32_t sum = 0; // uint32_t sum = 0;
for (auto const &all_case : *AllCases::fetch()) { // for (auto const &all_case : *AllCases::fetch()) {
sum += all_case.size(); // sum += all_case.size();
std::cout << " " << all_case.size() << std::endl; // std::cout << " " << all_case.size() << std::endl;
} // }
std::cout << sum << std::endl; // std::cout << sum << std::endl;
//
// std::cout << AllCases::fetch() << std::endl;
// std::cout << AllCases::BasicRanges::fetch() << std::endl;
// std::cout << BasicRanges::fetch() << std::endl;
std::cout << AllCases::fetch() << std::endl;
std::cout << AllCases::BasicRanges::fetch() << std::endl;
std::cout << BasicRanges::fetch() << std::endl;
std::cout << CommonCode::check(0x123456789) << std::endl;
std::cout << CommonCode::check(0x4FEA13400) << std::endl;
// std::cout << CommonCode::check(0x123456789) << std::endl; printf("%09lX\n", CommonCode("1A9bF0c0").unwrap());
// std::cout << CommonCode::check(0x4FEA13400) << std::endl; std::cout << CommonCode(0x1A9BF0C00).to_string() << std::endl;
// std::cout << CommonCode(0x1A9BF0C00).to_string(true) << std::endl;
// // TODO: should we return a CommonCode object like String::new(...) in rust?
// printf("%09lX\n", CommonCode::from_string("1A9bF0c0"));
// std::cout << CommonCode::to_string(0x1A9BF0C00) << std::endl;
// std::cout << CommonCode::to_string(0x1A9BF0C00, true) << std::endl;
// auto c = CommonCode("1A9bF0c0"); auto c = CommonCode("4Fea13400");
// std::cout << c.to_string(true) << std::endl; std::cout << c.to_string(true) << std::endl;
// std::cout << c.to_string() << std::endl; std::cout << c.to_string() << std::endl;
// printf("%09lX\n", c.unwrap()); printf("%09lX\n", c.unwrap());
//
// std::cout << CommonCode(0x1A9BF0C00).to_string() << std::endl;
// std::cout << ShortCode::check_mode() << std::endl; // std::cout << ShortCode::check_mode() << std::endl;

1
src/short_code/short_code.h

@ -13,7 +13,6 @@ public:
static enum Mode check_mode(); static enum Mode check_mode();
static void speed_up(enum Mode mode); static void speed_up(enum Mode mode);
private: private:
static std::mutex map_building; static std::mutex map_building;
static bool fast_mode_available; static bool fast_mode_available;

Loading…
Cancel
Save