blob: 9112f0dfa566efb0e87385c5c5eac8ba6745fdd5 [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 Afanasyev39f53162013-07-18 16:24:31 -070025 def __init__ (self,
26 value = None,
27 name = None):
28 if name:
29 if type (name) is ns.ndnSIM.ndn.Name:
30 self._name = name
31 elif type (name) is Name:
32 self._name = name._name
33 else:
34 raise TypeError ("Incorrect type for 'name' parameter [%s]" % type (name))
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070035 else:
Alexander Afanasyev39f53162013-07-18 16:24:31 -070036 if value:
37 self._name = ns.ndnSIM.ndn.Name (value)
38 else:
39 self._name = ns.ndnSIM.ndn.Name ()
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070040
Alexander Afanasyev76b11572013-07-16 21:49:50 -070041 @staticmethod
42 def fromWire (wire):
43 return ns.ndnSIM.ndn.Wire.ToName (wire)
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070044
Alexander Afanasyev76b11572013-07-16 21:49:50 -070045 @staticmethod
46 def toWire (name):
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070047 return ns.ndnSIM.ndn.Wire.FromName (name)
Alexander Afanasyev76b11572013-07-16 21:49:50 -070048
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070049 def __getattr__ (self, name):
50 return self._name.__getattribute__ (name)
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070051
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070052 def __len__ (self):
53 return self._name.size ()
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070054
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070055 def __add__ (self, other):
56 return self._name.append (other)
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070057
58 def __getitem__(self, key):
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070059 if type (key) is int:
60 if abs(key) < self._name.size ():
61 return self._name.get (key)
62 else:
63 raise IndexError ("index out of range")
64 elif type (key) is slice:
65 name = ns.ndnSIM.ndn.Name ()
66 for component in xrange (*key.indices (self.size ())):
67 name.append (self._name.get (component))
68 return name
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070069 else:
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070070 raise ValueError("Unknown __getitem__ type: %s" % type (key))
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070071
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070072 def __repr__ (self):
73 return "ndnSIM.Name('" + self._name.toUri () + "')"
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070074