The key and value pairs config wrapper class for managing app setting.

Dependents:   dconfig_demo mbed_controller_demo

Files at this revision

API Documentation at this revision

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_;
 };
 
+