blob: 78fcc9c2682d33cdee98b2304e1380666978e0cb [file] [log] [blame]
Jeff Thompson47eecfc2013-07-07 22:56:46 -07001/**
Jeff Thompson7687dc02013-09-13 11:54:07 -07002 * Copyright (C) 2013 Regents of the University of California.
3 * @author: Jeff Thompson <jefft0@remap.ucla.edu>
Jeff Thompson47eecfc2013-07-07 22:56:46 -07004 * See COPYING for copyright and distribution information.
Jeff Thompson5d89cb92013-06-27 15:57:15 -07005 */
6
7#ifndef NDN_NAME_H
Jeff Thompson2d27e2f2013-08-09 12:55:00 -07008#define NDN_NAME_H
Jeff Thompson5d89cb92013-06-27 15:57:15 -07009
Jeff Thompson25b4e612013-10-10 16:03:24 -070010#include <ndn-cpp/c/common.h>
Jeff Thompson27cae532013-10-08 12:52:41 -070011#include "errors.h"
Jeff Thompson93034532013-10-08 11:52:43 -070012#include "util/blob.h"
13
Jeff Thompson2d27e2f2013-08-09 12:55:00 -070014#ifdef __cplusplus
Jeff Thompson5d89cb92013-06-27 15:57:15 -070015extern "C" {
16#endif
17
Jeff Thompson2934a5b2013-07-03 17:45:53 -070018/**
19 * An ndn_NameComponent holds a pointer to the component value.
20 */
Jeff Thompsonb0fd64f2013-06-27 16:02:36 -070021struct ndn_NameComponent {
Jeff Thompson93034532013-10-08 11:52:43 -070022 struct ndn_Blob value; /**< A Blob with a pointer to the pre-allocated buffer for the component value */
Jeff Thompson5d89cb92013-06-27 15:57:15 -070023};
24
Jeff Thompson2934a5b2013-07-03 17:45:53 -070025/**
26 *
27 * @param self pointer to the ndn_NameComponent struct
28 * @param value the pre-allocated buffer for the component value
29 * @param valueLength the number of bytes in value
30 */
Jeff Thompson97223af2013-09-24 17:01:27 -070031static inline void ndn_NameComponent_initialize(struct ndn_NameComponent *self, uint8_t *value, size_t valueLength)
Jeff Thompsonb0fd64f2013-06-27 16:02:36 -070032{
Jeff Thompson93034532013-10-08 11:52:43 -070033 ndn_Blob_initialize(&self->value, value, valueLength);
Jeff Thompsonb0fd64f2013-06-27 16:02:36 -070034}
Jeff Thompson27cae532013-10-08 12:52:41 -070035
36/**
37/**
38 * Interpret the name component as a network-ordered number and return an integer.
39 * @param self A pointer to the ndn_NameComponent struct.
40 * @return The integer number.
41 */
42uint64_t ndn_NameComponent_toNumber(struct ndn_NameComponent *self);
43
44/**
Jeff Thompson27cae532013-10-08 12:52:41 -070045 * Interpret the name component as a network-ordered number with a marker and return an integer.
46 * @param self A pointer to the ndn_NameComponent struct.
47 * @param marker The required first byte of the component.
48 * @param result Return the integer number.
49 * @return 0 for success, or an error code if the first byte of the component does not equal the marker.
50 */
51ndn_Error ndn_NameComponent_toNumberWithMarker(struct ndn_NameComponent *self, uint8_t marker, uint64_t *result);
52
Jeff Thompson2934a5b2013-07-03 17:45:53 -070053/**
54 * An ndn_Name holds an array of ndn_NameComponent.
55 */
Jeff Thompson5d89cb92013-06-27 15:57:15 -070056struct ndn_Name {
Jeff Thompson08d56292013-06-27 18:20:44 -070057 struct ndn_NameComponent *components; /**< pointer to the array of components. */
Jeff Thompson97223af2013-09-24 17:01:27 -070058 size_t maxComponents; /**< the number of elements in the allocated components array */
59 size_t nComponents; /**< the number of components in the name */
Jeff Thompson5d89cb92013-06-27 15:57:15 -070060};
61
Jeff Thompson08d56292013-06-27 18:20:44 -070062/**
63 * Initialize an ndn_Name struct with the components array.
64 * @param self pointer to the ndn_Name struct
Jeff Thompson2934a5b2013-07-03 17:45:53 -070065 * @param components the pre-allocated array of ndn_NameComponent
Jeff Thompson08d56292013-06-27 18:20:44 -070066 * @param maxComponents the number of elements in the allocated components array
67 */
Jeff Thompson97223af2013-09-24 17:01:27 -070068static inline void ndn_Name_initialize(struct ndn_Name *self, struct ndn_NameComponent *components, size_t maxComponents)
Jeff Thompsonb0fd64f2013-06-27 16:02:36 -070069{
Jeff Thompson08d56292013-06-27 18:20:44 -070070 self->components = components;
71 self->maxComponents = maxComponents;
Jeff Thompsonb0fd64f2013-06-27 16:02:36 -070072 self->nComponents = 0;
73}
Jeff Thompson5d89cb92013-06-27 15:57:15 -070074
Jeff Thompsonf1ba9bd2013-08-12 17:43:08 -070075/**
76 * Return true if the N components of this name are the same as the first N components of the given name.
77 * @param self A pointer to the ndn_Name struct.
78 * @param name A pointer to the other name to match.
79 * @return 1 if this matches the given name, 0 otherwise. This always returns 1 if this name is empty.
80 */
81int ndn_Name_match(struct ndn_Name *self, struct ndn_Name *name);
82
Jeff Thompson2d27e2f2013-08-09 12:55:00 -070083#ifdef __cplusplus
Jeff Thompson5d89cb92013-06-27 15:57:15 -070084}
85#endif
86
Jeff Thompson08d56292013-06-27 18:20:44 -070087#endif
Jeff Thompson5d89cb92013-06-27 15:57:15 -070088