From 3a255b1b4ff3fa1f107bf9445a0d0e4144584eb3 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 2 Oct 2024 16:58:10 -0500 Subject: [PATCH] Commom `hat::system_info` base class --- include/libhat/System.hpp | 26 ++++++++++++++++---------- src/System.cpp | 8 +++++--- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/include/libhat/System.hpp b/include/libhat/System.hpp index 4a6acf9..a5ef26c 100644 --- a/include/libhat/System.hpp +++ b/include/libhat/System.hpp @@ -3,10 +3,21 @@ #include #include +namespace hat { + struct system_info { + system_info(const system_info&) = delete; + system_info& operator=(const system_info&) = delete; + system_info(system_info&&) = delete; + system_info& operator=(system_info&&) = delete; + protected: + system_info(); + }; +} + #if defined(LIBHAT_X86) namespace hat { - struct system_info_x86 { + struct system_info_x86 : hat::system_info { std::string cpu_vendor{}; std::string cpu_brand{}; struct { @@ -23,34 +34,29 @@ namespace hat { bool popcnt; bool bmi; } extensions{}; - - system_info_x86(const system_info_x86&) = delete; - system_info_x86& operator=(const system_info_x86&) = delete; private: system_info_x86(); friend const system_info_x86& get_system(); static const system_info_x86 instance; }; - using system_info = system_info_x86; + using system_info_impl = system_info_x86; } #elif defined(LIBHAT_ARM) namespace hat { - struct system_info_arm { - system_info_arm(const system_info_arm&) = delete; - system_info_arm& operator=(const system_info_arm&) = delete; + struct system_info_arm : hat::system_info { private: system_info_arm() = default; friend const system_info_arm& get_system(); static const system_info_arm instance; }; - using system_info = system_info_arm; + using system_info_impl = system_info_arm; } #endif namespace hat { - const system_info& get_system(); + const system_info_impl& get_system(); } diff --git a/src/System.cpp b/src/System.cpp index b04da07..55b7cd1 100644 --- a/src/System.cpp +++ b/src/System.cpp @@ -2,8 +2,10 @@ namespace hat { - const system_info system_info::instance{}; - const system_info& get_system() { - return system_info::instance; + system_info::system_info() {} + + const system_info_impl system_info_impl::instance{}; + const system_info_impl& get_system() { + return system_info_impl::instance; } }