C++: Optimize PropertyProxy
[jansson.git] / src / jansson.hpp
index 265b2b9..efb4b52 100644 (file)
@@ -1,4 +1,5 @@
 // Copyright (c) 2010 Sean Middleditch <sean@middleditch.us>
+// Copyright (c) 2010 Petri Lehtinen <petri@digip.org>
 //
 // Jansson is free software; you can redistribute it and/or modify
 // it under the terms of the MIT license. See LICENSE for details.
 #include <ostream>
 #include <istream>
 #include <sstream>
+
+// Included so that standard functions don't end up in namespace json
+#include <cstdio>
+
+// For free()
 #include <cstdlib>
 
 namespace json {
@@ -121,10 +127,11 @@ namespace json {
             inline _Base& insert_at(unsigned int index, const Value& value);
 
             // write the value to a file
-            inline int save_file(const char* path, int flags = 0) const;
+            inline int dump_file(const char* path, int flags = 0) const;
+            inline int dump_file(const std::string& path, int flags = 0) const;
 
             // write the value to a string (caller must deallocate with free()!)
-            inline char* save_string(int flags = 0) const;
+            inline char* dumps(int flags = 0) const;
         };
 
         // represents any JSON value, private base
@@ -159,8 +166,9 @@ namespace json {
         // proxies an array element
         class ElementProxy {
         public:
-            // constructor
-            ElementProxy(json_t* array, unsigned int index) : _array(array), _index(index) {}
+            ElementProxy(json_t* array, unsigned int index);
+            ElementProxy(const ElementProxy& other);
+            ~ElementProxy();
 
             // assign to the proxied element
             inline ElementProxy& operator=(const Value& value);
@@ -179,8 +187,9 @@ namespace json {
         // proxies an object property
         class PropertyProxy {
         public:
-            // constructor
-            PropertyProxy(json_t* array, const char* key) : _object(array), _key(key) {}
+            PropertyProxy(json_t* object, const char *key);
+            PropertyProxy(const PropertyProxy& other);
+            ~PropertyProxy();
 
             // assign to the proxied element
             inline PropertyProxy& operator=(const Value& value);
@@ -192,8 +201,11 @@ namespace json {
             // array object we wrap
             json_t* _object;
 
+            // iterator pointing to property
+            void* _iter;
+
             // key of property
-            const char* _key;
+            char* _key;
         };
 
     } // namespace json::detail
@@ -283,9 +295,11 @@ namespace json {
 
     // load a file as a JSON value
     inline Value load_file(const char* path, json_error_t* error = 0);
+    inline Value load_file(const std::string& path, json_error_t* error = 0);
 
     // load a string as a JSON value
-    inline Value load_string(const char* string, json_error_t* error = 0);
+    inline Value loads(const char* string, json_error_t* error = 0);
+    inline Value loads(const std::string& string, json_error_t* error = 0);
 
 } // namespace json