Added NameComponent.
diff --git a/ndn-cpp/Name.hpp b/ndn-cpp/Name.hpp
index 802aaae..3ec6511 100644
--- a/ndn-cpp/Name.hpp
+++ b/ndn-cpp/Name.hpp
@@ -9,15 +9,39 @@
#include <vector>
#include "common.h"
+#include "c/Name.h"
#include "encoding/BinaryXMLWireFormat.hpp"
-extern "C" { struct ndn_Name; }
-
namespace ndn {
+class NameComponent {
+public:
+ NameComponent(unsigned char * value, unsigned int valueLen)
+ : value_(value, value + valueLen)
+ {
+ }
+
+ /**
+ * Set the componentStruct to point to this component, without copying any memory.
+ * WARNING: The resulting pointer in componentStruct is invalid after a further use of this object which could reallocate memory.
+ * @param componentStruct the C ndn_NameComponent struct to receive the pointer.
+ */
+ void get(struct ndn_NameComponent &componentStruct)
+ {
+ componentStruct.value = &value_[0];
+ componentStruct.valueLength = value_.size();
+ }
+
+ const std::vector<unsigned char> &getValue() const { return value_; }
+
+private:
+ std::vector<unsigned char> value_;
+};
+
class Name {
public:
- Name();
+ Name() {
+ }
Name(const char *uri);
void encode(std::vector<unsigned char> &output, WireFormat &wireFormat) {
@@ -34,23 +58,23 @@
}
/**
+ * Set the nameStruct to point to the components in this name, without copying any memory.
+ * WARNING: The resulting pointers in nameStruct are invalid after a further use of this object which could reallocate memory.
+ * @param nameStruct a C ndn_Name struct where the components array is already allocated.
+ */
+ void get(struct ndn_Name &nameStruct);
+
+ /**
* Clear the name, and set the components by copying from the name struct.
* @param name a C ndn_Name struct
*/
void set(struct ndn_Name &nameStruct);
/**
- * Set the nameStruct to point to the components in this name, without copying any memory.
- * WARNING: The resulting pointers in nameStruct are invalid after a further use of this name which could reallocate the components memory.
- * @param nameStruct a C ndn_Name struct where the components array is already allocated.
- */
- void get(struct ndn_Name &nameStruct);
-
- /**
* Add a new component, copying from value of length valueLength.
*/
void addComponent(unsigned char *value, unsigned int valueLength) {
- components_.push_back(std::vector<unsigned char>(value, value + valueLength));
+ components_.push_back(NameComponent(value, valueLength));
}
/**
@@ -75,7 +99,7 @@
std::string to_uri();
private:
- std::vector<std::vector<unsigned char> > components_;
+ std::vector<NameComponent> components_;
};
}