Commit 8c6a809f authored by Jonathan Beck's avatar Jonathan Beck

Move some methods and drop Utils class in C++ binding.

parent 53a9f891
......@@ -11,7 +11,6 @@ SET( libplist_HDR
${CMAKE_CURRENT_SOURCE_DIR}/plist/Real.h
${CMAKE_CURRENT_SOURCE_DIR}/plist/String.h
${CMAKE_CURRENT_SOURCE_DIR}/plist/Structure.h
${CMAKE_CURRENT_SOURCE_DIR}/plist/Utils.h
)
INSTALL( FILES ${libplist_HDR}
......
......@@ -38,6 +38,8 @@ public :
plist_type GetType();
plist_t GetPlist();
static Node* FromPlist(plist_t node, Node* parent = NULL);
protected:
Node(Node* parent = NULL);
Node(plist_t node, Node* parent = NULL);
......
......@@ -41,6 +41,9 @@ public :
virtual void Remove(Node* node) = 0;
static Structure* FromXml(const std::string& xml);
static Structure* FromBin(const std::vector<char>& bin);
protected:
Structure(Node* parent = NULL);
Structure(plist_type type, Node* parent = NULL);
......
/*
* Utils.h
* Import functions for C++ binding
*
* Copyright (c) 2009 Jonathan Beck All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef PLIST__UTILS_H
#define PLIST__UTILS_H
#include <plist/Structure.h>
#include <string>
namespace PList
{
class Utils
{
public:
static Node* FromPlist(plist_t node, Node* parent = NULL);
static Structure* FromXml(const std::string& xml);
static Structure* FromBin(const std::vector<char>& bin);
private:
Utils();
~Utils();
};
};
#endif // PLIST__UTILS_H
......@@ -33,6 +33,5 @@
#include "Real.h"
#include "String.h"
#include "Structure.h"
#include "Utils.h"
#endif
......@@ -18,7 +18,6 @@ SET(libplist++_SRC
Structure.cpp
Array.cpp
Dictionary.cpp
Utils.cpp
)
ADD_LIBRARY( plist SHARED ${libplist_SRC} )
......
......@@ -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;
}
};
......@@ -85,5 +85,39 @@ void Structure::UpdateNodeParent(Node* node)
node->_parent = this;
}
static Structure* ImportStruct(plist_t root)
{
Structure* ret = NULL;
plist_type type = plist_get_node_type(root);
if (PLIST_ARRAY == type || PLIST_DICT == type)
{
ret = static_cast<Structure*>(Node::FromPlist(root));
}
else
{
plist_free(root);
}
return ret;
}
Structure* Structure::FromXml(const std::string& xml)
{
plist_t root = NULL;
plist_from_xml(xml.c_str(), xml.size(), &root);
return ImportStruct(root);
}
Structure* Structure::FromBin(const std::vector<char>& bin)
{
plist_t root = NULL;
plist_from_bin(&bin[0], bin.size(), &root);
return ImportStruct(root);
}
};
/*
* Utils.cpp
*
* Copyright (c) 2009 Jonathan Beck All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdlib.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
{
Node* Utils::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;
}
static Structure* ImportStruct(plist_t root)
{
Structure* ret = NULL;
plist_type type = plist_get_node_type(root);
if (PLIST_ARRAY == type || PLIST_DICT == type)
{
ret = static_cast<Structure*>(Utils::FromPlist(root));
}
else
{
plist_free(root);
}
return ret;
}
Structure* Utils::FromXml(const std::string& xml)
{
plist_t root = NULL;
plist_from_xml(xml.c_str(), xml.size(), &root);
return ImportStruct(root);
}
Structure* Utils::FromBin(const std::vector<char>& bin)
{
plist_t root = NULL;
plist_from_bin(&bin[0], bin.size(), &root);
return ImportStruct(root);
}
};
......@@ -159,7 +159,6 @@ namespace std {
%include <plist/Structure.h>
%include <plist/Array.h>
%include <plist/Dictionary.h>
%include <plist/Utils.h>
typedef enum {
PLIST_BOOLEAN,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment