Skip to content
Snippets Groups Projects
cfg-var.h 2.18 KiB
Newer Older
  • Learn to ignore specific revisions
  • Debolskiy Andrey's avatar
    Debolskiy Andrey committed
    #pragma once
    
    // [cfg-var.h]: configurable variable class 'cfgVariable'
    //
    // -------------------------------------------------------------------------------------------- //
    
    #define _CRT_SECURE_NO_WARNINGS
    #include <string>
    
    namespace nse
    {
    	class cfgVariable {
    	public:
    
    		enum VAR_TYPE { IS_UNDEF, IS_INT, IS_DOUBLE, IS_STRING, IS_BOOLEAN };
    
    		cfgVariable();
    		cfgVariable(const char* value);
    		cfgVariable(const char* name,
    			const char* value);
    		~cfgVariable();
    
    		cfgVariable(const cfgVariable& var);
    		const cfgVariable& operator=(cfgVariable var);
    		void swap(cfgVariable& a);
    
    		cfgVariable& operator+=(const cfgVariable& var);
    		cfgVariable& operator-=(const cfgVariable& var);
    		cfgVariable& operator*=(const cfgVariable& var);
    		cfgVariable& operator/=(const cfgVariable& var);
    		cfgVariable& operator%=(const cfgVariable& var);
    		cfgVariable& operator^=(const cfgVariable& var);
    
    		const cfgVariable operator+(const cfgVariable& var) const;
    		const cfgVariable operator-(const cfgVariable& var) const;
    		const cfgVariable operator*(const cfgVariable& var) const;
    		const cfgVariable operator/(const cfgVariable& var) const;
    		const cfgVariable operator%(const cfgVariable& var) const;
    		const cfgVariable operator^(const cfgVariable& var) const;
    
    		const cfgVariable operator-() const;
    		const cfgVariable operator+() const;
    
    		void set(const char* name, const char* value);
    		void change_name(const char* name);
    		// name == NULL - not changing variable name
    
    		void clear();
    
    		int get_value(int* value) const;
    		int get_value(float* value) const;
    		int get_value(double* value) const;
    		int get_value(char** value) const;
    		int get_value(std::string& value) const;
    		int get_value(bool* value) const;
    
    		VAR_TYPE get_type() const;
    
    		bool is_varname(const char* ex_name) const;
    		bool is_valid_name() const;	// name not empty string
    		bool is_valid_type() const;	// type != IS_UNDEF
    		bool is_eq_name(const cfgVariable& var) const;
    
    		void print() const;
    
    	private:
    
    		char* name;		// default name = empty string = "\0";
    						// always keeping name as string != NULL
    		VAR_TYPE type;
    
    		int eint;
    		double edouble;
    		char *estring;
    		bool ebool;
    
    		size_t name_memsize;	// memory handler for name string
    	};
    }