model: Renaming ndn::NameComponents to simply ndn::Name

This change doesn't break anything in the existing code, but eventually
all uses of ndn::NameComponents will be removed and ndn::NameComponents
will be deprecated
diff --git a/model/ndn-name-components.h b/model/ndn-name-components.h
index c2076d1..04915df 100644
--- a/model/ndn-name-components.h
+++ b/model/ndn-name-components.h
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2011 University of California, Los Angeles
+ * Copyright (c) 2013 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
@@ -16,295 +16,13 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- *         Ilya Moiseenko <iliamo@cs.ucla.edu>
  */
 
-#ifndef _NDN_NAME_COMPONENTS_H_
-#define _NDN_NAME_COMPONENTS_H_
+#ifndef NDN_NAME_COMPONENTS_H
+#define NDN_NAME_COMPONENTS_H
 
-#include "ns3/simple-ref-count.h"
-#include "ns3/attribute.h"
-#include "ns3/attribute-helper.h"
+// #warning ndn-name-components.h is now deprecated header. Please include ndn-name.h instead
 
-#include <string>
-#include <algorithm>
-#include <list>
-#include "ns3/object.h"
-#include "ns3/buffer.h"
+#include "ndn-name.h"
 
-#include <boost/ref.hpp>
-
-namespace ns3 {
-namespace ndn {
-
-/**
- * \ingroup ndn
- * \brief Hierarchical NDN name
- * A Name element represents a hierarchical name for Ndn content. 
- * It simply contains a sequence of Component elements. 
- * Each Component element contains a sequence of zero or more bytes. 
- * There are no restrictions on what byte sequences may be used.
- * The Name element in an Interest is often referred to with the term name prefix or simply prefix.
- */ 
-class NameComponents : public SimpleRefCount<NameComponents>
-{
-public:
-  typedef std::list<std::string>::iterator       iterator;            
-  typedef std::list<std::string>::const_iterator const_iterator;
-
-  /**
-   * \brief Constructor 
-   * Creates a prefix with zero components (can be looked as root "/")
-   */
-  NameComponents ();
-  
-  /**
-   * \brief Constructor
-   * Creates a prefix from a list of strings where every string represents a prefix component
-   * @param[in] components A list of strings
-   */
-  NameComponents (const std::list<boost::reference_wrapper<const std::string> > &components);
-
-  /**
-   * @brief Constructor
-   * Creates a prefix from the string (string is parsed using operator>>)
-   * @param[in] prefix A string representation of a prefix
-   */
-  NameComponents (const std::string &prefix);
-
-  /**
-   * @brief Constructor
-   * Creates a prefix from the string (string is parsed using operator>>)
-   * @param[in] prefix A string representation of a prefix
-   */
-  NameComponents (const char *prefix);
-  
-  /**
-   * \brief Generic Add method
-   * Appends object of type T to the list of components 
-   * @param[in] value The object to be appended
-   */
-  template<class T>
-  inline void
-  Add (const T &value);
-  
-  /**
-   * \brief Generic constructor operator
-   * The object of type T will be appended to the list of components
-   */
-  template<class T>
-  inline NameComponents&
-  operator () (const T &value);
-
-  /**
-   * \brief Get a name
-   * Returns a list of components (strings)
-   */
-  const std::list<std::string> &
-  GetComponents () const;
-
-  /**
-   * @brief Helper call to get the last component of the name
-   */
-  std::string
-  GetLastComponent () const;
-
-  /**
-   * \brief Get subcomponents of the name, starting with first component
-   * @param[in] num Number of components to return. Valid value is in range [1, GetComponents ().size ()]
-   */
-  std::list<boost::reference_wrapper<const std::string> >
-  GetSubComponents (size_t num) const;
-
-  /**
-   * @brief Get prefix of the name, containing less  minusComponents right components
-   */
-  NameComponents
-  cut (size_t minusComponents) const;
-  
-  /**
-   * \brief Print name
-   * @param[in] os Stream to print 
-   */
-  void Print (std::ostream &os) const;
-
-  /**
-   * @brief Get serialized size for ndnSIM packet encoding
-   */
-  size_t
-  GetSerializedSize () const;
-  
-  /**
-   * @brief Serialize Name in ndnSIM packet encoding
-   * @param[in] start buffer to contain serialized name 
-   */
-  uint32_t
-  Serialize (Buffer::Iterator start) const;
-  
-  /**
-   * \brief Deserialize Name in ndnSIM packet encoding
-   * @param[in] start buffer that contains serialized name
-   */ 
-  uint32_t
-  Deserialize (Buffer::Iterator start);
-  
-  /**
-   * \brief Returns the size of NameComponents
-   */
-  inline size_t
-  size () const;
-
-  /**
-   * @brief Get read-write begin() iterator
-   */
-  inline iterator
-  begin ();
-
-  /**
-   * @brief Get read-only begin() iterator
-   */
-  inline const_iterator
-  begin () const;
-
-  /**
-   * @brief Get read-write end() iterator
-   */
-  inline iterator
-  end ();
-
-  /**
-   * @brief Get read-only end() iterator
-   */
-  inline const_iterator
-  end () const;
-
-  /**
-   * \brief Equality operator for NameComponents
-   */
-  inline bool
-  operator== (const NameComponents &prefix) const;
-
-  /**
-   * \brief Less than operator for NameComponents
-   */
-  inline bool
-  operator< (const NameComponents &prefix) const;
-
-  typedef std::string partial_type;
-  
-private:
-  std::list<std::string> m_prefix;                              ///< \brief a list of strings (components)
-};
-
-/**
- * \brief Print out name components separated by slashes, e.g., /first/second/third
- */
-std::ostream &
-operator << (std::ostream &os, const NameComponents &components);
-
-/**
- * \brief Read components from input and add them to components. Will read input stream till eof
- * Substrings separated by slashes will become separate components
- */
-std::istream &
-operator >> (std::istream &is, NameComponents &components);
-
-/**
- * \brief Returns the size of NameComponents object
- */  
-size_t
-NameComponents::size () const
-{
-  return m_prefix.size ();
-}
-
-NameComponents::iterator
-NameComponents::begin ()
-{
-  return m_prefix.begin ();
-}
-
-/**
- * @brief Get read-only begin() iterator
- */
-NameComponents::const_iterator
-NameComponents::begin () const
-{
-  return m_prefix.begin ();
-}  
-
-/**
- * @brief Get read-write end() iterator
- */
-NameComponents::iterator
-NameComponents::end ()
-{
-  return m_prefix.end ();
-}
-
-/**
- * @brief Get read-only end() iterator
- */
-NameComponents::const_iterator
-NameComponents::end () const
-{
-  return m_prefix.end ();
-}
-
-
-/**
- * \brief Generic constructor operator
- * The object of type T will be appended to the list of components
- */
-template<class T>
-NameComponents&
-NameComponents::operator () (const T &value)
-{
-  Add (value);
-  return *this;
-}
-
-/**
- * \brief Generic Add method
- * Appends object of type T to the list of components 
- * @param[in] value The object to be appended
- */
-template<class T>
-void
-NameComponents::Add (const T &value)
-{
-  std::ostringstream os;
-  os << value;
-  m_prefix.push_back (os.str ());
-}
-
-/**
- * \brief Equality operator for NameComponents
- */
-bool
-NameComponents::operator== (const NameComponents &prefix) const
-{
-  if (m_prefix.size () != prefix.m_prefix.size ())
-    return false;
-  
-  return std::equal (m_prefix.begin (), m_prefix.end (), prefix.m_prefix.begin ());
-}
-
-/**
- * \brief Less than operator for NameComponents
- */
-bool
-NameComponents::operator< (const NameComponents &prefix) const
-{
-  return std::lexicographical_compare (m_prefix.begin (), m_prefix.end (),
-                                       prefix.m_prefix.begin (), prefix.m_prefix.end ());
-}
-
-    
-ATTRIBUTE_HELPER_HEADER (NameComponents);
-
-} // namespace ndn
-} // namespace ns3
-
-#endif // _NDN_NAME_COMPONENTS_H_
-
+#endif // NDN_NAME_COMPONENTS_H
diff --git a/model/ndn-name-components.cc b/model/ndn-name.cc
similarity index 81%
rename from model/ndn-name-components.cc
rename to model/ndn-name.cc
index 4a7965d..8e7a872 100644
--- a/model/ndn-name-components.cc
+++ b/model/ndn-name.cc
@@ -27,18 +27,19 @@
 
 using namespace std;
 
-NS_LOG_COMPONENT_DEFINE ("ndn.NameComponents");
+NS_LOG_COMPONENT_DEFINE ("ndn.Name");
 
 namespace ns3 {
 namespace ndn {
 
+ATTRIBUTE_HELPER_CPP (Name);
 ATTRIBUTE_HELPER_CPP (NameComponents);
 
-NameComponents::NameComponents (/* root */)
+Name::Name (/* root */)
 {
 }
 
-NameComponents::NameComponents (const std::list<boost::reference_wrapper<const std::string> > &components)
+Name::Name (const std::list<boost::reference_wrapper<const std::string> > &components)
 {
   BOOST_FOREACH (const boost::reference_wrapper<const std::string> &component, components)
     {
@@ -46,28 +47,28 @@
     }
 }
 
-NameComponents::NameComponents (const std::string &prefix)
+Name::Name (const std::string &prefix)
 {
   istringstream is (prefix);
   is >> *this;
 }
 
-NameComponents::NameComponents (const char *prefix)
+Name::Name (const char *prefix)
 {
   NS_ASSERT (prefix != 0);
-  
+
   istringstream is (prefix);
   is >> *this;
 }
 
 const std::list<std::string> &
-NameComponents::GetComponents () const
+Name::GetComponents () const
 {
   return m_prefix;
 }
 
 std::string
-NameComponents::GetLastComponent () const
+Name::GetLastComponent () const
 {
   if (m_prefix.size () == 0)
     {
@@ -78,25 +79,25 @@
 }
 
 std::list<boost::reference_wrapper<const std::string> >
-NameComponents::GetSubComponents (size_t num) const
+Name::GetSubComponents (size_t num) const
 {
   NS_ASSERT_MSG (0<=num && num<=m_prefix.size (), "Invalid number of subcomponents requested");
-  
+
   std::list<boost::reference_wrapper<const std::string> > subComponents;
   std::list<std::string>::const_iterator component = m_prefix.begin();
   for (size_t i=0; i<num; i++, component++)
     {
       subComponents.push_back (boost::ref (*component));
     }
-    
+
   return subComponents;
 }
 
-NameComponents
-NameComponents::cut (size_t minusComponents) const
+Name
+Name::cut (size_t minusComponents) const
 {
-  NameComponents retval;
-  std::list<std::string>::const_iterator component = m_prefix.begin (); 
+  Name retval;
+  std::list<std::string>::const_iterator component = m_prefix.begin ();
   for (uint32_t i = 0; i < m_prefix.size () - minusComponents; i++, component++)
     {
       retval.Add (*component);
@@ -106,10 +107,10 @@
 }
 
 size_t
-NameComponents::GetSerializedSize () const
+Name::GetSerializedSize () const
 {
   size_t nameSerializedSize = 2;
-  
+
   for (std::list<std::string>::const_iterator i = this->begin ();
        i != this->end ();
        i++)
@@ -122,7 +123,7 @@
 }
 
 uint32_t
-NameComponents::Serialize (Buffer::Iterator start) const
+Name::Serialize (Buffer::Iterator start) const
 {
   Buffer::Iterator i = start;
 
@@ -138,12 +139,12 @@
 
   return i.GetDistanceFrom (start);
 }
-  
+
 uint32_t
-NameComponents::Deserialize (Buffer::Iterator start)
+Name::Deserialize (Buffer::Iterator start)
 {
   Buffer::Iterator i = start;
-    
+
   uint16_t nameLength = i.ReadU16 ();
   while (nameLength > 0)
     {
@@ -160,7 +161,7 @@
 }
 
 void
-NameComponents::Print (std::ostream &os) const
+Name::Print (std::ostream &os) const
 {
   for (const_iterator i=m_prefix.begin(); i!=m_prefix.end(); i++)
     {
@@ -168,19 +169,19 @@
     }
   if (m_prefix.size ()==0) os << "/";
 }
-  
+
 std::ostream &
-operator << (std::ostream &os, const NameComponents &components)
+operator << (std::ostream &os, const Name &components)
 {
   components.Print (os);
   return os;
 }
 
 std::istream &
-operator >> (std::istream &is, NameComponents &components)
+operator >> (std::istream &is, Name &components)
 {
   istream_iterator<char> eos; // end of stream
-  
+
   std::string component = "";
   istream_iterator<char> it (is);
   for (; it != eos; it++)
@@ -197,9 +198,9 @@
   if (component != "")
       components.Add (component);
 
-  is.clear (); 
+  is.clear ();
   // NS_LOG_ERROR (components << ", bad: " << is.bad () <<", fail: " << is.fail ());
-  
+
   return is;
 }
 
diff --git a/model/ndn-name.h b/model/ndn-name.h
new file mode 100644
index 0000000..7f24784
--- /dev/null
+++ b/model/ndn-name.h
@@ -0,0 +1,327 @@
+/* -*- 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>
+ *         Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+#ifndef _NDN_NAME_H_
+#define _NDN_NAME_H_
+
+#include "ns3/simple-ref-count.h"
+#include "ns3/attribute.h"
+#include "ns3/attribute-helper.h"
+
+#include <string>
+#include <algorithm>
+#include <list>
+#include "ns3/object.h"
+#include "ns3/buffer.h"
+
+#include <boost/ref.hpp>
+
+namespace ns3 {
+namespace ndn {
+
+/**
+ * \ingroup ndn
+ * \brief Hierarchical NDN name
+ * A Name element represents a hierarchical name for Ndn content.
+ * It simply contains a sequence of Component elements.
+ * Each Component element contains a sequence of zero or more bytes.
+ * There are no restrictions on what byte sequences may be used.
+ * The Name element in an Interest is often referred to with the term name prefix or simply prefix.
+ */
+class Name : public SimpleRefCount<Name>
+{
+public:
+  typedef std::list<std::string>::iterator       iterator;
+  typedef std::list<std::string>::const_iterator const_iterator;
+
+  /**
+   * \brief Constructor
+   * Creates a prefix with zero components (can be looked as root "/")
+   */
+  Name ();
+
+  /**
+   * \brief Constructor
+   * Creates a prefix from a list of strings where every string represents a prefix component
+   * @param[in] components A list of strings
+   */
+  Name (const std::list<boost::reference_wrapper<const std::string> > &components);
+
+  /**
+   * @brief Constructor
+   * Creates a prefix from the string (string is parsed using operator>>)
+   * @param[in] prefix A string representation of a prefix
+   */
+  Name (const std::string &prefix);
+
+  /**
+   * @brief Constructor
+   * Creates a prefix from the string (string is parsed using operator>>)
+   * @param[in] prefix A string representation of a prefix
+   */
+  Name (const char *prefix);
+
+  /**
+   * \brief Generic Add method
+   * Appends object of type T to the list of components
+   * @param[in] value The object to be appended
+   */
+  template<class T>
+  inline void
+  Add (const T &value);
+
+  /**
+   * \brief Generic constructor operator
+   * The object of type T will be appended to the list of components
+   */
+  template<class T>
+  inline Name&
+  operator () (const T &value);
+
+  /**
+   * \brief Get a name
+   * Returns a list of components (strings)
+   */
+  const std::list<std::string> &
+  GetComponents () const;
+
+  /**
+   * @brief Helper call to get the last component of the name
+   */
+  std::string
+  GetLastComponent () const;
+
+  /**
+   * \brief Get subcomponents of the name, starting with first component
+   * @param[in] num Number of components to return. Valid value is in range [1, GetComponents ().size ()]
+   */
+  std::list<boost::reference_wrapper<const std::string> >
+  GetSubComponents (size_t num) const;
+
+  /**
+   * @brief Get prefix of the name, containing less  minusComponents right components
+   */
+  Name
+  cut (size_t minusComponents) const;
+
+  /**
+   * \brief Print name
+   * @param[in] os Stream to print
+   */
+  void Print (std::ostream &os) const;
+
+  /**
+   * @brief Get serialized size for ndnSIM packet encoding
+   */
+  size_t
+  GetSerializedSize () const;
+
+  /**
+   * @brief Serialize Name in ndnSIM packet encoding
+   * @param[in] start buffer to contain serialized name
+   */
+  uint32_t
+  Serialize (Buffer::Iterator start) const;
+
+  /**
+   * \brief Deserialize Name in ndnSIM packet encoding
+   * @param[in] start buffer that contains serialized name
+   */
+  uint32_t
+  Deserialize (Buffer::Iterator start);
+
+  /**
+   * \brief Returns the size of Name
+   */
+  inline size_t
+  size () const;
+
+  /**
+   * @brief Get read-write begin() iterator
+   */
+  inline iterator
+  begin ();
+
+  /**
+   * @brief Get read-only begin() iterator
+   */
+  inline const_iterator
+  begin () const;
+
+  /**
+   * @brief Get read-write end() iterator
+   */
+  inline iterator
+  end ();
+
+  /**
+   * @brief Get read-only end() iterator
+   */
+  inline const_iterator
+  end () const;
+
+  /**
+   * \brief Equality operator for Name
+   */
+  inline bool
+  operator== (const Name &prefix) const;
+
+  /**
+   * \brief Less than operator for Name
+   */
+  inline bool
+  operator< (const Name &prefix) const;
+
+  typedef std::string partial_type;
+
+private:
+  std::list<std::string> m_prefix;                              ///< \brief a list of strings (components)
+};
+
+/**
+ * \brief Print out name components separated by slashes, e.g., /first/second/third
+ */
+std::ostream &
+operator << (std::ostream &os, const Name &components);
+
+/**
+ * \brief Read components from input and add them to components. Will read input stream till eof
+ * Substrings separated by slashes will become separate components
+ */
+std::istream &
+operator >> (std::istream &is, Name &components);
+
+/**
+ * \brief Returns the size of Name object
+ */
+size_t
+Name::size () const
+{
+  return m_prefix.size ();
+}
+
+Name::iterator
+Name::begin ()
+{
+  return m_prefix.begin ();
+}
+
+/**
+ * @brief Get read-only begin() iterator
+ */
+Name::const_iterator
+Name::begin () const
+{
+  return m_prefix.begin ();
+}
+
+/**
+ * @brief Get read-write end() iterator
+ */
+Name::iterator
+Name::end ()
+{
+  return m_prefix.end ();
+}
+
+/**
+ * @brief Get read-only end() iterator
+ */
+Name::const_iterator
+Name::end () const
+{
+  return m_prefix.end ();
+}
+
+
+/**
+ * \brief Generic constructor operator
+ * The object of type T will be appended to the list of components
+ */
+template<class T>
+Name&
+Name::operator () (const T &value)
+{
+  Add (value);
+  return *this;
+}
+
+/**
+ * \brief Generic Add method
+ * Appends object of type T to the list of components
+ * @param[in] value The object to be appended
+ */
+template<class T>
+void
+Name::Add (const T &value)
+{
+  std::ostringstream os;
+  os << value;
+  m_prefix.push_back (os.str ());
+}
+
+/**
+ * \brief Equality operator for Name
+ */
+bool
+Name::operator== (const Name &prefix) const
+{
+  if (m_prefix.size () != prefix.m_prefix.size ())
+    return false;
+
+  return std::equal (m_prefix.begin (), m_prefix.end (), prefix.m_prefix.begin ());
+}
+
+/**
+ * \brief Less than operator for Name
+ */
+bool
+Name::operator< (const Name &prefix) const
+{
+  return std::lexicographical_compare (m_prefix.begin (), m_prefix.end (),
+                                       prefix.m_prefix.begin (), prefix.m_prefix.end ());
+}
+
+ATTRIBUTE_HELPER_HEADER (Name);
+
+/**
+ * @ingroup Ndn
+ * @brief For backwards compatibility
+ */
+class NameComponents : public Name
+{
+public:
+  NameComponents () : Name () { }
+
+  NameComponents (const std::list<boost::reference_wrapper<const std::string> > &components) : Name (components) { }
+
+  NameComponents (const std::string &prefix) : Name (prefix) { }
+
+  NameComponents (const char *prefix) : Name (prefix) { }
+};
+
+ATTRIBUTE_HELPER_HEADER (NameComponents);
+
+} // namespace ndn
+} // namespace ns3
+
+#endif // _NDN_NAME_H_
+