ccnx: small reorganization and extension
Change-Id: I231e1e7e390d19b8e951b9ca4cf52480e10916bc
diff --git a/ccnx/ccnx-charbuf.cc b/ccnx/ccnx-charbuf.cc
new file mode 100644
index 0000000..0ba328f
--- /dev/null
+++ b/ccnx/ccnx-charbuf.cc
@@ -0,0 +1,71 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * 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
+ * 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: Zhenkai Zhu <zhenkai@cs.ucla.edu>
+ * Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "ccnx-charbuf.h"
+
+using namespace std;
+
+namespace Ccnx {
+
+void
+CcnxCharbuf::init(ccn_charbuf *buf)
+{
+ if (buf != NULL)
+ {
+ m_buf = ccn_charbuf_create();
+ ccn_charbuf_reserve(m_buf, buf->length);
+ memcpy(m_buf->buf, buf->buf, buf->length);
+ m_buf->length = buf->length;
+ }
+}
+
+CcnxCharbuf::CcnxCharbuf()
+ : m_buf(NULL)
+{
+ m_buf = ccn_charbuf_create();
+}
+
+CcnxCharbuf::CcnxCharbuf(ccn_charbuf *buf)
+ : m_buf(NULL)
+{
+ init(buf);
+}
+
+CcnxCharbuf::CcnxCharbuf(const CcnxCharbuf &other)
+ : m_buf (NULL)
+{
+ init(other.m_buf);
+}
+
+CcnxCharbuf::CcnxCharbuf(const void *buf, size_t length)
+{
+ m_buf = ccn_charbuf_create ();
+ ccn_charbuf_reserve (m_buf, length);
+ memcpy (m_buf->buf, buf, length);
+ m_buf->length = length;
+}
+
+CcnxCharbuf::~CcnxCharbuf()
+{
+ ccn_charbuf_destroy(&m_buf);
+}
+
+}
diff --git a/ccnx/ccnx-charbuf.h b/ccnx/ccnx-charbuf.h
new file mode 100644
index 0000000..fbb9588
--- /dev/null
+++ b/ccnx/ccnx-charbuf.h
@@ -0,0 +1,68 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2012-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
+ * 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: Zhenkai Zhu <zhenkai@cs.ucla.edu>
+ * Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef CCNX_CCNX_CHARBUF_H
+#define CCNX_CCNX_CHARBUF_H
+
+#include "ccnx-common.h"
+#include <boost/shared_ptr.hpp>
+
+namespace Ccnx {
+
+class CcnxCharbuf;
+typedef boost::shared_ptr<CcnxCharbuf> CcnxCharbufPtr;
+
+// This class is mostly used in CcnxWrapper; users should not be directly using this class
+// The main purpose of this class to is avoid manually create and destroy charbuf everytime
+class CcnxCharbuf
+{
+public:
+ CcnxCharbuf();
+ CcnxCharbuf(ccn_charbuf *buf);
+ CcnxCharbuf(const CcnxCharbuf &other);
+ CcnxCharbuf(const void *buf, size_t length);
+ ~CcnxCharbuf();
+
+ // expose internal data structure, use with caution!!
+ ccn_charbuf *
+ getBuf() { return m_buf; }
+
+ const ccn_charbuf *
+ getBuf() const { return m_buf; }
+
+ const unsigned char *
+ buf () const
+ { return m_buf->buf; }
+
+ size_t
+ length () const
+ { return m_buf->length; }
+
+private:
+ void init(ccn_charbuf *buf);
+
+protected:
+ ccn_charbuf *m_buf;
+};
+
+}
+
+#endif // CCNX_CCNX_CHARBUF_H
diff --git a/ccnx/ccnx-name.cpp b/ccnx/ccnx-name.cpp
index 55d434b..00fbe11 100644
--- a/ccnx/ccnx-name.cpp
+++ b/ccnx/ccnx-name.cpp
@@ -23,54 +23,12 @@
#include <boost/lexical_cast.hpp>
#include <ctype.h>
#include <boost/algorithm/string/join.hpp>
+#include <boost/make_shared.hpp>
using namespace std;
namespace Ccnx{
-void
-CcnxCharbuf::init(ccn_charbuf *buf)
-{
- if (buf != NULL)
- {
- m_buf = ccn_charbuf_create();
- ccn_charbuf_reserve(m_buf, buf->length);
- memcpy(m_buf->buf, buf->buf, buf->length);
- m_buf->length = buf->length;
- }
-}
-
-CcnxCharbuf::CcnxCharbuf()
- : m_buf(NULL)
-{
- m_buf = ccn_charbuf_create();
-}
-
-CcnxCharbuf::CcnxCharbuf(ccn_charbuf *buf)
- : m_buf(NULL)
-{
- init(buf);
-}
-
-CcnxCharbuf::CcnxCharbuf(const CcnxCharbuf &other)
- : m_buf (NULL)
-{
- init(other.m_buf);
-}
-
-CcnxCharbuf::CcnxCharbuf(const void *buf, size_t length)
-{
- m_buf = ccn_charbuf_create ();
- ccn_charbuf_reserve (m_buf, length);
- memcpy (m_buf->buf, buf, length);
- m_buf->length = length;
-}
-
-CcnxCharbuf::~CcnxCharbuf()
-{
- ccn_charbuf_destroy(&m_buf);
-}
-
Name::Name()
{
}
@@ -205,10 +163,11 @@
return ss.str();
}
-CcnxCharbufPtr
-Name::toCcnxCharbuf() const
+CcnxCharbuf*
+Name::toCcnxCharbufRaw () const
{
- CcnxCharbufPtr ptr(new CcnxCharbuf());
+ CcnxCharbuf *ptr = new CcnxCharbuf ();
+
ccn_charbuf *cbuf = ptr->getBuf();
ccn_name_init(cbuf);
int size = m_comps.size();
@@ -219,6 +178,13 @@
return ptr;
}
+
+CcnxCharbufPtr
+Name::toCcnxCharbuf () const
+{
+ return CcnxCharbufPtr (toCcnxCharbufRaw ());
+}
+
Name &
Name::appendComp(const Name &comp)
{
diff --git a/ccnx/ccnx-name.h b/ccnx/ccnx-name.h
index c11e52f..8e3ca6e 100644
--- a/ccnx/ccnx-name.h
+++ b/ccnx/ccnx-name.h
@@ -23,46 +23,10 @@
#define CCNX_NAME_H
#include <boost/shared_ptr.hpp>
#include "ccnx-common.h"
+#include "ccnx-charbuf.h"
namespace Ccnx {
-class CcnxCharbuf;
-typedef boost::shared_ptr<CcnxCharbuf> CcnxCharbufPtr;
-
-// This class is mostly used in CcnxWrapper; users should not be directly using this class
-// The main purpose of this class to is avoid manually create and destroy charbuf everytime
-class CcnxCharbuf
-{
-public:
- CcnxCharbuf();
- CcnxCharbuf(ccn_charbuf *buf);
- CcnxCharbuf(const CcnxCharbuf &other);
- CcnxCharbuf(const void *buf, size_t length);
- ~CcnxCharbuf();
-
- // expose internal data structure, use with caution!!
- ccn_charbuf *
- getBuf() { return m_buf; }
-
- const ccn_charbuf *
- getBuf() const { return m_buf; }
-
- const unsigned char *
- buf () const
- { return m_buf->buf; }
-
- size_t
- length () const
- { return m_buf->length; }
-
-private:
- void init(ccn_charbuf *buf);
-
-protected:
- ccn_charbuf *m_buf;
-};
-
-
struct NameException:
virtual boost::exception, virtual std::exception {};
@@ -82,6 +46,9 @@
CcnxCharbufPtr
toCcnxCharbuf() const;
+ CcnxCharbuf*
+ toCcnxCharbufRaw () const;
+
operator CcnxCharbufPtr () const { return toCcnxCharbuf (); }
Name &