More progress on CCNx stack. Now we have helpers. Everything compiles, but not yet working

diff --git a/helper/ccnx-face-container.cc b/helper/ccnx-face-container.cc
new file mode 100644
index 0000000..f25ea5e
--- /dev/null
+++ b/helper/ccnx-face-container.cc
@@ -0,0 +1,81 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+
+#include "ccnx-face-container.h"
+#include "ns3/node-list.h"
+#include "ns3/names.h"
+
+namespace ns3 {
+
+CcnxFaceContainer::CcnxFaceContainer ()
+{
+}
+
+void
+CcnxFaceContainer::Add (CcnxFaceContainer other)
+{
+  for (FaceVector::const_iterator i = other.m_faces.begin (); i != other.m_faces.end (); i++)
+    {
+      m_faces.push_back (*i);
+    }
+}
+
+CcnxFaceContainer::Iterator
+CcnxFaceContainer::Begin (void) const
+{
+  return m_faces.begin ();
+}
+
+CcnxFaceContainer::Iterator
+CcnxFaceContainer::End (void) const
+{
+  return m_faces.end ();
+}
+
+uint32_t
+CcnxFaceContainer::GetN (void) const
+{
+  return m_faces.size ();
+}
+
+// CcnxAddress
+// CcnxFaceContainer::GetAddress (uint32_t i, uint32_t j) const
+// {
+//   Ptr<Ccnx> ccnx = m_faces[i].first;
+//   uint32_t face = m_faces[i].second;
+//   return ccnx->GetAddress (face, j).GetLocal ();
+// }
+
+void 
+CcnxFaceContainer::SetMetric (uint32_t i, uint16_t metric)
+{
+  Ptr<Ccnx> ccnx = m_faces[i].first;
+  uint32_t face = m_faces[i].second;
+  ccnx->SetMetric (face, metric);
+}
+
+void 
+CcnxFaceContainer::Add (Ptr<Ccnx> ccnx, uint32_t face)
+{
+  m_faces.push_back (std::make_pair (ccnx, face));
+}
+
+void CcnxFaceContainer::Add (std::pair<Ptr<Ccnx>, uint32_t> a)
+{
+  Add (a.first, a.second);
+}
+
+void 
+CcnxFaceContainer::Add (std::string ccnxName, uint32_t face)
+{
+  Ptr<Ccnx> ccnx = Names::Find<Ccnx> (ccnxName);
+  m_faces.push_back (std::make_pair (ccnx, face));
+}
+
+std::pair<Ptr<Ccnx>, uint32_t>
+CcnxFaceContainer::Get (uint32_t i) const
+{
+  return m_faces[i];
+}
+
+
+} // namespace ns3