summaryrefslogtreecommitdiffstats
path: root/src/Node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Node.cpp')
-rw-r--r--src/Node.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/Node.cpp b/src/Node.cpp
index b0cc96a..3122322 100644
--- a/src/Node.cpp
+++ b/src/Node.cpp
@@ -21,6 +21,15 @@
#include <stdlib.h>
#include <plist/Node.h>
#include <plist/Structure.h>
+#include <plist/Utils.h>
+#include <plist/Dictionary.h>
+#include <plist/Array.h>
+#include <plist/Boolean.h>
+#include <plist/Integer.h>
+#include <plist/Real.h>
+#include <plist/String.h>
+#include <plist/Data.h>
+#include <plist/Date.h>
namespace PList
{
@@ -96,4 +105,44 @@ Node* Node::GetParent()
return _parent;
}
+Node* Node::FromPlist(plist_t node, Node* parent)
+{
+ Node* ret = NULL;
+ if (node)
+ {
+ plist_type type = plist_get_node_type(node);
+ switch (type)
+ {
+ case PLIST_DICT:
+ ret = new Dictionary(node, parent);
+ break;
+ case PLIST_ARRAY:
+ ret = new Array(node, parent);
+ break;
+ case PLIST_BOOLEAN:
+ ret = new Boolean(node, parent);
+ break;
+ case PLIST_UINT:
+ ret = new Integer(node, parent);
+ break;
+ case PLIST_REAL:
+ ret = new Real(node, parent);
+ break;
+ case PLIST_STRING:
+ ret = new String(node, parent);
+ break;
+ case PLIST_DATE:
+ ret = new Date(node, parent);
+ break;
+ case PLIST_DATA:
+ ret = new Data(node, parent);
+ break;
+ default:
+ plist_free(node);
+ break;
+ }
+ }
+ return ret;
+}
+
};