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(bool value) const {
49 return value ? "true" : "false";
50 }
51
57 std::string convert_to_string(const std::string& value) const {
58 return value;
59 }
60
71 void add_void(const std::string& key, const std::string& value) {
72 if(key.empty() && value.empty())
73 return;
74
75 if(!v_.empty())
76 v_ += property_delimiter_;
77
78 if(!key.empty() && !value.empty())
79 v_ += key + key_value_delimiter_ + value;
80 else
81 v_ += key + value;
82 }
83
84public:
89 property_string(const std::string& key_value_delimiter = "=", const std::string& property_delimiter = ";") :
90 key_value_delimiter_(key_value_delimiter),
91 property_delimiter_(property_delimiter) {}
92
95 bool empty() const {
96 return v_.empty();
97 }
98
100 void clear() {
101 v_.clear();
102 }
103
109 template<typename T>
110 void add(const std::string& key, T value) {
111 add_void(key, convert_to_string(value));
112 }
113
120 template<typename T>
121 void add_bracketed(const std::string& key, const T value, char bracket = '\'') {
122 std::string str = bracket + convert_to_string(value) + bracket;
123 add_void(key, str);
124 }
125
132 template<typename T>
133 void add_bracketed(const std::string& key, const T value, char opening_bracket, char closing_bracket) {
134 std::string str = opening_bracket + convert_to_string(value) + closing_bracket;
135 add_void(key, str);
136 }
137
139 operator std::string() const {
140 return v_;
141 }
142};
143
144}
145}
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