From a922b714c9b75fdc67735d674758d4eaedfd32f9 Mon Sep 17 00:00:00 2001 From: Jonathan Beck Date: Tue, 13 Oct 2009 20:04:06 +0200 Subject: Add C++ binding. --- src/Utils.cpp | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/Utils.cpp (limited to 'src/Utils.cpp') diff --git a/src/Utils.cpp b/src/Utils.cpp new file mode 100644 index 0000000..a9d2459 --- /dev/null +++ b/src/Utils.cpp @@ -0,0 +1,74 @@ +/* + * 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 +#include +#include +#include + +namespace PList +{ + +static Structure* FromPlist(plist_t root) +{ + Structure* ret = NULL; + if (root) + { + plist_type type = plist_get_node_type(root); + switch(type) + { + case PLIST_DICT: + ret = new Dictionary(root); + break; + case PLIST_ARRAY: + ret = new Array(root); + break; + case PLIST_BOOLEAN: + case PLIST_UINT: + case PLIST_REAL: + case PLIST_STRING: + case PLIST_DATE: + case PLIST_DATA: + default: + plist_free(root); + break; + } + } + return ret; +} + +Structure* Utils::FromXml(std::string& in) +{ + plist_t root = NULL; + plist_from_xml(in.c_str(), in.size(), &root); + + return FromPlist(root); +} + +Structure* Utils::FromBin(std::vector& in) +{ + plist_t root = NULL; + plist_from_bin(&in[0], in.size(), &root); + + return FromPlist(root); + +} + +}; -- cgit v1.1-32-gdbae