blob: 5f5a5c09c873c4709842c4aa495b41101b28ba6b [file] [log] [blame]
Alexander Afanasyevd09871f2013-01-04 22:36:37 -08001/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
2/*
3 * Copyright (c) 2012-2013 University of California, Los Angeles
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation;
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
19 * Alexander Afanasyev <alexander.afanasyev@ucla.edu>
20 */
21
Zhenkai Zhuf47109b2013-01-02 19:41:34 -080022#ifndef CCNX_NAME_H
23#define CCNX_NAME_H
24#include <boost/shared_ptr.hpp>
25#include "ccnx-common.h"
26
27namespace Ccnx {
28
Zhenkai Zhucb2d0dd2013-01-03 14:10:48 -080029class CcnxCharbuf;
30typedef boost::shared_ptr<CcnxCharbuf> CcnxCharbufPtr;
31
Zhenkai Zhuf47109b2013-01-02 19:41:34 -080032// This class is mostly used in CcnxWrapper; users should not be directly using this class
33// The main purpose of this class to is avoid manually create and destroy charbuf everytime
34class CcnxCharbuf
35{
36public:
37 CcnxCharbuf();
38 CcnxCharbuf(ccn_charbuf *buf);
Zhenkai Zhub0adefe2013-01-04 21:56:38 -080039 CcnxCharbuf(const CcnxCharbuf &other);
Zhenkai Zhuf47109b2013-01-02 19:41:34 -080040 ~CcnxCharbuf();
41
42 // expose internal data structure, use with caution!!
43 ccn_charbuf *
44 getBuf() { return m_buf; }
Zhenkai Zhucb2d0dd2013-01-03 14:10:48 -080045 static CcnxCharbufPtr Null;
Zhenkai Zhuf47109b2013-01-02 19:41:34 -080046
Alexander Afanasyevd09871f2013-01-04 22:36:37 -080047 const unsigned char *
48 buf () const
49 { return m_buf->buf; }
50
51 size_t
52 length () const
53 { return m_buf->length; }
54
Zhenkai Zhub0adefe2013-01-04 21:56:38 -080055private:
56 void init(ccn_charbuf *buf);
57
Zhenkai Zhuf47109b2013-01-02 19:41:34 -080058protected:
59 ccn_charbuf *m_buf;
60};
61
Zhenkai Zhuf47109b2013-01-02 19:41:34 -080062
63struct NameException:
64 virtual boost::exception, virtual exception {};
Zhenkai Zhucb2d0dd2013-01-03 14:10:48 -080065
Zhenkai Zhuf47109b2013-01-02 19:41:34 -080066class Name
67{
68public:
69 Name();
70 Name(const string &name);
71 Name(const vector<Bytes> &comps);
72 Name(const Name &other);
73 Name(const unsigned char *data, const ccn_indexbuf *comps);
Alexander Afanasyevd09871f2013-01-04 22:36:37 -080074 Name (const unsigned char *buf, const size_t length);
Zhenkai Zhuf47109b2013-01-02 19:41:34 -080075 virtual ~Name() {}
76
77 CcnxCharbufPtr
78 toCcnxCharbuf() const;
79
Alexander Afanasyevd09871f2013-01-04 22:36:37 -080080 operator CcnxCharbufPtr () const { return toCcnxCharbuf (); }
81
Zhenkai Zhuf47109b2013-01-02 19:41:34 -080082 Name &
83 appendComp(const Bytes &comp);
84
85 Name &
86 appendComp(const string &compStr);
87
88 int
89 size() const {return m_comps.size();}
90
91 Bytes
92 getComp(int index) const;
93
94 // return string format of the comp
95 // if all characters are printable, simply returns the string
96 // if not, print the bytes in hex string format
97 string
98 getCompAsString(int index) const;
99
100 Name
Zhenkai Zhucb2d0dd2013-01-03 14:10:48 -0800101 getPartialName(int start, int n = -1) const;
Zhenkai Zhuf47109b2013-01-02 19:41:34 -0800102
Zhenkai Zhucb2d0dd2013-01-03 14:10:48 -0800103 string
104 toString() const;
105
106 Name &
107 operator=(const Name &other);
108
109 bool
Zhenkai Zhu3b82d432013-01-03 22:48:40 -0800110 operator==(const string &str) const;
Zhenkai Zhucb2d0dd2013-01-03 14:10:48 -0800111
112 bool
Zhenkai Zhu3b82d432013-01-03 22:48:40 -0800113 operator!=(const string &str) const;
Zhenkai Zhucb2d0dd2013-01-03 14:10:48 -0800114
115 friend Name
116 operator+(const Name &n1, const Name &n2);
Zhenkai Zhuf47109b2013-01-02 19:41:34 -0800117
118protected:
119 vector<Bytes> m_comps;
120};
121
122ostream&
123operator <<(ostream &os, const Name &name);
124
Zhenkai Zhucb2d0dd2013-01-03 14:10:48 -0800125bool
126operator ==(const Name &n1, const Name &n2);
127
128bool
129operator !=(const Name &n1, const Name &n2);
130
131bool
132operator <(const Name &n1, const Name &n2);
133
134
Zhenkai Zhuf47109b2013-01-02 19:41:34 -0800135
136} // Ccnx
137#endif