stamenStatic Menu Generator | 
          
| git clone git://git.dimitrijedobrota.com/stamen.git | 
| Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING | 
| commit | 0ca7539acca2a05ac12c268598ee3cd1881515fc | 
| parent | d5a343ef60d087a9e9ed648a14478f491ffe5a56 | 
| author | Dimitrije Dobrota < mail@dimitrijedobrota.com > | 
| date | Fri, 1 Dec 2023 22:42:12 +0000 | 
Modernize the codebase using clang-tidy
| M | CMakeLists.txt | | | + - | 
| M | demo/main.cpp | | | +++++ ----- | 
| M | include/stamen.h | | | +++++++++++++++ ------------ | 
| M | include/stamenc.h | | | + - | 
| M | src/generate.cpp | | | +++++ --- | 
| M | src/stamen.cpp | | | ++++ --- | 
6 files changed, 31 insertions(+), 25 deletions(-)
diff --git a/ CMakeLists.txt b/ CMakeLists.txt
          @@ -3,7 +3,7 @@ 
          set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
        
        
          project(
              Stamen
              VERSION 0.0.14
              VERSION 0.0.15
              DESCRIPTION "Static menu generator"
              LANGUAGES C CXX
          )
        
        diff --git a/ demo/main.cpp b/ demo/main.cpp
@@ -7,30 +7,30 @@
// in order to use stamen::BuiltinDisplay
          const stamen_display_f stamen_display = stamen::builtinDisplay;
          int operation1(void) {
          int operation1() {
            std::cout << "operation 1" << std::endl;
            std::cout << "Some operation is done" << std::endl;
            return 1;
          }
          int operation2(void) {
          int operation2() {
            std::cout << "operation 2" << std::endl;
            std::cout << "Some other operation is done" << std::endl;
            return 1;
          }
          int operation3(void) {
          int operation3() {
            std::cout << "operation 3" << std::endl;
            std::cout << "Yet another operation is done" << std::endl;
            return 1;
          }
          int finish(void) {
          int finish() {
            std::cout << "finishing..." << std::endl;
            exit(0);
          }
          int main(void) {
          int main() {
            stamen::menu_main();
            return 0;
          }
        
        diff --git a/ include/stamen.h b/ include/stamen.h
@@ -11,6 +11,7 @@
#include <string>
          #include <tuple>
          #include <unordered_map>
          #include <utility>
          #include <vector>
          namespace stamen {
        
        
          @@ -21,11 +22,13 @@ 
          class Menu {
        
        
          public:
            friend class Generator;
            typedef stamen_callback_f callback_f;
            typedef stamen_display_f display_f;
            using callback_f = stamen_callback_f;
            using display_f = stamen_display_f;
            Menu(const Menu &) = delete;
            Menu(Menu &&) = delete;
            Menu &operator=(const Menu &) = delete;
            Menu &operator=(Menu &&) = delete;
            // Tag type dispatch
            Menu(private_ctor_t, const std::string &code, const std::string &prompt)
        
        
          @@ -39,14 +42,14 @@ 
          public:
        
        
            static void insert(const std::string &code, const callback_f callback);
          private:
            Menu(const std::string &code, const std::string &prompt)
                : code(code), title(prompt) {}
            Menu(std::string code, std::string prompt)
                : code(std::move(code)), title(std::move(prompt)) {}
            Menu(const std::string &code, const callback_f callback)
                : code(code), title(code), callback(callback) {}
            typedef std::unordered_map<std::string, Menu> lookup_t;
            static lookup_t &getLookup(void) {
            using lookup_t = std::unordered_map<std::string, Menu>;
            static lookup_t &getLookup() {
              static lookup_t lookup;
              return lookup;
            }
        
        
          @@ -54,7 +57,7 @@ 
          private:
        
        
            static void internal_print(const std::string &entry, const int depth);
            static const Menu *getMenu(const std::string &code) {
              static lookup_t &lookup = getLookup();
              const static lookup_t &lookup = getLookup();
              const auto it = lookup.find(code);
              if (it == lookup.end()) return nullptr;
              return &it->second;
        
        
          @@ -63,17 +66,17 @@ 
          private:
        
        
            const std::string code, title;
            const callback_f callback = nullptr;
            typedef std::pair<std::string, std::string> lookup_item_t;
            using lookup_item_t = std::pair<std::string, std::string>;
            std::vector<lookup_item_t> items;
          };
          inline void Menu::read(const std::string &s) {
            std::string line, delim, code, prompt;
            std::fstream fs(s);
            char tmp;
            char tmp = 0;
            lookup_t &lookup = getLookup();
            lookup_t::iterator last = lookup.end();
            auto last = lookup.end();
            while (std::getline(fs, line)) {
              if (line.empty()) continue;
              std::istringstream ss(line);
        
        
          @@ -85,7 +88,7 @@ 
          inline void Menu::read(const std::string &s) {
        
        
                                   std::forward_as_tuple(private_ctor_t{}, code, prompt));
                last = iter;
              } else {
                last->second.items.push_back({code, prompt});
                last->second.items.emplace_back(code, prompt);
              }
            }
          }
        
        
          @@ -110,7 +113,7 @@ 
          inline void Menu::internal_print(const std::string &code, const int depth) {
        
        
            }
          }
          int builtinDisplay(const char *title, const ::item_t items[], int size);
          int builtinDisplay(const char *title, const ::item_t itemv[], int size);
          } // namespace stamen
          diff --git a/ include/stamenc.h b/ include/stamenc.h
@@ -12,6 +12,6 @@
EXTERNC void stamen_read(const char *file);
          EXTERNC void stamen_print(const char *entry);
          EXTERNC void stamen_insert(const char *code, stamen_callback_f callback);
          EXTERNC int stamen_builtin_display(const char *title, const item_t items[], int size);
          EXTERNC int stamen_builtin_display(const char *title, const item_t itemv[], int size);
          #endif
        
        diff --git a/ src/generate.cpp b/ src/generate.cpp
          @@ -8,7 +8,7 @@ 
          namespace stamen {
        
        
          class Generator {
          public:
            class EGenerate : std::exception {
              virtual const char *what() const noexcept override {
              [[nodiscard]] const char *what() const noexcept override {
                return "Trying to access unknown code";
              }
            };
        
        
          @@ -56,14 +56,16 @@ 
          public:
        
        
          } // namespace stamen
          int main(const int argc, const char *argv[]) {
            const auto args = std::span(argv, size_t(argc));
            if (argc != 2 && argc != 3) {
              std::cout << "please enter exaclty one config file" << std::endl;
              return 1;
            }
            const bool cpp = argc == 2 || std::string(argv[2]) == "cpp";
            const bool cpp = argc == 2 || std::string(args[2]) == "cpp";
            std::string path = argv[1];
            std::string path = args[1];
            Menu::read(path);
            std::string::size_type pos = path.rfind('.');
        
        diff --git a/ src/stamen.cpp b/ src/stamen.cpp
@@ -7,9 +7,10 @@
namespace stamen {
          int builtinDisplay(const char *title, const ::item_t items[], int size) {
            const int digits = std::log10(size) + 1;
            int choice;
          int builtinDisplay(const char *title, const ::item_t itemv[], int size) {
            const size_t digits = size_t(std::log10(size)) + 1;
            const auto items = std::span(itemv, size_t(size));
            int choice = 0;
            while (true) {
              std::cout << std::format("{}:\n", title);