Added ndn_Name_match.
diff --git a/ndn-cpp/c/name.c b/ndn-cpp/c/name.c
new file mode 100644
index 0000000..3f24a67
--- /dev/null
+++ b/ndn-cpp/c/name.c
@@ -0,0 +1,27 @@
+/**
+ * @author: Jeff Thompson
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "util/ndn_memory.h"
+#include "name.h"
+
+int ndn_Name_match(struct ndn_Name *self, struct ndn_Name *name)
+{
+ // This name is longer than the name we are checking it against.
+ if (self->nComponents > name->nComponents)
+ return 0;
+
+ // Check if at least one of given components doesn't match.
+ unsigned int i;
+ for (i = 0; i < self->nComponents; ++i) {
+ struct ndn_NameComponent *selfComponent = self->components + i;
+ struct ndn_NameComponent *nameComponent = name->components + i;
+
+ if (selfComponent->valueLength != nameComponent->valueLength ||
+ ndn_memcmp(selfComponent->value, nameComponent->value, selfComponent->valueLength) != 0)
+ return 0;
+ }
+
+ return 1;
+}
diff --git a/ndn-cpp/c/name.h b/ndn-cpp/c/name.h
index b7be236..8105d60 100644
--- a/ndn-cpp/c/name.h
+++ b/ndn-cpp/c/name.h
@@ -52,6 +52,14 @@
self->nComponents = 0;
}
+/**
+ * Return true if the N components of this name are the same as the first N components of the given name.
+ * @param self A pointer to the ndn_Name struct.
+ * @param name A pointer to the other name to match.
+ * @return 1 if this matches the given name, 0 otherwise. This always returns 1 if this name is empty.
+ */
+int ndn_Name_match(struct ndn_Name *self, struct ndn_Name *name);
+
#ifdef __cplusplus
}
#endif