blob: a9aaa31565e2151fa332558536e04a03cc3e2b81 [file] [log] [blame]
Alexander Afanasyev5ba90362013-07-15 19:58:38 -07001## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
2#
3# Copyright (c) 2011-2013, Regents of the University of California
4# Alexander Afanasyev
5#
6# GNU 3.0 license, See the LICENSE file for more information
7#
8# Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
9#
10
11#
12# Based on PyCCN code, copyrighted and licensed as follows
13#
14# Copyright (c) 2011-2013, Regents of the University of California
15# BSD license, See the COPYING file for more information
16# Written by: Derek Kulinski <takeda@takeda.tk>
17# Jeff Burke <jburke@ucla.edu>
18#
19
Alexander Afanasyev76b11572013-07-16 21:49:50 -070020import ns.ndnSIM
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070021
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070022class Name ():
23 _name = None
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070024
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070025 def __init__ (self, value = None):
26 if value:
27 self._name = ns.ndnSIM.ndn.Name (value)
28 else:
29 self._name = ns.ndnSIM.ndn.Name ()
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070030
Alexander Afanasyev76b11572013-07-16 21:49:50 -070031 @staticmethod
32 def fromWire (wire):
33 return ns.ndnSIM.ndn.Wire.ToName (wire)
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070034
Alexander Afanasyev76b11572013-07-16 21:49:50 -070035 @staticmethod
36 def toWire (name):
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070037 return ns.ndnSIM.ndn.Wire.FromName (name)
Alexander Afanasyev76b11572013-07-16 21:49:50 -070038
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070039 def __getattr__ (self, name):
40 return self._name.__getattribute__ (name)
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070041
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070042 def __len__ (self):
43 return self._name.size ()
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070044
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070045 def __add__ (self, other):
46 return self._name.append (other)
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070047
48 def __getitem__(self, key):
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070049 if type (key) is int:
50 if abs(key) < self._name.size ():
51 return self._name.get (key)
52 else:
53 raise IndexError ("index out of range")
54 elif type (key) is slice:
55 name = ns.ndnSIM.ndn.Name ()
56 for component in xrange (*key.indices (self.size ())):
57 name.append (self._name.get (component))
58 return name
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070059 else:
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070060 raise ValueError("Unknown __getitem__ type: %s" % type (key))
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070061
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070062 def __repr__ (self):
63 return "ndnSIM.Name('" + self._name.toUri () + "')"
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070064