cgv
Loading...
Searching...
No Matches
property_string.h
1#pragma once
2
3#include <string>
4
5namespace cgv {
6namespace gui {
7
25private:
27 std::string v_;
29 std::string key_value_delimiter_;
31 std::string property_delimiter_;
32
38 template<typename T>
39 std::string convert_to_string(T value) const {
40 return std::to_string(value);
41 }
42
48 std::string convert_to_string(const std::string& value) const {
49 return value;
50 }
51
56 std::string convert_to_string(const char* value) const {
57 return std::string(value);
58 }
59
65 std::string convert_to_string(char value) const {
66 return { value };
67 }
68
73 std::string convert_to_string(bool value) const {
74 return value ? "true" : "false";
75 }
76
87 void add_void(const std::string& key, const std::string& value) {
88 if(key.empty() && value.empty())
89 return;
90
91 if(!v_.empty())
92 v_ += property_delimiter_;
93
94 if(!key.empty() && !value.empty())
95 v_ += key + key_value_delimiter_ + value;
96 else
97 v_ += key + value;
98 }
99
100public:
105 property_string(const std::string& key_value_delimiter = "=", const std::string& property_delimiter = ";") :
106 key_value_delimiter_(key_value_delimiter),
107 property_delimiter_(property_delimiter) {}
108
111 bool empty() const {
112 return v_.empty();
113 }
114
116 void clear() {
117 v_.clear();
118 }
119
125 template<typename T>
126 void add(const std::string& key, T value) {
127 add_void(key, convert_to_string(value));
128 }
129
136 template<typename T>
137 void add_bracketed(const std::string& key, const T value, char bracket = '\'') {
138 std::string str = bracket + convert_to_string(value) + bracket;
139 add_void(key, str);
140 }
141
148 template<typename T>
149 void add_bracketed(const std::string& key, const T value, char opening_bracket, char closing_bracket) {
150 std::string str = opening_bracket + convert_to_string(value) + closing_bracket;
151 add_void(key, str);
152 }
153
155 operator std::string() const {
156 return v_;
157 }
158};
159
160}
161}
A convenience class for compiling strings of delimited key-value pairs useful for defining GUI contro...
void add(const std::string &key, T value)
Add key-value pair to end of content, converting value to string.
property_string(const std::string &key_value_delimiter="=", const std::string &property_delimiter=";")
Construct a new empty property string using the given delimiters.
bool empty() const
Check if empty.
void add_bracketed(const std::string &key, const T value, char opening_bracket, char closing_bracket)
See add.
void add_bracketed(const std::string &key, const T value, char bracket='\'')
See add.
void clear()
Clear content.
the cgv namespace
Definition print.h:11