From 553c3849207a29abd1cb58f82d5994e5cd9d1f2d Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Tue, 19 Mar 2013 16:50:47 +0100 Subject: C++: added support for PLIST_UID nodes (class Uid) --- include/CMakeLists.txt | 1 + include/plist/Uid.h | 48 ++++++++++++++++++++++++++++++++ include/plist/plist++.h | 1 + src/CMakeLists.txt | 1 + src/Node.cpp | 7 +++++ src/Uid.cpp | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 131 insertions(+) create mode 100644 include/plist/Uid.h create mode 100644 src/Uid.cpp diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index ca07978..f6d3ea7 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -11,6 +11,7 @@ SET( libplist_HDR ${CMAKE_CURRENT_SOURCE_DIR}/plist/Real.h ${CMAKE_CURRENT_SOURCE_DIR}/plist/String.h ${CMAKE_CURRENT_SOURCE_DIR}/plist/Key.h + ${CMAKE_CURRENT_SOURCE_DIR}/plist/Uid.h ${CMAKE_CURRENT_SOURCE_DIR}/plist/Structure.h ) diff --git a/include/plist/Uid.h b/include/plist/Uid.h new file mode 100644 index 0000000..62a49e7 --- /dev/null +++ b/include/plist/Uid.h @@ -0,0 +1,48 @@ +/* + * Uid.h + * Uid 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__UID_H +#define PLIST__UID_H + +#include + +namespace PList +{ + +class Uid : public Node +{ +public : + Uid(Node* parent = NULL); + Uid(plist_t node, Node* parent = NULL); + Uid(Uid& i); + Uid& operator=(Uid& i); + Uid(uint64_t i); + virtual ~Uid(); + + Node* Clone(); + + void SetValue(uint64_t i); + uint64_t GetValue(); +}; + +}; + +#endif // PLIST__UID_H diff --git a/include/plist/plist++.h b/include/plist/plist++.h index 0690b26..b29fc76 100644 --- a/include/plist/plist++.h +++ b/include/plist/plist++.h @@ -32,6 +32,7 @@ #include "Node.h" #include "Real.h" #include "Key.h" +#include "Uid.h" #include "String.h" #include "Structure.h" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ad7362b..c4f5483 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -20,6 +20,7 @@ SET(libplist++_SRC Date.cpp Data.cpp Key.cpp + Uid.cpp Structure.cpp Array.cpp Dictionary.cpp diff --git a/src/Node.cpp b/src/Node.cpp index 35128a6..516d1ae 100644 --- a/src/Node.cpp +++ b/src/Node.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -64,6 +65,9 @@ Node::Node(plist_type type, Node* parent) : _parent(parent) _node = plist_new_string(""); plist_set_key_val(_node, ""); break; + case PLIST_UID: + _node = plist_new_uid(0); + break; case PLIST_DATA: _node = plist_new_data(NULL,0); break; @@ -137,6 +141,9 @@ Node* Node::FromPlist(plist_t node, Node* parent) case PLIST_KEY: ret = new Key(node, parent); break; + case PLIST_UID: + ret = new Uid(node, parent); + break; case PLIST_DATE: ret = new Date(node, parent); break; diff --git a/src/Uid.cpp b/src/Uid.cpp new file mode 100644 index 0000000..02a59b3 --- /dev/null +++ b/src/Uid.cpp @@ -0,0 +1,73 @@ +/* + * Uid.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 +{ + +Uid::Uid(Node* parent) : Node(PLIST_UID, parent) +{ +} + +Uid::Uid(plist_t node, Node* parent) : Node(node, parent) +{ +} + +Uid::Uid(PList::Uid& i) : Node(PLIST_UID) +{ + plist_set_uid_val(_node, i.GetValue()); +} + +Uid& Uid::operator=(PList::Uid& i) +{ + plist_free(_node); + _node = plist_copy(i.GetPlist()); + return *this; +} + +Uid::Uid(uint64_t i) : Node(PLIST_UID) +{ + plist_set_uid_val(_node, i); +} + +Uid::~Uid() +{ +} + +Node* Uid::Clone() +{ + return new Uid(*this); +} + +void Uid::SetValue(uint64_t i) +{ + plist_set_uid_val(_node, i); +} + +uint64_t Uid::GetValue() +{ + uint64_t i = 0; + plist_get_uid_val(_node, &i); + return i; +} + +}; -- cgit v1.1-32-gdbae