NS-3 based Named Data Networking (NDN) simulator
ndnSIM: NDN, CCN, CCNx, content centric networks
API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
name-visitor.cc
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
2 /*
3  * Copyright (c) 2011 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: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
19  */
20 
21 #include "name-visitor.h"
22 
23 #include "string-visitor.h"
24 #include "../syntax-tree/dtag.h"
25 
26 #include "ns3/ndn-name.h"
27 
28 NDN_NAMESPACE_BEGIN
29 
30 namespace wire {
31 namespace CcnbParser {
32 
33 void
34 NameVisitor::visit (Dtag &n, boost::any param/*should be Name* */)
35 {
36  // uint32_t n.m_dtag;
37  // std::list<Ptr<Block> > n.m_nestedBlocks;
38  static StringVisitor stringVisitor;
39 
40  Name &components = *(boost::any_cast<Name*> (param));
41 
42  switch (n.m_dtag)
43  {
44  case CCN_DTAG_Component:
45  if (n.m_nestedTags.size()!=1) // should be exactly one UDATA inside this tag
46  throw CcnbDecodingException ();
47  components.append (
48  boost::any_cast<std::string> ((*n.m_nestedTags.begin())->accept(
49  stringVisitor
50  )));
51  break;
52  default:
53  VoidDepthFirstVisitor::visit (n, param);
54  break;
55  }
56 }
57 
58 } // CcnbParser
59 } // wire
60 
61 NDN_NAMESPACE_END
Class for NDN Name.
Definition: name.h:29
std::list< Ptr< Block > > m_nestedTags
List of nested tags.
Definition: base-tag.h:43
Exception thrown if there is a parsing error.
Definition: common.h:50
Class to represent DTAG ccnb-encoded node.
Definition: dtag.h:37
Name & append(const name::Component &comp)
Append a binary blob as a name component.
Definition: name.h:429
uint32_t m_dtag
Dictionary code for DTAG.
Definition: dtag.h:60
Visitor to obtain string value from UDATA block.