/
UCS
/
sqlite_orm
Обзор
Документация
Войти
/
UCS
/
sqlite_orm
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
dev/journal_mode.h
73 строки
2 KB
klaus triendl
Fine-grained compiler feature detection and conformance fallbacks
29 апр 2022, 16:29
29 апр 2022, 16:29
7bb1a39
Код
Авторство
О чём код?
#pragma once #include <iterator> // std::back_inserter #include <string> // std::string #include <memory> // std::unique_ptr #include <array> // std::array #include <algorithm> // std::transform #include <cctype> // std::toupper #if defined(_WINNT_) // DELETE is a macro defined in the Windows SDK (winnt.h) #pragma push_macro("DELETE") #undef DELETE #endif namespace sqlite_orm { /** * Caps case because of: * 1) delete keyword; * 2) https://www.sqlite.org/pragma.html#pragma_journal_mode original spelling */ enum class journal_mode : signed char { DELETE = 0, // An alternate enumeration value when using the Windows SDK that defines DELETE as a macro. DELETE_ = DELETE, TRUNCATE = 1, PERSIST = 2, MEMORY = 3, WAL = 4, OFF = 5, }; namespace internal { inline const std::string& to_string(journal_mode j) { static std::string res[] = { "DELETE", "TRUNCATE", "PERSIST", "MEMORY", "WAL", "OFF", }; return res[static_cast<int>(j)]; } inline std::unique_ptr<journal_mode> journal_mode_from_string(const std::string& str) { std::string upper_str; std::transform(str.begin(), str.end(), std::back_inserter(upper_str), [](char c) { return static_cast<char>(std::toupper(static_cast<int>(c))); }); static std::array<journal_mode, 6> all = {{ journal_mode::DELETE, journal_mode::TRUNCATE, journal_mode::PERSIST, journal_mode::MEMORY, journal_mode::WAL, journal_mode::OFF, }}; for(auto j: all) { if(to_string(j) == upper_str) { return std::make_unique<journal_mode>(j); } } return {}; } } } #if defined(_WINNT_) #pragma pop_macro("DELETE") #endif