#ifndef PLIST_DICTIONARY_H
#define PLIST_DICTIONARY_H
#include <plist/Structure.h>
#include <map>
#include <string>
namespace PList
{
class Dictionary : public Structure
{
public :
Dictionary(Node* parent = NULL);
Dictionary(plist_t node, Node* parent = NULL);
Dictionary(const Dictionary& d);
Dictionary& operator=(const Dictionary& d);
virtual ~Dictionary();
Node* Clone() const;
typedef std::map<std::string,Node*>::iterator iterator;
typedef std::map<std::string,Node*>::const_iterator const_iterator;
Node* operator[](const std::string& key);
iterator Begin();
iterator begin();
iterator End();
iterator end();
iterator Find(const std::string& key);
const_iterator Begin() const;
const_iterator begin() const;
const_iterator End() const;
const_iterator end() const;
size_t size() const;
const_iterator Find(const std::string& key) const;
iterator Set(const std::string& key, const Node* node);
iterator Set(const std::string& key, const Node& node);
void Remove(Node* node);
void Remove(const std::string& key);
std::string GetNodeKey(Node* node);
template <typename T> T* Get(const std::string& key) {
return (T*)(_map[key]);
}
private :
std::map<std::string,Node*> _map;
};
};
#endif