Skip to content
Snippets Groups Projects
cfg-vec.h 5.53 KiB
Newer Older
  • Learn to ignore specific revisions
  • 数学の武士's avatar
    数学の武士 committed
    #pragma once
    
    #include "cfg-value.h"
    
    namespace scm
    {
    	class cfgVector
    	{
    	public:
    		
    		// set & add calls
    		// -------------------------------------------------------------------------------------------- //
    		void set(const cfgValue& value);
    		void set(const cfgValue& value, const int size);
    
    		void set(const int* x, const int size);
    		void set(const float* x, const int size);
    		void set(const double* x, const int size);
    		void set(const long double* x, const int size);
    
    		bool change(const int idx, const cfgValue& value);
    		void append(const cfgValue& value);
    
    		void set_name(const char* name);
    		//		*: name == NULL - not changing vector name
    		// -------------------------------------------------------------------------------------------- //
    		
    		// get calls
    		// -------------------------------------------------------------------------------------------- //
    		const cfgValue get(const int idx) const;
    		
    		bool get(const int idx, int* value) const;
    		bool get(const int idx, float* value) const;
    		bool get(const int idx, double* value) const;
    		bool get(const int idx, long double* value) const;
    		bool get(const int idx, char** c_str) const;
    		bool get(const int idx, std::string& value) const;
    		bool get(const int idx, bool* value) const;
    
    		bool get_if_single(int* value) const;
    		bool get_if_single(float* value) const;
    		bool get_if_single(double* value) const;
    		bool get_if_single(long double* value) const;
    		bool get_if_single(char** c_str) const;
    		bool get_if_single(std::string& value) const;
    		bool get_if_single(bool* value) const;
    
    		int get_size() const;
    		const char* get_name() const;
    		// -------------------------------------------------------------------------------------------- //
    
    		// check calls
    		// -------------------------------------------------------------------------------------------- //
    		bool is_defined() const;
    		//		*: size != 0 && all values defined
    		bool is_empty() const;
    		//		*: size == 0 
    		bool is_name_empty() const;
    		//		*: name = "\0";
    		bool is_name_eq(const cfgVector& x) const;
    		bool is_name_eq(const char* name) const;
    		bool is_single() const;
    		//		*: size == 1
    		// -------------------------------------------------------------------------------------------- //
    
    		// print
    		// -------------------------------------------------------------------------------------------- //
    		void print() const;
    		void print_value() const;
    		// -------------------------------------------------------------------------------------------- //
    
    		// operators
    		// -------------------------------------------------------------------------------------------- //
    		cfgVector& operator+=(const cfgVector& x);
    		cfgVector& operator-=(const cfgVector& x);
    		cfgVector& operator*=(const cfgVector& x);
    		cfgVector& operator/=(const cfgVector& x);
    		cfgVector& operator%=(const cfgVector& x);
    		cfgVector& operator^=(const cfgVector& x);
    
    		const cfgVector operator+(const cfgVector& x) const;
    		const cfgVector operator-(const cfgVector& x) const;
    		const cfgVector operator*(const cfgVector& x) const;
    		const cfgVector operator/(const cfgVector& x) const;
    		const cfgVector operator%(const cfgVector& x) const;
    		const cfgVector operator^(const cfgVector& x) const;
    
    		const cfgVector operator==(const cfgVector& x) const;
    		const cfgVector operator!=(const cfgVector& x) const;
    		const cfgVector operator<(const cfgVector& x) const;
    		const cfgVector operator>(const cfgVector& x) const;
    		const cfgVector operator<=(const cfgVector& x) const;
    		const cfgVector operator>=(const cfgVector& x) const;
    
    		const cfgVector operator-() const;
    		const cfgVector operator+() const;
    
    		const cfgVector logical_and(const cfgVector& x) const;	// no short-circuit
    		const cfgVector logical_or(const cfgVector& y) const;	// no short-circuit
    		// -------------------------------------------------------------------------------------------- //
    
    		// functions
    		// -------------------------------------------------------------------------------------------- //
    		static const cfgVector cfg_sin(const cfgVector& x);
    		static const cfgVector cfg_cos(const cfgVector& x);
    		static const cfgVector cfg_tan(const cfgVector& x);
    		static const cfgVector cfg_log(const cfgVector& x);
    		static const cfgVector cfg_sqrt(const cfgVector& x);
    		static const cfgVector cfg_abs(const cfgVector& x);
    		static const cfgVector cfg_to_string(const cfgVector& x);
    		static const cfgVector cfg_vecmin(const cfgVector& x);
    		static const cfgVector cfg_vecmax(const cfgVector& x);
    
    		static const cfgVector cfg_min(const cfgVector& a, const cfgVector& b);
    		static const cfgVector cfg_max(const cfgVector& a, const cfgVector& b);
    
    		static const cfgVector cfg_dot_product(const cfgVector& a, const cfgVector& b);
    		static const cfgVector cfg_l2norm(const cfgVector& x);
    		static const cfgVector cfg_cnorm(const cfgVector& x);
    		// -------------------------------------------------------------------------------------------- //
    		
    		// -------------------------------------------------------------------------------------------- //
    		cfgVector();
    		cfgVector(const cfgValue& value);
    		~cfgVector();
    
    		cfgVector(const cfgVector& x);
    		const cfgVector& operator=(cfgVector x);
    		void swap(cfgVector& x);
    		// -------------------------------------------------------------------------------------------- //
    
    	private:
    		// data (private):
    		// -------------------------------------------------------------------------------------------- //
    
    		int size;
    		int nalloc;
    		static const int c_nalloc_inc = 8;
    
    		cfgValue *value;
    
    		char* name;	// default name = empty string = "\0"
    		size_t name_memsize;		// memory handler for name string
    	};
    }