blob: 12b024bb71d7bd68aa9d46883d76f1c150a255b3 [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 Thompson27cae532013-10-08 12:52:41 -070010#include "errors.h"
Jeff Thompson93034532013-10-08 11:52:43 -070011#include "util/blob.h"
12
Jeff Thompson2d27e2f2013-08-09 12:55:00 -070013#ifdef __cplusplus
Jeff Thompson5d89cb92013-06-27 15:57:15 -070014extern "C" {
15#endif
16
Jeff Thompson2934a5b2013-07-03 17:45:53 -070017/**
18 * An ndn_NameComponent holds a pointer to the component value.
19 */
Jeff Thompsonb0fd64f2013-06-27 16:02:36 -070020struct ndn_NameComponent {
Jeff Thompson93034532013-10-08 11:52:43 -070021 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 -070022};
23
Jeff Thompson2934a5b2013-07-03 17:45:53 -070024/**
25 *
26 * @param self pointer to the ndn_NameComponent struct
27 * @param value the pre-allocated buffer for the component value
28 * @param valueLength the number of bytes in value
29 */
Jeff Thompson97223af2013-09-24 17:01:27 -070030static inline void ndn_NameComponent_initialize(struct ndn_NameComponent *self, uint8_t *value, size_t valueLength)
Jeff Thompsonb0fd64f2013-06-27 16:02:36 -070031{
Jeff Thompson93034532013-10-08 11:52:43 -070032 ndn_Blob_initialize(&self->value, value, valueLength);
Jeff Thompsonb0fd64f2013-06-27 16:02:36 -070033}
Jeff Thompson27cae532013-10-08 12:52:41 -070034
35/**
36/**
37 * Interpret the name component as a network-ordered number and return an integer.
38 * @param self A pointer to the ndn_NameComponent struct.
39 * @return The integer number.
40 */
41uint64_t ndn_NameComponent_toNumber(struct ndn_NameComponent *self);
42
43/**
44 * Convert binary blob name component (network-ordered number) to number, using appropriate marker from the naming convention
45 * @param comp name component to be converted
46 * @param marker required marker from the naming convention
47 *
48 * If the required marker does not exist, an exception will be thrown
49 */
50
51/**
52 * Interpret the name component as a network-ordered number with a marker and return an integer.
53 * @param self A pointer to the ndn_NameComponent struct.
54 * @param marker The required first byte of the component.
55 * @param result Return the integer number.
56 * @return 0 for success, or an error code if the first byte of the component does not equal the marker.
57 */
58ndn_Error ndn_NameComponent_toNumberWithMarker(struct ndn_NameComponent *self, uint8_t marker, uint64_t *result);
59
Jeff Thompson2934a5b2013-07-03 17:45:53 -070060/**
61 * An ndn_Name holds an array of ndn_NameComponent.
62 */
Jeff Thompson5d89cb92013-06-27 15:57:15 -070063struct ndn_Name {
Jeff Thompson08d56292013-06-27 18:20:44 -070064 struct ndn_NameComponent *components; /**< pointer to the array of components. */
Jeff Thompson97223af2013-09-24 17:01:27 -070065 size_t maxComponents; /**< the number of elements in the allocated components array */
66 size_t nComponents; /**< the number of components in the name */
Jeff Thompson5d89cb92013-06-27 15:57:15 -070067};
68
Jeff Thompson08d56292013-06-27 18:20:44 -070069/**
70 * Initialize an ndn_Name struct with the components array.
71 * @param self pointer to the ndn_Name struct
Jeff Thompson2934a5b2013-07-03 17:45:53 -070072 * @param components the pre-allocated array of ndn_NameComponent
Jeff Thompson08d56292013-06-27 18:20:44 -070073 * @param maxComponents the number of elements in the allocated components array
74 */
Jeff Thompson97223af2013-09-24 17:01:27 -070075static inline void ndn_Name_initialize(struct ndn_Name *self, struct ndn_NameComponent *components, size_t maxComponents)
Jeff Thompsonb0fd64f2013-06-27 16:02:36 -070076{
Jeff Thompson08d56292013-06-27 18:20:44 -070077 self->components = components;
78 self->maxComponents = maxComponents;
Jeff Thompsonb0fd64f2013-06-27 16:02:36 -070079 self->nComponents = 0;
80}
Jeff Thompson5d89cb92013-06-27 15:57:15 -070081
Jeff Thompsonf1ba9bd2013-08-12 17:43:08 -070082/**
83 * Return true if the N components of this name are the same as the first N components of the given name.
84 * @param self A pointer to the ndn_Name struct.
85 * @param name A pointer to the other name to match.
86 * @return 1 if this matches the given name, 0 otherwise. This always returns 1 if this name is empty.
87 */
88int ndn_Name_match(struct ndn_Name *self, struct ndn_Name *name);
89
Jeff Thompson2d27e2f2013-08-09 12:55:00 -070090#ifdef __cplusplus
Jeff Thompson5d89cb92013-06-27 15:57:15 -070091}
92#endif
93
Jeff Thompson08d56292013-06-27 18:20:44 -070094#endif
Jeff Thompson5d89cb92013-06-27 15:57:15 -070095