The key and value pairs config wrapper class for managing app setting.
Dependents: dconfig_demo mbed_controller_demo
Revision 2:989178d925e9, committed 2015-03-25
- Comitter:
- hillkim7
- Date:
- Wed Mar 25 21:04:58 2015 +0000
- Parent:
- 1:4f7c80fbd4a1
- Commit message:
- Add print_all() method.
Changed in this revision
dconfig.cpp | Show annotated file Show diff for this revision Revisions of this file |
dconfig.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/dconfig.cpp Tue Feb 24 15:48:43 2015 +0000 +++ b/dconfig.cpp Wed Mar 25 21:04:58 2015 +0000 @@ -50,7 +50,7 @@ return s; } -bool DConfig::load_from( const char *ptr, size_t ptr_len, char kv_delimiter, char item_delimiter ) +bool DConfig::load_from( const char *ptr, size_t ptr_len ) { const char *end = ptr + ptr_len; const char *begin; @@ -60,7 +60,7 @@ { // load key part begin = ptr; - while (*ptr != kv_delimiter) // go until it reaches delimiter + while (*ptr != kv_delimiter_) // go until it reaches delimiter { ptr++; if (ptr > end) @@ -78,7 +78,7 @@ // load value part begin = ptr; - while (*ptr != item_delimiter) + while (*ptr != item_delimiter_) { ptr++; if (ptr > end) @@ -108,21 +108,36 @@ return func(user_data, delimiter); } -bool DConfig::save_to( DConfigOutput_t func, void *user_data, char kv_delimiter, char item_delimiter ) const +bool DConfig::save_to( DConfigOutput_t func, void *user_data ) const { for (std::map<std::string, std::string>::const_iterator it = this->begin(); it != this->end(); ++it) { - if (!put_cstring(func, user_data, it->first.c_str(), kv_delimiter)) + if (!put_cstring(func, user_data, it->first.c_str(), kv_delimiter_)) return false; - if (!put_cstring(func, user_data, it->second.c_str(), item_delimiter)) + if (!put_cstring(func, user_data, it->second.c_str(), item_delimiter_)) return false; } return true; } + +static bool print_char(void *user_data, char c) +{ + if (c == '\n') + putchar('\r'); + putchar(c); + + return true; +} + +void DConfig::print_all( void ) const +{ + save_to(print_char, NULL); +} + static bool count_config(void *user_data, char c) { size_t *cnt = (size_t*)user_data; @@ -159,3 +174,4 @@ return value_replace(key_name, tmp); } +
--- a/dconfig.h Tue Feb 24 15:48:43 2015 +0000 +++ b/dconfig.h Wed Mar 25 21:04:58 2015 +0000 @@ -49,6 +49,12 @@ class DConfig : public std::map<std::string, std::string> { public: + DConfig(char kv_delimiter='=', char item_delimiter='\n') + : kv_delimiter_(kv_delimiter) + , item_delimiter_(item_delimiter) + { + } + /** lookup value by key and return value as int if a key exists. */ int lookup_as_int(const std::string &key_name, int default_value) const; @@ -68,17 +74,17 @@ bool value_replace(const std::string &key_name, int value); /** load key & value pairs from memory. - * The delimiters are same as them used in the load_from(). - * @param kv_delimiter delimiter char between key and value. - * @param item_delimiter delimiter char between items. - */ - bool load_from(const char *ptr, size_t ptr_len, char kv_delimiter='=', char item_delimiter='\n'); + * The delimiters are same as them used in the load_from(). + */ + bool load_from(const char *ptr, size_t ptr_len); /** save all key & value pairs by calling callback function. - * @param kv_delimiter delimiter char between key and value. - * @param item_delimiter delimiter char between items. */ - bool save_to(DConfigOutput_t func, void *user_data, char kv_delimiter='=', char item_delimiter='\n') const; + bool save_to(DConfigOutput_t func, void *user_data) const; + + + /** print all item into the stdout */ + void print_all(void) const; /** estimate number of bytes for saving */ size_t estimate_save(void) const; @@ -93,5 +99,12 @@ virtual void reset_default(void) { } + +protected: + /// kv_delimiter delimiter char between key and value. + char kv_delimiter_; + /// item_delimiter delimiter char between items. + char item_delimiter_; }; +