For now, remove unused security model files
diff --git a/ndn-cpp/security/certificate.h b/ndn-cpp/security/certificate.h
deleted file mode 100644
index e0efa91..0000000
--- a/ndn-cpp/security/certificate.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef NDN_CERTIFICATE_H
-#define NDN_CERTIFICATE_H
-
-#include "ndn-cpp/data.h"
-
-namespace ndn {
-
-/**
- * @brief Class representing NDN identity
- *
- * - name
- * - full NDN name of the NDN certificate
- * - /ndn/ucla.edu/alex/cert/<pubkey.sha256>/<issuer>
- * - content
- * - X.509 certificate in DER format (X.509 certificate can include any necessary identity information, as well as is fully extendable)
- * - Subject:
- * - full real name, associated with the certificate
- * - full affiliation, associated with the certificate
- * - Subject Public Key Info
- * - Validity
- * - signature
- * - issuerCertName (KeyLocator/CertName)
- * - /ndn/ucla.edu/cert/<pubkey.sha256>/<issuer>
- *
- */
-class Certificate : public Data
-{
-public:
-};
-
-} // ndn
-
-#endif // NDN_CERTIFICATE_H
diff --git a/ndn-cpp/security/identity.h b/ndn-cpp/security/identity.h
deleted file mode 100644
index 676b3b3..0000000
--- a/ndn-cpp/security/identity.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef NDN_IDENTITY_H
-#define NDN_IDENTITY_H
-
-namespace ndn {
-
-/**
- * @brief Class representing NDN identity
- *
- * - name
- * - (indexing and lookup)
- * - /ndn/ucla.edu/alex
- * - contents
- * - privateKeyName
- * - unique name of the private key
- * - private key bits are not exposed anywhere
- * - /ndn/ucla.edu/alex/privKey/<pubkey.sha256>
- * - indexed list of certificates
- * - NDN DATA packets
- * - easy access data structure of NDN certificate (“parsed DATA packet”)
- * - link to default certificate
- * - revocation list
- * - one or more NDN DATA packets
- * - name: <identity-name>/revocation-list/<version>(/<seqno>)?
- * - /ndn/ucla.edu/alex/revocation-list/%FD...01
- * - initially empty, updated whenever an issued certificate is getting revoked
- * - revocation always exists
- *
- */
-class Identity
-{
-public:
-};
-
-} // ndn
-
-#endif // NDN_IDENTITY_H
diff --git a/ndn-cpp/security/keychain-pkcs12.cc b/ndn-cpp/security/keychain-pkcs12.cc
deleted file mode 100644
index 8a01fd5..0000000
--- a/ndn-cpp/security/keychain-pkcs12.cc
+++ /dev/null
@@ -1,69 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#include "keychain-pkcs12.h"
-
-namespace ndn {
-
-/////////////////////////////////////////////////////
-// interface to manage certificates and identities //
-/////////////////////////////////////////////////////
-
-Ptr<const Identity>
-KeychainKeystoreOpenssl::getDefaultIdentity ()
-{
- return Ptr<const Identity> ();
-}
-
-Ptr<const Identity>
-KeychainKeystoreOpenssl::getIdentity (const Name &identityName)
-{
- return Ptr<const Identity> ();
-}
-
-Ptr<const Identity>
-KeychainKeystoreOpenssl::generateIdentity (const Name &identityName)
-{
- return Ptr<const Identity> ();
-}
-
-void
-KeychainKeystoreOpenssl::requestIdentityCertificate (const Identity &identity, std::ostream &os)
-{
-}
-
-Ptr<const Certificate>
-KeychainKeystoreOpenssl::issueCertificate (const Identity &identity, std::istream &is)
-{
- return Ptr<const Certificate> ();
-}
-
-Ptr<const Certificate>
-KeychainKeystoreOpenssl::issueCertificate (std::istream &is)
-{
- return Ptr<const Certificate> ();
-}
-
-void
-KeychainKeystoreOpenssl::installIdentityCertificate (const Certificate &cert)
-{
-}
-
-/////////////////////////////////////////////////////
-// interface to sign and encrypt data //
-/////////////////////////////////////////////////////
-Ptr<Signature>
-KeychainKeystoreOpenssl::sign (const Identity &identity, const void *buffer, size_t size)
-{
- return Ptr<Signature> ();
-}
-
-
-} // ndn
diff --git a/ndn-cpp/security/keychain-pkcs12.h b/ndn-cpp/security/keychain-pkcs12.h
deleted file mode 100644
index 898d792..0000000
--- a/ndn-cpp/security/keychain-pkcs12.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef NDN_KEYCHAIN_PKCS12_H
-#define NDN_KEYCHAIN_PKCS12_H
-
-#include "keychain.h"
-#include "ndn-cpp/helpers/hash.h"
-
-namespace ndn
-{
-
-/**
- * @brief Class implementing logic to work with pkcs12 CCNx keystore file (.ccnx_keystore)
- */
-class KeychainKeystoreOpenssl : public virtual Keychain
-{
-public:
- KeychainKeystoreOpenssl ();
- KeychainKeystoreOpenssl (const std::string &path);
-
-public:
- /////////////////////////////////////////////////////
- // interface to manage certificates and identities //
- /////////////////////////////////////////////////////
-
- virtual Ptr<const Identity>
- getDefaultIdentity ();
-
- virtual Ptr<const Identity>
- getIdentity (const Name &identityName);
-
- virtual Ptr<const Identity>
- generateIdentity (const Name &identityName);
-
- virtual void
- requestIdentityCertificate (const Identity &identity, std::ostream &os);
-
- virtual Ptr<const Certificate>
- issueCertificate (const Identity &identity, std::istream &is);
-
- virtual Ptr<const Certificate>
- issueCertificate (std::istream &is);
-
- virtual void
- installIdentityCertificate (const Certificate &cert);
-
-public:
- /////////////////////////////////////////////////////
- // interface to sign and encrypt data //
- /////////////////////////////////////////////////////
- virtual Ptr<Signature>
- sign (const Identity &identity, const void *buffer, size_t size);
-
-
-private:
- void
- initialize (const std::string &pkcs12);
-
-private:
- Name m_publicKeyName;
- Hash m_publicKeyDigest;
-};
-
-} // ndn
-
-#endif // NDN_KEYCHAIN_KEYSTORE_OPENSSL_H
diff --git a/ndn-cpp/security/keychain.cc b/ndn-cpp/security/keychain.cc
deleted file mode 100644
index 2f7fbe5..0000000
--- a/ndn-cpp/security/keychain.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#include "keychain.h"
-
-ndn::Keychain::~Keychain ()
-{
-}
diff --git a/ndn-cpp/security/keychain.h b/ndn-cpp/security/keychain.h
deleted file mode 100644
index 83a09dd..0000000
--- a/ndn-cpp/security/keychain.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef NDN_KEYCHAIN_H
-#define NDN_KEYCHAIN_H
-
-// #include "ndn-cpp/fields/blob.h"
-// #include "ndn-cpp/fields/name.h"
-
-#include "identity.h"
-#include "certificate.h"
-
-#include <iostream>
-
-namespace ndn {
-
-/**
- * @brief Interface for a keychain operations
- *
- * Keychain has the following set of operations:
- *
- * --- interface to manage certificates and identities
- * - identities are permanently stored
- * - certificates can be cached (or stored permanently, if user is willing to)
- * --- interface to sign and encrypt data
- *
- */
-class Keychain
-{
-public:
- /**
- * @brief Virtual destructor
- */
- virtual
- ~Keychain ();
-
- /////////////////////////////////////////////////////
- // interface to manage certificates and identities //
- /////////////////////////////////////////////////////
-
- /**
- * @brief Get default identity
- */
- virtual Ptr<const Identity>
- getDefaultIdentity () = 0;
-
- /**
- * @brief Get identity by name
- * @param identityName name of the requested identity
- */
- virtual Ptr<const Identity>
- getIdentity (const Name &identityName) = 0;
-
- /**
- * @brief Create a self-certified identity
- * @param identityName name of the identity to create
- */
- virtual Ptr<const Identity>
- generateIdentity (const Name &identityName) = 0;
-
- /**
- * @brief Create identity certification request
- * @param identity identity for which create the request
- * @param os output stream which will receive the request
- */
- virtual void
- requestIdentityCertificate (const Identity &identity, std::ostream &os) = 0;
-
- /**
- * @brief Issue a certificate using parameters from the input stream (formatted as request)
- * @param identity Identity which will be used to issue the certificate
- * @param is input stream from which to read parameters of the certificate
- *
- * @returns smart pointer to a signed certificate
- */
- virtual Ptr<const Certificate>
- issueCertificate (const Identity &identity, std::istream &is) = 0;
-
- /**
- * @brief Issue a certificate using parameters from the input stream (formatted as request)
- *
- * Same as another version, but using the default identity
- *
- * @returns smart pointer to a signed certificate
- */
- virtual Ptr<const Certificate>
- issueCertificate (std::istream &is) = 0;
-
- /**
- * @brief Install identity certificate
- * @param cert certificate to install
- */
- virtual void
- installIdentityCertificate (const Certificate &cert) = 0;
-
-public:
- /////////////////////////////////////////////////////
- // interface to sign and encrypt data //
- /////////////////////////////////////////////////////
-
- /**
- * @brief Sign data using specified identity
- * @param identity selected identity to sign data
- * @param buffer pointer to the data to sign
- * @param size length of data to sign
- *
- * @return pointer to base class of a signature object (depending on identity,
- * different types signature can be produced)
- */
- virtual Ptr<Signature>
- sign (const Identity &identity, const void *buffer, size_t size) = 0;
-
- // TBD
- // /**
- // * @brief Decrypt data using the specified identity
- // */
- // virtual ?
- // decrypt (Ptr<Identity> identity, const void *buffer, size_t size, ?) = 0;
-};
-
-} // ndn
-
-#endif // NDN_KEYCHAIN_H
diff --git a/ndn-cpp/security/verifier.h b/ndn-cpp/security/verifier.h
deleted file mode 100644
index cb98243..0000000
--- a/ndn-cpp/security/verifier.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef NDN_VERIFIER_H
-#define NDN_VERIFIER_H
-
-namespace ndn {
-
-/**
- * @brief Interface for NDN DATA packet verification (trust model)
- *
- * --- interface to verify DATA packets
- * - application selects required implementation
- * - at least two build-in models:
- * = hierarchical (default)
- * = simple chain (without authorization)
- * - uses NDN keychain as a backend to cache certificates
- */
-class Verifier
-{
-public:
- /**
- * @brief Virtual destructor
- */
- virtual
- ~Verifier ();
-};
-
-} // ndn
-
-#endif // NDN_VERIFIER_H
diff --git a/ndn-cpp/trie/detail/functor-hook.h b/ndn-cpp/trie/detail/functor-hook.h
deleted file mode 100644
index f34969c..0000000
--- a/ndn-cpp/trie/detail/functor-hook.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2012 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef FUNCTOR_HOOK_H_
-#define FUNCTOR_HOOK_H_
-
-#include <boost/intrusive/parent_from_member.hpp>
-
-namespace ns3 {
-namespace ndn {
-namespace ndnSIM {
-namespace detail {
-
-template<class BaseHook, class ValueType, int N>
-struct FunctorHook
-{
- typedef typename BaseHook::template index<N>::type hook_type;
- typedef hook_type* hook_ptr;
- typedef const hook_type* const_hook_ptr;
-
- typedef ValueType value_type;
- typedef value_type* pointer;
- typedef const value_type* const_pointer;
-
- //Required static functions
- static hook_ptr to_hook_ptr (value_type &value)
- { return &value.policy_hook_.template get<N> (); }
-
- static const_hook_ptr to_hook_ptr(const value_type &value)
- { return &value.policy_hook_.template get<N> (); }
-
- static pointer to_value_ptr(hook_ptr n)
- {
- return
- boost::intrusive::get_parent_from_member<value_type>
- (static_cast<BaseHook*> (boost::intrusive::get_parent_from_member< wrap<hook_type> >(n, &wrap<hook_type>::value_)),
- &value_type::policy_hook_);
- }
- static const_pointer to_value_ptr(const_hook_ptr n)
- {
- return
- boost::intrusive::get_parent_from_member<value_type>
- (static_cast<const BaseHook*> (boost::intrusive::get_parent_from_member< wrap<hook_type> >(n, &wrap<hook_type>::value_)),
- &value_type::policy_hook_);
- }
-};
-
-} // detail
-} // ndnSIM
-} // ndn
-} // ns3
-
-#endif // FUNCTOR_HOOK_H_
diff --git a/ndn-cpp/trie/detail/multi-policy-container.h b/ndn-cpp/trie/detail/multi-policy-container.h
deleted file mode 100644
index c1251e9..0000000
--- a/ndn-cpp/trie/detail/multi-policy-container.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef MULTI_POLICY_CONTAINER_H_
-#define MULTI_POLICY_CONTAINER_H_
-
-#include <boost/mpl/inherit_linearly.hpp>
-#include <boost/mpl/at.hpp>
-
-namespace ns3 {
-namespace ndn {
-namespace ndnSIM {
-namespace detail {
-
-template< class Base, class Value >
-struct policy_wrap
-{
- policy_wrap (Base &base) : value_ (base) { }
- Value value_;
-};
-
-template< class Base, class Super/*empy_wrap/previous level*/, class Value/*policy_wrap< element in vector >*/ >
-struct inherit_with_base : Super, Value
-{
- inherit_with_base (Base &base) : Super (base), Value (base) { }
-
- void
- update (typename Base::iterator item)
- {
- Value::value_.update (item);
- Super::update (item);
- }
-
- bool
- insert (typename Base::iterator item)
- {
- bool ok = Value::value_.insert (item);
- if (!ok)
- return false;
-
- ok = Super::insert (item);
- if (!ok)
- {
- Value::value_.erase (item);
- return false;
- }
- return true;
- }
-
- void
- lookup (typename Base::iterator item)
- {
- Value::value_.lookup (item);
- Super::lookup (item);
- }
-
- void
- erase (typename Base::iterator item)
- {
- Value::value_.erase (item);
- Super::erase (item);
- }
-
- void
- clear ()
- {
- Value::value_.clear ();
- Super::clear ();
- }
-};
-
-template< class Base >
-struct empty_policy_wrap
-{
- empty_policy_wrap (Base &base) { }
-
- void update (typename Base::iterator item) {}
- bool insert (typename Base::iterator item) { return true; }
- void lookup (typename Base::iterator item) {}
- void erase (typename Base::iterator item) {}
- void clear () {}
-};
-
-template< class Base, class Vector >
-struct multi_policy_container
- : public boost::mpl::fold< Vector,
- empty_policy_wrap<Base>,
- inherit_with_base<Base,
- boost::mpl::_1/*empty/previous*/,
- policy_wrap<Base, boost::mpl::_2>/*element in vector*/>
- >::type
-{
- typedef typename boost::mpl::fold< Vector,
- empty_policy_wrap<Base>,
- inherit_with_base<Base,
- boost::mpl::_1/*empty/previous*/,
- policy_wrap<Base, boost::mpl::_2>/*element in vector*/>
- >::type super;
-
- typedef typename boost::mpl::at_c<Vector, 0>::type::iterator iterator;
- typedef typename boost::mpl::at_c<Vector, 0>::type::const_iterator const_iterator;
-
- iterator begin () { return this->get<0> ().begin (); }
- const_iterator begin () const { return this->get<0> ().begin (); }
-
- iterator end () { return this->get<0> ().end (); }
- const_iterator end () const { return this->get<0> ().end (); }
-
- size_t size () const { return this->get<0> ().size (); }
-
- multi_policy_container (Base &base)
- : super (base)
- { }
-
- template<int N>
- struct index
- {
- typedef typename boost::mpl::at_c<Vector, N>::type type;
- };
-
- template<class T>
- T &
- get ()
- {
- return static_cast< policy_wrap<Base, T> &> (*this).value_;
- }
-
- template<class T>
- const T &
- get () const
- {
- return static_cast< const policy_wrap<Base, T> &> (*this).value_;
- }
-
- template<int N>
- typename boost::mpl::at_c<Vector, N>::type &
- get ()
- {
- typedef typename boost::mpl::at_c<Vector, N>::type T;
- return static_cast< policy_wrap<Base, T> &> (*this).value_;
- }
-
- template<int N>
- const typename boost::mpl::at_c<Vector, N>::type &
- get () const
- {
- typedef typename boost::mpl::at_c<Vector, N>::type T;
- return static_cast< const policy_wrap<Base, T> &> (*this).value_;
- }
-};
-
-
-} // detail
-} // ndnSIM
-} // ndn
-} // ns3
-
-#endif // MULTI_POLICY_CONTAINER_H_
diff --git a/ndn-cpp/trie/detail/multi-type-container.h b/ndn-cpp/trie/detail/multi-type-container.h
deleted file mode 100644
index d4971c4..0000000
--- a/ndn-cpp/trie/detail/multi-type-container.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef MULTI_TYPE_CONTAINER_H_
-#define MULTI_TYPE_CONTAINER_H_
-
-#include <boost/mpl/inherit_linearly.hpp>
-#include <boost/mpl/inherit.hpp>
-#include <boost/mpl/at.hpp>
-
-namespace ns3 {
-namespace ndn {
-namespace ndnSIM {
-namespace detail {
-
-template <class T>
-struct wrap
-{
- T value_;
-};
-
-template< class Vector >
-struct multi_type_container
- : public boost::mpl::inherit_linearly< Vector, boost::mpl::inherit<wrap<boost::mpl::_2>, boost::mpl::_1 >
- >::type
-{
- template<int N>
- struct index
- {
- typedef typename boost::mpl::at_c<Vector, N>::type type;
- };
-
- template<class T>
- T &
- get ()
- {
- return static_cast< wrap<T> &> (*this).value_;
- }
-
- template<class T>
- const T &
- get () const
- {
- return static_cast< const wrap<T> &> (*this).value_;
- }
-
- template<int N>
- typename boost::mpl::at_c<Vector, N>::type &
- get ()
- {
- typedef typename boost::mpl::at_c<Vector, N>::type T;
- return static_cast< wrap<T> &> (*this).value_;
- }
-
- template<int N>
- const typename boost::mpl::at_c<Vector, N>::type &
- get () const
- {
- typedef typename boost::mpl::at_c<Vector, N>::type T;
- return static_cast< const wrap<T> &> (*this).value_;
- }
-};
-
-} // detail
-} // ndnSIM
-} // ndn
-} // ns3
-
-#endif // MULTI_TYPE_CONTAINER_H_
diff --git a/ndn-cpp/trie/payload-traits/pointer.h b/ndn-cpp/trie/payload-traits/pointer.h
deleted file mode 100644
index 8290fbe..0000000
--- a/ndn-cpp/trie/payload-traits/pointer.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef NDN_TRIE_PAYLOAD_TRAITS_POINTER_H
-#define NDN_TRIE_PAYLOAD_TRAITS_POINTER_H
-
-namespace ndn {
-namespace trie {
-
-template<typename Payload, typename BasePayload = Payload>
-struct pointer_payload_traits
-{
- typedef Payload payload_type; // general type of the payload
- typedef Payload* storage_type; // how the payload is actually stored
- typedef Payload* insert_type; // what parameter is inserted
-
- typedef Payload* return_type; // what is returned on access
- typedef const Payload* const_return_type; // what is returned on const access
-
- typedef BasePayload* base_type; // base type of the entry (when implementation details need to be hidden)
- typedef const BasePayload* const_base_type; // const base type of the entry (when implementation details need to be hidden)
-
- static Payload* empty_payload;
-};
-
-template<typename Payload, typename BasePayload>
-Payload*
-pointer_payload_traits<Payload, BasePayload>::empty_payload = NULL;
-
-} // trie
-} // ndn
-
-#endif // NDN_TRIE_PAYLOAD_TRAITS_POINTER_H
diff --git a/ndn-cpp/trie/payload-traits/ptr.h b/ndn-cpp/trie/payload-traits/ptr.h
deleted file mode 100644
index 3caf020..0000000
--- a/ndn-cpp/trie/payload-traits/ptr.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef NDN_TRIE_PAYLOAD_TRAITS_PTR_H
-#define NDN_TRIE_PAYLOAD_TRAITS_PTR_H
-
-namespace ndn {
-namespace trie {
-
-template<typename Payload, typename BasePayload = Payload>
-struct ptr_payload_traits
-{
- typedef Payload payload_type;
- typedef Ptr<Payload> storage_type;
- typedef Ptr<Payload> insert_type;
-
- typedef Ptr<Payload> return_type;
- typedef Ptr<const Payload> const_return_type;
-
- typedef Ptr<BasePayload> base_type;
- typedef Ptr<const BasePayload> const_base_type;
-
- static Ptr<Payload> empty_payload;
-};
-
-template<typename Payload, typename BasePayload>
-Ptr<Payload>
-ptr_payload_traits<Payload, BasePayload>::empty_payload; // = Ptr<Payload> ();
-
-} // trie
-} // ndn
-
-#endif // NDN_TRIE_PAYLOAD_TRAITS_PTR_H
diff --git a/ndn-cpp/trie/policies/counting-policy.h b/ndn-cpp/trie/policies/counting-policy.h
deleted file mode 100644
index d27f915..0000000
--- a/ndn-cpp/trie/policies/counting-policy.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef COUNTING_POLICY_H_
-#define COUNTING_POLICY_H_
-
-#include <boost/intrusive/options.hpp>
-#include <boost/intrusive/list.hpp>
-
-namespace ndn {
-namespace trie {
-
-/**
- * @brief Traits for policy that just keeps track of number of elements
- * It's doing a rather expensive job, but just in case it needs to be extended later
- */
-struct counting_policy_traits
-{
- /// @brief Name that can be used to identify the policy (e.g., for logging)
- static std::string GetName () { return "Counting"; }
-
- struct policy_hook_type : public boost::intrusive::list_member_hook<> {};
-
- template<class Container>
- struct container_hook
- {
- // could be class/struct implementation
- typedef boost::intrusive::member_hook< Container,
- policy_hook_type,
- &Container::policy_hook_ > type;
- };
-
- template<class Base,
- class Container,
- class Hook>
- struct policy
- {
- typedef typename boost::intrusive::list< Container, Hook > policy_container;
-
- // could be just typedef
- class type : public policy_container
- {
- public:
- typedef Container parent_trie;
-
- type (Base &base)
- : base_ (base)
- {
- }
-
- inline void
- update (typename parent_trie::iterator item)
- {
- // do nothing
- }
-
- inline bool
- insert (typename parent_trie::iterator item)
- {
- policy_container::push_back (*item);
- return true;
- }
-
- inline void
- lookup (typename parent_trie::iterator item)
- {
- // do nothing
- }
-
- inline void
- erase (typename parent_trie::iterator item)
- {
- policy_container::erase (policy_container::s_iterator_to (*item));
- }
-
- inline void
- clear ()
- {
- policy_container::clear ();
- }
-
- private:
- type () : base_(*((Base*)0)) { };
-
- private:
- Base &base_;
- };
- };
-};
-
-} // trie
-} // ndn
-
-#endif // COUNTING_POLICY_H_
diff --git a/ndn-cpp/trie/policies/empty-policy.h b/ndn-cpp/trie/policies/empty-policy.h
deleted file mode 100644
index 0cfe962..0000000
--- a/ndn-cpp/trie/policies/empty-policy.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef EMPTY_POLICY_H_
-#define EMPTY_POLICY_H_
-
-namespace ndn {
-namespace trie {
-
-/**
- * @brief Traits for empty (bogus) replacement policy
- */
-struct empty_policy_traits
-{
- /// @brief Name that can be used to identify the policy (e.g., for logging)
- static std::string GetName () { return ""; }
-
- typedef void* policy_hook_type;
-
- template<class Container> struct container_hook { typedef void* type; };
-
- template<class Base,
- class Container,
- class Hook>
- struct policy
- {
- struct type
- {
- inline type (Base &base) {}
-
- inline void update (typename Container::iterator) { }
- inline bool insert (typename Container::iterator) { return true; }
- inline void lookup (typename Container::iterator item) { }
- inline void erase (typename Container::iterator item) { }
- inline void clear () { }
- };
- };
-};
-
-} // trie
-} // ndn
-
-#endif // EMPTY_POLICY_H_
diff --git a/ndn-cpp/trie/policies/fifo-policy.h b/ndn-cpp/trie/policies/fifo-policy.h
deleted file mode 100644
index 7acad2b..0000000
--- a/ndn-cpp/trie/policies/fifo-policy.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef FIFO_POLICY_H_
-#define FIFO_POLICY_H_
-
-#include <boost/intrusive/options.hpp>
-#include <boost/intrusive/list.hpp>
-
-namespace ndn {
-namespace trie {
-
-/**
- * @brief Traits for First In First Out replacement policy
- */
-struct fifo_policy_traits
-{
- /// @brief Name that can be used to identify the policy (e.g., for logging)
- static std::string GetName () { return "Fifo"; }
-
- struct policy_hook_type : public boost::intrusive::list_member_hook<> {};
-
- template<class Container>
- struct container_hook
- {
- // could be class/struct implementation
- typedef boost::intrusive::member_hook< Container,
- policy_hook_type,
- &Container::policy_hook_ > type;
- };
-
- template<class Base,
- class Container,
- class Hook>
- struct policy
- {
- typedef typename boost::intrusive::list< Container, Hook > policy_container;
-
- // could be just typedef
- class type : public policy_container
- {
- public:
- typedef Container parent_trie;
-
- type (Base &base)
- : base_ (base)
- , max_size_ (100)
- {
- }
-
- inline void
- update (typename parent_trie::iterator item)
- {
- // do nothing
- }
-
- inline bool
- insert (typename parent_trie::iterator item)
- {
- if (max_size_ != 0 && policy_container::size () >= max_size_)
- {
- base_.erase (&(*policy_container::begin ()));
- }
-
- policy_container::push_back (*item);
- return true;
- }
-
- inline void
- lookup (typename parent_trie::iterator item)
- {
- // do nothing
- }
-
- inline void
- erase (typename parent_trie::iterator item)
- {
- policy_container::erase (policy_container::s_iterator_to (*item));
- }
-
- inline void
- clear ()
- {
- policy_container::clear ();
- }
-
- inline void
- set_max_size (size_t max_size)
- {
- max_size_ = max_size;
- }
-
- inline size_t
- get_max_size () const
- {
- return max_size_;
- }
-
- private:
- type () : base_(*((Base*)0)) { };
-
- private:
- Base &base_;
- size_t max_size_;
- };
- };
-};
-
-} // trie
-} // ndn
-
-#endif
diff --git a/ndn-cpp/trie/policies/lfu-policy.h b/ndn-cpp/trie/policies/lfu-policy.h
deleted file mode 100644
index 802f64b..0000000
--- a/ndn-cpp/trie/policies/lfu-policy.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef LFU_POLICY_H_
-#define LFU_POLICY_H_
-
-#include <boost/intrusive/options.hpp>
-#include <boost/intrusive/set.hpp>
-
-namespace ndn {
-namespace trie {
-
-/**
- * @brief Traits for LFU replacement policy
- */
-struct lfu_policy_traits
-{
- /// @brief Name that can be used to identify the policy (e.g., for logging)
- static std::string GetName () { return "Lfu"; }
-
- struct policy_hook_type : public boost::intrusive::set_member_hook<> { double frequency; };
-
- template<class Container>
- struct container_hook
- {
- typedef boost::intrusive::member_hook< Container,
- policy_hook_type,
- &Container::policy_hook_ > type;
- };
-
- template<class Base,
- class Container,
- class Hook>
- struct policy
- {
- static double& get_order (typename Container::iterator item)
- {
- return static_cast<policy_hook_type*>
- (policy_container::value_traits::to_node_ptr(*item))->frequency;
- }
-
- static const double& get_order (typename Container::const_iterator item)
- {
- return static_cast<const policy_hook_type*>
- (policy_container::value_traits::to_node_ptr(*item))->frequency;
- }
-
- template<class Key>
- struct MemberHookLess
- {
- bool operator () (const Key &a, const Key &b) const
- {
- return get_order (&a) < get_order (&b);
- }
- };
-
- typedef boost::intrusive::multiset< Container,
- boost::intrusive::compare< MemberHookLess< Container > >,
- Hook > policy_container;
-
- // could be just typedef
- class type : public policy_container
- {
- public:
- typedef policy policy_base; // to get access to get_order methods from outside
- typedef Container parent_trie;
-
- type (Base &base)
- : base_ (base)
- , max_size_ (100)
- {
- }
-
- inline void
- update (typename parent_trie::iterator item)
- {
- policy_container::erase (policy_container::s_iterator_to (*item));
- get_order (item) += 1;
- policy_container::insert (*item);
- }
-
- inline bool
- insert (typename parent_trie::iterator item)
- {
- get_order (item) = 0;
-
- if (max_size_ != 0 && policy_container::size () >= max_size_)
- {
- // this erases the "least frequently used item" from cache
- base_.erase (&(*policy_container::begin ()));
- }
-
- policy_container::insert (*item);
- return true;
- }
-
- inline void
- lookup (typename parent_trie::iterator item)
- {
- policy_container::erase (policy_container::s_iterator_to (*item));
- get_order (item) += 1;
- policy_container::insert (*item);
- }
-
- inline void
- erase (typename parent_trie::iterator item)
- {
- policy_container::erase (policy_container::s_iterator_to (*item));
- }
-
- inline void
- clear ()
- {
- policy_container::clear ();
- }
-
- inline void
- set_max_size (size_t max_size)
- {
- max_size_ = max_size;
- }
-
- inline size_t
- get_max_size () const
- {
- return max_size_;
- }
-
- private:
- type () : base_(*((Base*)0)) { };
-
- private:
- Base &base_;
- size_t max_size_;
- };
- };
-};
-
-} // trie
-} // ndn
-
-#endif // LFU_POLICY_H
diff --git a/ndn-cpp/trie/policies/lru-policy.h b/ndn-cpp/trie/policies/lru-policy.h
deleted file mode 100644
index ad3a382..0000000
--- a/ndn-cpp/trie/policies/lru-policy.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef LRU_POLICY_H_
-#define LRU_POLICY_H_
-
-#include <boost/intrusive/options.hpp>
-#include <boost/intrusive/list.hpp>
-
-namespace ndn {
-namespace trie {
-
-/**
- * @brief Traits for Least Recently Used replacement policy
- */
-struct lru_policy_traits
-{
- /// @brief Name that can be used to identify the policy (e.g., for logging)
- static std::string GetName () { return "Lru"; }
-
- struct policy_hook_type : public boost::intrusive::list_member_hook<> {};
-
- template<class Container>
- struct container_hook
- {
- typedef boost::intrusive::member_hook< Container,
- policy_hook_type,
- &Container::policy_hook_ > type;
- };
-
- template<class Base,
- class Container,
- class Hook>
- struct policy
- {
- typedef typename boost::intrusive::list< Container, Hook > policy_container;
-
- // could be just typedef
- class type : public policy_container
- {
- public:
- typedef Container parent_trie;
-
- type (Base &base)
- : base_ (base)
- , max_size_ (100)
- {
- }
-
- inline void
- update (typename parent_trie::iterator item)
- {
- // do relocation
- policy_container::splice (policy_container::end (),
- *this,
- policy_container::s_iterator_to (*item));
- }
-
- inline bool
- insert (typename parent_trie::iterator item)
- {
- if (max_size_ != 0 && policy_container::size () >= max_size_)
- {
- base_.erase (&(*policy_container::begin ()));
- }
-
- policy_container::push_back (*item);
- return true;
- }
-
- inline void
- lookup (typename parent_trie::iterator item)
- {
- // do relocation
- policy_container::splice (policy_container::end (),
- *this,
- policy_container::s_iterator_to (*item));
- }
-
- inline void
- erase (typename parent_trie::iterator item)
- {
- policy_container::erase (policy_container::s_iterator_to (*item));
- }
-
- inline void
- clear ()
- {
- policy_container::clear ();
- }
-
- inline void
- set_max_size (size_t max_size)
- {
- max_size_ = max_size;
- }
-
- inline size_t
- get_max_size () const
- {
- return max_size_;
- }
-
- private:
- type () : base_(*((Base*)0)) { };
-
- private:
- Base &base_;
- size_t max_size_;
- };
- };
-};
-
-} // trie
-} // ndn
-
-#endif
diff --git a/ndn-cpp/trie/policies/multi-policy.h b/ndn-cpp/trie/policies/multi-policy.h
deleted file mode 100644
index 739de7b..0000000
--- a/ndn-cpp/trie/policies/multi-policy.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef MULTI_POLICY_H_
-#define MULTI_POLICY_H_
-
-#include "detail/multi-type-container.h"
-#include "detail/multi-policy-container.h"
-#include "detail/functor-hook.h"
-
-#include <boost/mpl/size.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/range_c.hpp>
-#include <boost/mpl/transform.hpp>
-#include <boost/mpl/back_inserter.hpp>
-#include <boost/mpl/vector.hpp>
-#include <boost/mpl/for_each.hpp>
-
-#include <boost/intrusive/options.hpp>
-
-namespace ndn {
-namespace trie {
-
-template<typename Policies> // e.g., mpl::vector1< lru_policy_traits >
-struct multi_policy_traits
-{
- typedef Policies policy_traits;
-
- struct getHook { template<class Item> struct apply { typedef typename Item::policy_hook_type type; }; };
- typedef detail::multi_type_container< typename boost::mpl::transform1<policy_traits, getHook>::type > policy_hook_type;
-
- template<class Container>
- struct container_hook
- {
- typedef policy_hook_type type;
- };
-
- template<class Base,
- class Container,
- class Hook>
- struct policy
- {
- typedef boost::mpl::range_c<int, 0, boost::mpl::size<policy_traits>::type::value> policies_range;
-
- struct getPolicy
- {
- template<class Number>
- struct apply
- {
- typedef
- typename boost::mpl::at_c<policy_traits, Number::value>::type::
- template policy<Base,
- Container,
- boost::intrusive::function_hook< detail::FunctorHook <Hook,
- Container,
- Number::value> > >::type
- type;
- };
- };
-
- typedef
- typename boost::mpl::transform1<policies_range,
- getPolicy,
- boost::mpl::back_inserter< boost::mpl::vector0<> > >::type policies;
-
-
- typedef detail::multi_policy_container< Base, policies > policy_container;
-
- class type : public policy_container
- {
- public:
- typedef policy policy_base; // to get access to get_time methods from outside
- typedef Container parent_trie;
-
- type (Base &base)
- : policy_container (base)
- {
- }
-
- inline void
- update (typename parent_trie::iterator item)
- {
- policy_container::update (item);
- }
-
- inline bool
- insert (typename parent_trie::iterator item)
- {
- return policy_container::insert (item);
- }
-
- inline void
- lookup (typename parent_trie::iterator item)
- {
- policy_container::lookup (item);
- }
-
- inline void
- erase (typename parent_trie::iterator item)
- {
- policy_container::erase (item);
- }
-
- inline void
- clear ()
- {
- policy_container::clear ();
- }
-
- struct max_size_setter
- {
- max_size_setter (policy_container &container, size_t size) : m_container (container), m_size (size) { }
-
- template< typename U > void operator() (U index)
- {
- m_container.template get<U::value> ().set_max_size (m_size);
- }
-
- private:
- policy_container &m_container;
- size_t m_size;
- };
-
- inline void
- set_max_size (size_t max_size)
- {
- boost::mpl::for_each< boost::mpl::range_c<int, 0, boost::mpl::size<policy_traits>::type::value> >
- (max_size_setter (*this, max_size));
- }
-
- inline size_t
- get_max_size () const
- {
- // as max size should be the same everywhere, get the value from the first available policy
- return policy_container::template get<0> ().get_max_size ();
- }
-
- };
- };
-
-
- struct name_getter
- {
- name_getter (std::string &name) : m_name (name) { }
-
- template< typename U > void operator() (U index)
- {
- if (!m_name.empty ())
- m_name += "::";
- m_name += boost::mpl::at_c< policy_traits, U::value >::type::GetName ();
- }
-
- std::string &m_name;
- };
-
- /// @brief Name that can be used to identify the policy (e.g., for logging)
- static std::string GetName ()
- {
- // combine names of all internal policies
- std::string name;
- boost::mpl::for_each< boost::mpl::range_c<int, 0, boost::mpl::size<policy_traits>::type::value> > (name_getter (name));
-
- return name;
- }
-};
-
-} // trie
-} // ndn
-
-#endif // MULTI_POLICY_H_
diff --git a/ndn-cpp/trie/policies/persistent-policy.h b/ndn-cpp/trie/policies/persistent-policy.h
deleted file mode 100644
index d34f373..0000000
--- a/ndn-cpp/trie/policies/persistent-policy.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef PERSISTENT_POLICY_H_
-#define PERSISTENT_POLICY_H_
-
-#include <boost/intrusive/options.hpp>
-#include <boost/intrusive/list.hpp>
-
-namespace ndn {
-namespace trie {
-
-/**
- * @brief Traits for persistent replacement policy
- *
- * In this policy entries are added until there is a space (controlled by set_max_size call).
- * If maximum is reached, new entries will not be added and nothing will be removed from the container
- */
-struct persistent_policy_traits
-{
- /// @brief Name that can be used to identify the policy (e.g., for logging)
- static std::string GetName () { return "Persistent"; }
-
- struct policy_hook_type : public boost::intrusive::list_member_hook<> {};
-
- template<class Container>
- struct container_hook
- {
- typedef boost::intrusive::member_hook< Container,
- policy_hook_type,
- &Container::policy_hook_ > type;
- };
-
- template<class Base,
- class Container,
- class Hook>
- struct policy
- {
- typedef typename boost::intrusive::list< Container, Hook > policy_container;
-
- // could be just typedef
- class type : public policy_container
- {
- public:
- typedef Container parent_trie;
-
- type (Base &base)
- : base_ (base)
- , max_size_ (100) // when 0, policy is not enforced
- {
- }
-
- inline void
- update (typename parent_trie::iterator item)
- {
- // do nothing
- }
-
- inline bool
- insert (typename parent_trie::iterator item)
- {
- if (max_size_ != 0 && policy_container::size () >= max_size_)
- return false;
-
- policy_container::push_back (*item);
- return true;
- }
-
- inline void
- lookup (typename parent_trie::iterator item)
- {
- // do nothing
- }
-
- inline void
- erase (typename parent_trie::iterator item)
- {
- policy_container::erase (policy_container::s_iterator_to (*item));
- }
-
- inline void
- clear ()
- {
- policy_container::clear ();
- }
-
- inline void
- set_max_size (size_t max_size)
- {
- max_size_ = max_size;
- }
-
- inline size_t
- get_max_size () const
- {
- return max_size_;
- }
-
- private:
- // type () : base_(*((Base*)0)) { };
-
- private:
- Base &base_;
- size_t max_size_;
- };
- };
-};
-
-} // trie
-} // ndn
-
-#endif // PERSISTENT_POLICY_H_
diff --git a/ndn-cpp/trie/policies/random-policy.h b/ndn-cpp/trie/policies/random-policy.h
deleted file mode 100644
index d896e89..0000000
--- a/ndn-cpp/trie/policies/random-policy.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef RANDOM_POLICY_H_
-#define RANDOM_POLICY_H_
-
-#include "ns3/random-variable.h"
-
-#include <boost/intrusive/options.hpp>
-#include <boost/intrusive/set.hpp>
-
-namespace ndn {
-namespace trie {
-
-/**
- * @brief Traits for random replacement policy
- */
-struct random_policy_traits
-{
- /// @brief Name that can be used to identify the policy (e.g., for logging)
- static std::string GetName () { return "Random"; }
-
- struct policy_hook_type : public boost::intrusive::set_member_hook<> { uint32_t randomOrder; };
-
- template<class Container>
- struct container_hook
- {
- typedef boost::intrusive::member_hook< Container,
- policy_hook_type,
- &Container::policy_hook_ > type;
- };
-
- template<class Base,
- class Container,
- class Hook>
- struct policy
- {
- static uint32_t& get_order (typename Container::iterator item)
- {
- return static_cast<typename policy_container::value_traits::hook_type*>
- (policy_container::value_traits::to_node_ptr(*item))->randomOrder;
- }
-
- static const uint32_t& get_order (typename Container::const_iterator item)
- {
- return static_cast<const typename policy_container::value_traits::hook_type*>
- (policy_container::value_traits::to_node_ptr(*item))->randomOrder;
- }
-
- template<class Key>
- struct MemberHookLess
- {
- bool operator () (const Key &a, const Key &b) const
- {
- return get_order (&a) < get_order (&b);
- }
- };
-
- typedef boost::intrusive::multiset< Container,
- boost::intrusive::compare< MemberHookLess< Container > >,
- Hook > policy_container;
-
- // could be just typedef
- class type : public policy_container
- {
- public:
- typedef policy policy_base; // to get access to get_order methods from outside
- typedef Container parent_trie;
-
- type (Base &base)
- : base_ (base)
- , u_rand (0, std::numeric_limits<uint32_t>::max ())
- , max_size_ (100)
- {
- }
-
- inline void
- update (typename parent_trie::iterator item)
- {
- // do nothing. it's random policy
- }
-
- inline bool
- insert (typename parent_trie::iterator item)
- {
- get_order (item) = u_rand.GetValue ();
-
- if (max_size_ != 0 && policy_container::size () >= max_size_)
- {
- if (MemberHookLess<Container>() (*item, *policy_container::begin ()))
- {
- // std::cout << "Cannot add. Signaling fail\n";
- // just return false. Indicating that insert "failed"
- return false;
- }
- else
- {
- // removing some random element
- base_.erase (&(*policy_container::begin ()));
- }
- }
-
- policy_container::insert (*item);
- return true;
- }
-
- inline void
- lookup (typename parent_trie::iterator item)
- {
- // do nothing. it's random policy
- }
-
- inline void
- erase (typename parent_trie::iterator item)
- {
- policy_container::erase (policy_container::s_iterator_to (*item));
- }
-
- inline void
- clear ()
- {
- policy_container::clear ();
- }
-
- inline void
- set_max_size (size_t max_size)
- {
- max_size_ = max_size;
- }
-
- inline size_t
- get_max_size () const
- {
- return max_size_;
- }
-
- private:
- type () : base_(*((Base*)0)) { };
-
- private:
- Base &base_;
- ns3::UniformVariable u_rand;
- size_t max_size_;
- };
- };
-};
-
-} // trie
-} // ndn
-
-#endif // RANDOM_POLICY_H
diff --git a/ndn-cpp/trie/trie-with-policy.h b/ndn-cpp/trie/trie-with-policy.h
deleted file mode 100644
index 5a0d896..0000000
--- a/ndn-cpp/trie/trie-with-policy.h
+++ /dev/null
@@ -1,263 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef TRIE_TRIE_WITH_POLICY_H_
-#define TRIE_TRIE_WITH_POLICY_H_
-
-#include "trie.h"
-
-namespace ndn {
-namespace trie {
-
-template<typename FullKey,
- typename PayloadTraits,
- typename PolicyTraits
- >
-class trie_with_policy
-{
-public:
- typedef trie< FullKey,
- PayloadTraits,
- typename PolicyTraits::policy_hook_type > parent_trie;
-
- typedef typename parent_trie::iterator iterator;
- typedef typename parent_trie::const_iterator const_iterator;
- typedef typename parent_trie::payload_traits payload_traits;
-
- typedef typename PolicyTraits::template policy<
- trie_with_policy<FullKey, PayloadTraits, PolicyTraits>,
- parent_trie,
- typename PolicyTraits::template container_hook<parent_trie>::type >::type policy_container;
-
- inline
- trie_with_policy (size_t bucketSize = 10, size_t bucketIncrement = 10)
- : trie_ ("", bucketSize, bucketIncrement)
- , policy_ (*this)
- {
- }
-
- inline std::pair< iterator, bool >
- insert (const FullKey &key, typename PayloadTraits::insert_type payload)
- {
- std::pair<iterator, bool> item =
- trie_.insert (key, payload);
-
- if (item.second) // real insert
- {
- bool ok = policy_.insert (s_iterator_to (item.first));
- if (!ok)
- {
- item.first->erase (); // cannot insert
- return std::make_pair (end (), false);
- }
- }
- else
- {
- return std::make_pair (s_iterator_to (item.first), false);
- }
-
- return item;
- }
-
- inline void
- erase (const FullKey &key)
- {
- iterator foundItem, lastItem;
- bool reachLast;
- boost::tie (foundItem, reachLast, lastItem) = trie_.find (key);
-
- if (!reachLast || lastItem->payload () == PayloadTraits::empty_payload)
- return; // nothing to invalidate
-
- erase (lastItem);
- }
-
- inline void
- erase (iterator node)
- {
- if (node == end ()) return;
-
- policy_.erase (s_iterator_to (node));
- node->erase (); // will do cleanup here
- }
-
- inline void
- clear ()
- {
- policy_.clear ();
- trie_.clear ();
- }
-
- template<typename Modifier>
- bool
- modify (iterator position, Modifier mod)
- {
- if (position == end ()) return false;
- if (position->payload () == PayloadTraits::empty_payload) return false;
-
- mod (*position->payload ());
- policy_.update (position);
- return true;
- }
-
- /**
- * @brief Find a node that has the exact match with the key
- */
- inline iterator
- find_exact (const FullKey &key)
- {
- iterator foundItem, lastItem;
- bool reachLast;
- boost::tie (foundItem, reachLast, lastItem) = trie_.find (key);
-
- if (!reachLast || lastItem->payload () == PayloadTraits::empty_payload)
- return end ();
-
- return lastItem;
- }
-
- /**
- * @brief Find a node that has the longest common prefix with key (FIB/PIT lookup)
- */
- inline iterator
- longest_prefix_match (const FullKey &key)
- {
- iterator foundItem, lastItem;
- bool reachLast;
- boost::tie (foundItem, reachLast, lastItem) = trie_.find (key);
- if (foundItem != trie_.end ())
- {
- policy_.lookup (s_iterator_to (foundItem));
- }
- return foundItem;
- }
-
- /**
- * @brief Find a node that has the longest common prefix with key (FIB/PIT lookup)
- */
- template<class Predicate>
- inline iterator
- longest_prefix_match_if (const FullKey &key, Predicate pred)
- {
- iterator foundItem, lastItem;
- bool reachLast;
- boost::tie (foundItem, reachLast, lastItem) = trie_.find_if (key, pred);
- if (foundItem != trie_.end ())
- {
- policy_.lookup (s_iterator_to (foundItem));
- }
- return foundItem;
- }
-
- // /**
- // * @brief Const version of the longest common prefix match
- // * (semi-const, because there could be update of the policy anyways)
- // */
- // inline const_iterator
- // longest_prefix_match (const FullKey &key) const
- // {
- // return static_cast<trie_with_policy*> (this)->longest_prefix_match (key);
- // }
-
- /**
- * @brief Find a node that has prefix at least as the key (cache lookup)
- */
- inline iterator
- deepest_prefix_match (const FullKey &key)
- {
- iterator foundItem, lastItem;
- bool reachLast;
- boost::tie (foundItem, reachLast, lastItem) = trie_.find (key);
-
- // guard in case we don't have anything in the trie
- if (lastItem == trie_.end ())
- return trie_.end ();
-
- if (reachLast)
- {
- if (foundItem == trie_.end ())
- {
- foundItem = lastItem->find (); // should be something
- }
- policy_.lookup (s_iterator_to (foundItem));
- return foundItem;
- }
- else
- { // couldn't find a node that has prefix at least as key
- return trie_.end ();
- }
- }
-
- /**
- * @brief Find a node that has prefix at least as the key
- */
- template<class Predicate>
- inline iterator
- deepest_prefix_match (const FullKey &key, Predicate pred)
- {
- iterator foundItem, lastItem;
- bool reachLast;
- boost::tie (foundItem, reachLast, lastItem) = trie_.find (key);
-
- // guard in case we don't have anything in the trie
- if (lastItem == trie_.end ())
- return trie_.end ();
-
- if (reachLast)
- {
- foundItem = lastItem->find_if (pred); // may or may not find something
- if (foundItem == trie_.end ())
- {
- return trie_.end ();
- }
- policy_.lookup (s_iterator_to (foundItem));
- return foundItem;
- }
- else
- { // couldn't find a node that has prefix at least as key
- return trie_.end ();
- }
- }
-
- iterator end () const
- {
- return 0;
- }
-
- const parent_trie &
- getTrie () const { return trie_; }
-
- parent_trie &
- getTrie () { return trie_; }
-
- const policy_container &
- getPolicy () const { return policy_; }
-
- policy_container &
- getPolicy () { return policy_; }
-
- static inline iterator
- s_iterator_to (typename parent_trie::iterator item)
- {
- if (item == 0)
- return 0;
- else
- return &(*item);
- }
-
-private:
- parent_trie trie_;
- mutable policy_container policy_;
-};
-
-} // trie
-} // ndn
-
-#endif // TRIE_TRIE_WITH_POLICY_H_
diff --git a/ndn-cpp/trie/trie.h b/ndn-cpp/trie/trie.h
deleted file mode 100644
index edc8a1b..0000000
--- a/ndn-cpp/trie/trie.h
+++ /dev/null
@@ -1,636 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013, Regents of the University of California
- * Alexander Afanasyev
- *
- * BSD license, See the LICENSE file for more information
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef NDN_TRIE_TRIE_H_
-#define NDN_TRIE_TRIE_H_
-
-#include <boost/intrusive/unordered_set.hpp>
-#include <boost/intrusive/list.hpp>
-#include <boost/intrusive/set.hpp>
-#include <boost/functional/hash.hpp>
-#include <boost/interprocess/smart_ptr/unique_ptr.hpp>
-#include <boost/tuple/tuple.hpp>
-#include <boost/foreach.hpp>
-#include <boost/mpl/if.hpp>
-
-#include "payload-traits/pointer.h"
-#include "payload-traits/ptr.h"
-
-namespace ndn {
-namespace trie {
-
-////////////////////////////////////////////////////
-// forward declarations
-//
-template<typename FullKey,
- typename PayloadTraits,
- typename PolicyHook >
-class trie;
-
-template<typename FullKey, typename PayloadTraits, typename PolicyHook>
-inline std::ostream&
-operator << (std::ostream &os,
- const trie<FullKey, PayloadTraits, PolicyHook> &trie_node);
-
-template<typename FullKey, typename PayloadTraits, typename PolicyHook>
-bool
-operator== (const trie<FullKey, PayloadTraits, PolicyHook> &a,
- const trie<FullKey, PayloadTraits, PolicyHook> &b);
-
-template<typename FullKey, typename PayloadTraits, typename PolicyHook >
-std::size_t
-hash_value (const trie<FullKey, PayloadTraits, PolicyHook> &trie_node);
-
-///////////////////////////////////////////////////
-// actual definition
-//
-template<class T, class NonConstT>
-class trie_iterator;
-
-template<class T>
-class trie_point_iterator;
-
-template<typename FullKey,
- typename PayloadTraits,
- typename PolicyHook >
-class trie
-{
-public:
- typedef typename FullKey::partial_type Key;
-
- typedef trie* iterator;
- typedef const trie* const_iterator;
-
- typedef trie_iterator<trie, trie> recursive_iterator;
- typedef trie_iterator<const trie, trie> const_recursive_iterator;
-
- typedef trie_point_iterator<trie> point_iterator;
- typedef trie_point_iterator<const trie> const_point_iterator;
-
- typedef PayloadTraits payload_traits;
-
- inline
- trie (const Key &key, size_t bucketSize = 10, size_t bucketIncrement = 10)
- : key_ (key)
- , initialBucketSize_ (bucketSize)
- , bucketIncrement_ (bucketIncrement)
- , bucketSize_ (initialBucketSize_)
- , buckets_ (new bucket_type [bucketSize_]) //cannot use normal pointer, because lifetime of buckets should be larger than lifetime of the container
- , children_ (bucket_traits (buckets_.get (), bucketSize_))
- , payload_ (PayloadTraits::empty_payload)
- , parent_ (0)
- {
- }
-
- inline
- ~trie ()
- {
- payload_ = PayloadTraits::empty_payload; // necessary for smart pointers...
- children_.clear_and_dispose (trie_delete_disposer ());
- }
-
- void
- clear ()
- {
- children_.clear_and_dispose (trie_delete_disposer ());
- }
-
- template<class Predicate>
- void
- clear_if (Predicate cond)
- {
- recursive_iterator trieNode (this);
- recursive_iterator end (0);
-
- while (trieNode != end)
- {
- if (cond (*trieNode))
- {
- trieNode = recursive_iterator (trieNode->erase ());
- }
- trieNode ++;
- }
- }
-
- // actual entry
- friend bool
- operator== <> (const trie<FullKey, PayloadTraits, PolicyHook> &a,
- const trie<FullKey, PayloadTraits, PolicyHook> &b);
-
- friend std::size_t
- hash_value <> (const trie<FullKey, PayloadTraits, PolicyHook> &trie_node);
-
- inline std::pair<iterator, bool>
- insert (const FullKey &key,
- typename PayloadTraits::insert_type payload)
- {
- trie *trieNode = this;
-
- BOOST_FOREACH (const Key &subkey, key)
- {
- typename unordered_set::iterator item = trieNode->children_.find (subkey);
- if (item == trieNode->children_.end ())
- {
- trie *newNode = new trie (subkey, initialBucketSize_, bucketIncrement_);
- // std::cout << "new " << newNode << "\n";
- newNode->parent_ = trieNode;
-
- if (trieNode->children_.size () >= trieNode->bucketSize_)
- {
- trieNode->bucketSize_ += trieNode->bucketIncrement_;
- trieNode->bucketIncrement_ *= 2; // increase bucketIncrement exponentially
-
- buckets_array newBuckets (new bucket_type [trieNode->bucketSize_]);
- trieNode->children_.rehash (bucket_traits (newBuckets.get (), trieNode->bucketSize_));
- trieNode->buckets_.swap (newBuckets);
- }
-
- std::pair< typename unordered_set::iterator, bool > ret =
- trieNode->children_.insert (*newNode);
-
- trieNode = &(*ret.first);
- }
- else
- trieNode = &(*item);
- }
-
- if (trieNode->payload_ == PayloadTraits::empty_payload)
- {
- trieNode->payload_ = payload;
- return std::make_pair (trieNode, true);
- }
- else
- return std::make_pair (trieNode, false);
- }
-
- /**
- * @brief Removes payload (if it exists) and if there are no children, prunes parents trie
- */
- inline iterator
- erase ()
- {
- payload_ = PayloadTraits::empty_payload;
- return prune ();
- }
-
- /**
- * @brief Do exactly as erase, but without erasing the payload
- */
- inline iterator
- prune ()
- {
- if (payload_ == PayloadTraits::empty_payload &&
- children_.size () == 0)
- {
- if (parent_ == 0) return this;
-
- trie *parent = parent_;
- parent->children_.erase_and_dispose (*this, trie_delete_disposer ()); // delete this; basically, committing a suicide
-
- return parent->prune ();
- }
- return this;
- }
-
- /**
- * @brief Perform prune of the node, but without attempting to parent of the node
- */
- inline void
- prune_node ()
- {
- if (payload_ == PayloadTraits::empty_payload &&
- children_.size () == 0)
- {
- if (parent_ == 0) return;
-
- trie *parent = parent_;
- parent->children_.erase_and_dispose (*this, trie_delete_disposer ()); // delete this; basically, committing a suicide
- }
- }
-
- // inline boost::tuple<const iterator, bool, const iterator>
- // find (const FullKey &key) const
- // {
- // return const_cast<trie*> (this)->find (key);
- // }
-
- /**
- * @brief Perform the longest prefix match
- * @param key the key for which to perform the longest prefix match
- *
- * @return ->second is true if prefix in ->first is longer than key
- */
- inline boost::tuple<iterator, bool, iterator>
- find (const FullKey &key)
- {
- trie *trieNode = this;
- iterator foundNode = (payload_ != PayloadTraits::empty_payload) ? this : 0;
- bool reachLast = true;
-
- BOOST_FOREACH (const Key &subkey, key)
- {
- typename unordered_set::iterator item = trieNode->children_.find (subkey);
- if (item == trieNode->children_.end ())
- {
- reachLast = false;
- break;
- }
- else
- {
- trieNode = &(*item);
-
- if (trieNode->payload_ != PayloadTraits::empty_payload)
- foundNode = trieNode;
- }
- }
-
- return boost::make_tuple (foundNode, reachLast, trieNode);
- }
-
- /**
- * @brief Perform the longest prefix match satisfying preficate
- * @param key the key for which to perform the longest prefix match
- *
- * @return ->second is true if prefix in ->first is longer than key
- */
- template<class Predicate>
- inline boost::tuple<iterator, bool, iterator>
- find_if (const FullKey &key, Predicate pred)
- {
- trie *trieNode = this;
- iterator foundNode = (payload_ != PayloadTraits::empty_payload) ? this : 0;
- bool reachLast = true;
-
- BOOST_FOREACH (const Key &subkey, key)
- {
- typename unordered_set::iterator item = trieNode->children_.find (subkey);
- if (item == trieNode->children_.end ())
- {
- reachLast = false;
- break;
- }
- else
- {
- trieNode = &(*item);
-
- if (trieNode->payload_ != PayloadTraits::empty_payload &&
- pred (trieNode->payload_))
- {
- foundNode = trieNode;
- }
- }
- }
-
- return boost::make_tuple (foundNode, reachLast, trieNode);
- }
-
- /**
- * @brief Find next payload of the sub-trie
- * @returns end() or a valid iterator pointing to the trie leaf (order is not defined, enumeration )
- */
- inline iterator
- find ()
- {
- if (payload_ != PayloadTraits::empty_payload)
- return this;
-
- typedef trie<FullKey, PayloadTraits, PolicyHook> trie;
- for (typename trie::unordered_set::iterator subnode = children_.begin ();
- subnode != children_.end ();
- subnode++ )
- // BOOST_FOREACH (trie &subnode, children_)
- {
- iterator value = subnode->find ();
- if (value != 0)
- return value;
- }
-
- return 0;
- }
-
- /**
- * @brief Find next payload of the sub-trie satisfying the predicate
- * @param pred predicate
- * @returns end() or a valid iterator pointing to the trie leaf (order is not defined, enumeration )
- */
- template<class Predicate>
- inline const iterator
- find_if (Predicate pred)
- {
- if (payload_ != PayloadTraits::empty_payload && pred (payload_))
- return this;
-
- typedef trie<FullKey, PayloadTraits, PolicyHook> trie;
- for (typename trie::unordered_set::iterator subnode = children_.begin ();
- subnode != children_.end ();
- subnode++ )
- // BOOST_FOREACH (const trie &subnode, children_)
- {
- iterator value = subnode->find_if (pred);
- if (value != 0)
- return value;
- }
-
- return 0;
- }
-
- iterator end ()
- {
- return 0;
- }
-
- const_iterator end () const
- {
- return 0;
- }
-
- typename PayloadTraits::const_return_type
- payload () const
- {
- return payload_;
- }
-
- typename PayloadTraits::return_type
- payload ()
- {
- return payload_;
- }
-
- void
- set_payload (typename PayloadTraits::insert_type payload)
- {
- payload_ = payload;
- }
-
- Key key () const
- {
- return key_;
- }
-
- inline void
- PrintStat (std::ostream &os) const;
-
-private:
- //The disposer object function
- struct trie_delete_disposer
- {
- void operator() (trie *delete_this)
- {
- delete delete_this;
- }
- };
-
- template<class D>
- struct array_disposer
- {
- void operator() (D *array)
- {
- delete [] array;
- }
- };
-
- friend
- std::ostream&
- operator<< < > (std::ostream &os, const trie &trie_node);
-
-public:
- PolicyHook policy_hook_;
-
-private:
- boost::intrusive::unordered_set_member_hook<> unordered_set_member_hook_;
-
- // necessary typedefs
- typedef trie self_type;
- typedef boost::intrusive::member_hook< trie,
- boost::intrusive::unordered_set_member_hook< >,
- &trie::unordered_set_member_hook_ > member_hook;
-
- typedef boost::intrusive::unordered_set< trie, member_hook > unordered_set;
- typedef typename unordered_set::bucket_type bucket_type;
- typedef typename unordered_set::bucket_traits bucket_traits;
-
- template<class T, class NonConstT>
- friend class trie_iterator;
-
- template<class T>
- friend class trie_point_iterator;
-
- ////////////////////////////////////////////////
- // Actual data
- ////////////////////////////////////////////////
-
- Key key_; ///< name component
-
- size_t initialBucketSize_;
- size_t bucketIncrement_;
-
- size_t bucketSize_;
- typedef boost::interprocess::unique_ptr< bucket_type, array_disposer<bucket_type> > buckets_array;
- buckets_array buckets_;
- unordered_set children_;
-
- typename PayloadTraits::storage_type payload_;
- trie *parent_; // to make cleaning effective
-};
-
-
-
-
-template<typename FullKey, typename PayloadTraits, typename PolicyHook>
-inline std::ostream&
-operator << (std::ostream &os, const trie<FullKey, PayloadTraits, PolicyHook> &trie_node)
-{
- os << "# " << trie_node.key_ << ((trie_node.payload_ != PayloadTraits::empty_payload)?"*":"") << std::endl;
- typedef trie<FullKey, PayloadTraits, PolicyHook> trie;
-
- for (typename trie::unordered_set::const_iterator subnode = trie_node.children_.begin ();
- subnode != trie_node.children_.end ();
- subnode++ )
- // BOOST_FOREACH (const trie &subnode, trie_node.children_)
- {
- os << "\"" << &trie_node << "\"" << " [label=\"" << trie_node.key_ << ((trie_node.payload_ != PayloadTraits::empty_payload)?"*":"") << "\"]\n";
- os << "\"" << &(*subnode) << "\"" << " [label=\"" << subnode->key_ << ((subnode->payload_ != PayloadTraits::empty_payload)?"*":"") << "\"]""\n";
-
- os << "\"" << &trie_node << "\"" << " -> " << "\"" << &(*subnode) << "\"" << "\n";
- os << *subnode;
- }
-
- return os;
-}
-
-template<typename FullKey, typename PayloadTraits, typename PolicyHook>
-inline void
-trie<FullKey, PayloadTraits, PolicyHook>
-::PrintStat (std::ostream &os) const
-{
- os << "# " << key_ << ((payload_ != PayloadTraits::empty_payload)?"*":"") << ": " << children_.size() << " children" << std::endl;
- for (size_t bucket = 0, maxbucket = children_.bucket_count ();
- bucket < maxbucket;
- bucket++)
- {
- os << " " << children_.bucket_size (bucket);
- }
- os << "\n";
-
- typedef trie<FullKey, PayloadTraits, PolicyHook> trie;
- for (typename trie::unordered_set::const_iterator subnode = children_.begin ();
- subnode != children_.end ();
- subnode++ )
- // BOOST_FOREACH (const trie &subnode, children_)
- {
- subnode->PrintStat (os);
- }
-}
-
-
-template<typename FullKey, typename PayloadTraits, typename PolicyHook>
-inline bool
-operator == (const trie<FullKey, PayloadTraits, PolicyHook> &a,
- const trie<FullKey, PayloadTraits, PolicyHook> &b)
-{
- return a.key_ == b.key_;
-}
-
-template<typename FullKey, typename PayloadTraits, typename PolicyHook>
-inline std::size_t
-hash_value (const trie<FullKey, PayloadTraits, PolicyHook> &trie_node)
-{
- return boost::hash_value (trie_node.key_);
-}
-
-
-
-template<class Trie, class NonConstTrie> // hack for boost < 1.47
-class trie_iterator
-{
-public:
- trie_iterator () : trie_ (0) {}
- trie_iterator (typename Trie::iterator item) : trie_ (item) {}
- trie_iterator (Trie &item) : trie_ (&item) {}
-
- Trie & operator* () { return *trie_; }
- const Trie & operator* () const { return *trie_; }
- Trie * operator-> () { return trie_; }
- const Trie * operator-> () const { return trie_; }
- bool operator== (trie_iterator<const Trie, NonConstTrie> &other) const { return (trie_ == other.trie_); }
- bool operator== (trie_iterator<Trie, NonConstTrie> &other) { return (trie_ == other.trie_); }
- bool operator!= (trie_iterator<const Trie, NonConstTrie> &other) const { return !(*this == other); }
- bool operator!= (trie_iterator<Trie, NonConstTrie> &other) { return !(*this == other); }
-
- trie_iterator<Trie,NonConstTrie> &
- operator++ (int)
- {
- if (trie_->children_.size () > 0)
- trie_ = &(*trie_->children_.begin ());
- else
- trie_ = goUp ();
- return *this;
- }
-
- trie_iterator<Trie,NonConstTrie> &
- operator++ ()
- {
- (*this)++;
- return *this;
- }
-
-private:
- typedef typename boost::mpl::if_< boost::is_same<Trie, NonConstTrie>,
- typename Trie::unordered_set::iterator,
- typename Trie::unordered_set::const_iterator>::type set_iterator;
-
- Trie* goUp ()
- {
- if (trie_->parent_ != 0)
- {
- // typename Trie::unordered_set::iterator item =
- set_iterator item = const_cast<NonConstTrie*>(trie_)->parent_->children_.iterator_to (const_cast<NonConstTrie&> (*trie_));
- item++;
- if (item != trie_->parent_->children_.end ())
- {
- return &(*item);
- }
- else
- {
- trie_ = trie_->parent_;
- return goUp ();
- }
- }
- else
- return 0;
- }
-private:
- Trie *trie_;
-};
-
-
-template<class Trie>
-class trie_point_iterator
-{
-private:
- typedef typename boost::mpl::if_< boost::is_same<Trie, const Trie>,
- typename Trie::unordered_set::const_iterator,
- typename Trie::unordered_set::iterator>::type set_iterator;
-
-public:
- trie_point_iterator () : trie_ (0) {}
- trie_point_iterator (typename Trie::iterator item) : trie_ (item) {}
- trie_point_iterator (Trie &item)
- {
- if (item.children_.size () != 0)
- trie_ = &*item.children_.begin ();
- else
- trie_ = 0;
- }
-
- Trie & operator* () { return *trie_; }
- const Trie & operator* () const { return *trie_; }
- Trie * operator-> () { return trie_; }
- const Trie * operator-> () const { return trie_; }
- bool operator== (trie_point_iterator<const Trie> &other) const { return (trie_ == other.trie_); }
- bool operator== (trie_point_iterator<Trie> &other) { return (trie_ == other.trie_); }
- bool operator!= (trie_point_iterator<const Trie> &other) const { return !(*this == other); }
- bool operator!= (trie_point_iterator<Trie> &other) { return !(*this == other); }
-
- trie_point_iterator<Trie> &
- operator++ (int)
- {
- if (trie_->parent_ != 0)
- {
- set_iterator item = trie_->parent_->children_.iterator_to (*trie_);
- item ++;
- if (item == trie_->parent_->children_.end ())
- trie_ = 0;
- else
- trie_ = &*item;
- }
- else
- {
- trie_ = 0;
- }
- return *this;
- }
-
- trie_point_iterator<Trie> &
- operator++ ()
- {
- (*this)++;
- return *this;
- }
-
-private:
- Trie *trie_;
-};
-
-
-} // trie
-} // ndn
-
-#endif // NDN_TRIE_TRIE_H_