From 46a5feb381512cebf5a05286730edd047b989e73 Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Tue, 13 Nov 2012 03:22:51 +0100 Subject: C++ bindings: added support for PLIST_KEY nodes. --- include/plist/Key.h | 49 ++++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 1 + src/Key.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Node.cpp | 9 ++++++- 4 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 include/plist/Key.h create mode 100644 src/Key.cpp diff --git a/include/plist/Key.h b/include/plist/Key.h new file mode 100644 index 0000000..cfb4d29 --- /dev/null +++ b/include/plist/Key.h @@ -0,0 +1,49 @@ +/* + * Key.h + * Key node type for C++ binding + * + * Copyright (c) 2012 Nikias Bassen, 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__KEY_H +#define PLIST__KEY_H + +#include +#include + +namespace PList +{ + +class Key : public Node +{ +public : + Key(Node* parent = NULL); + Key(plist_t node, Node* parent = NULL); + Key(Key& s); + Key& operator=(Key& s); + Key(const std::string& s); + virtual ~Key(); + + Node* Clone(); + + void SetValue(const std::string& s); + std::string GetValue(); +}; + +}; + +#endif // PLIST__KEY_H diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0de4c8c..ad7362b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,6 +19,7 @@ SET(libplist++_SRC String.cpp Date.cpp Data.cpp + Key.cpp Structure.cpp Array.cpp Dictionary.cpp diff --git a/src/Key.cpp b/src/Key.cpp new file mode 100644 index 0000000..4145f05 --- /dev/null +++ b/src/Key.cpp @@ -0,0 +1,75 @@ +/* + * Key.cpp + * + * Copyright (c) 2012 Nikias Bassen, 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 + +namespace PList +{ + +Key::Key(Node* parent) : Node(PLIST_KEY, parent) +{ +} + +Key::Key(plist_t node, Node* parent) : Node(node, parent) +{ +} + +Key::Key(PList::Key& k) : Node(PLIST_UINT) +{ + plist_set_key_val(_node, k.GetValue().c_str()); +} + +Key& Key::operator=(PList::Key& k) +{ + plist_free(_node); + _node = plist_copy(k.GetPlist()); + return *this; +} + +Key::Key(const std::string& s) : Node(PLIST_STRING) +{ + plist_set_key_val(_node, s.c_str()); +} + +Key::~Key() +{ +} + +Node* Key::Clone() +{ + return new Key(*this); +} + +void Key::SetValue(const std::string& s) +{ + plist_set_key_val(_node, s.c_str()); +} + +std::string Key::GetValue() +{ + char* s = NULL; + plist_get_key_val(_node, &s); + std::string ret = s; + free(s); + return ret; +} + +}; diff --git a/src/Node.cpp b/src/Node.cpp index 9bf50ee..35128a6 100644 --- a/src/Node.cpp +++ b/src/Node.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -59,6 +60,10 @@ Node::Node(plist_type type, Node* parent) : _parent(parent) case PLIST_STRING: _node = plist_new_string(""); break; + case PLIST_KEY: + _node = plist_new_string(""); + plist_set_key_val(_node, ""); + break; case PLIST_DATA: _node = plist_new_data(NULL,0); break; @@ -71,7 +76,6 @@ Node::Node(plist_type type, Node* parent) : _parent(parent) case PLIST_DICT: _node = plist_new_dict(); break; - case PLIST_KEY: case PLIST_NONE: default: break; @@ -130,6 +134,9 @@ Node* Node::FromPlist(plist_t node, Node* parent) case PLIST_STRING: ret = new String(node, parent); break; + case PLIST_KEY: + ret = new Key(node, parent); + break; case PLIST_DATE: ret = new Date(node, parent); break; -- cgit v1.1-32-gdbae