summaryrefslogtreecommitdiff
path: root/gmod/con_alias.hpp
diff options
context:
space:
mode:
authorJustSomePwner <crotchyalt@gmail.com>2018-08-30 14:01:54 +0200
committerJustSomePwner <crotchyalt@gmail.com>2018-08-30 14:01:54 +0200
commit7ccb819f867493f8ec202ea3b39c94c198c64584 (patch)
tree94622e61af0ff359e3d6689cf274d74f60b2492a /gmod/con_alias.hpp
parent564d979b79e8a5aaa5014eba0ecd36c61575934f (diff)
first
Diffstat (limited to 'gmod/con_alias.hpp')
-rw-r--r--gmod/con_alias.hpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/gmod/con_alias.hpp b/gmod/con_alias.hpp
new file mode 100644
index 0000000..f00e7df
--- /dev/null
+++ b/gmod/con_alias.hpp
@@ -0,0 +1,60 @@
+#pragma once
+
+#include <string>
+#include "simple_settings.hpp"
+
+template< typename var_type = bool >
+class con_alias : public ISetting {
+public:
+ con_alias( hash_t hash, con_var< var_type >* var ) :
+ m_var( var ),
+ m_value( var_type{ } ),
+ m_name( hash ),
+ m_is_var( true ) { };
+
+ con_alias( hash_t hash ) :
+ m_name( hash ),
+ m_value( 0 ),
+ m_var( nullptr ),
+ m_is_var( false ) { };
+
+ con_alias( hash_t hash, var_type&& rhs ) :
+ m_name( hash ),
+ m_value( rhs ),
+ m_var( nullptr ),
+ m_is_var( false ) { };
+
+ virtual std::string get_string( ) override {
+ if( m_is_var )
+ return m_var->get_string( );
+ else
+ return std::to_string( m_value );
+ }
+
+ virtual void set_value( int value ) override {
+ set_value_internal( value );
+ }
+
+ virtual void set_value( float value ) override {
+ set_value_internal( value );
+ }
+
+ virtual void set_value( ulong_t value ) override {
+ set_value_internal( value );
+ }
+
+private:
+ template < typename t >
+ void set_value_internal( t&& val ) {
+ if( m_is_var )
+ m_var->set( val );
+ else
+ m_value = ( var_type )( val );
+ }
+
+private:
+ bool m_is_var;
+ hash_t m_name;
+ var_type m_value;
+ con_var< var_type >* m_var;
+}; \ No newline at end of file