blob: 05c34b0091e7e3efc09fe420fcc2a20e26e15905 [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):
Alexander Afanasyev7992ab62013-07-19 16:50:58 -070043 return Name (name = ns.ndnSIM.ndn.Wire.ToName (wire))
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070044
Alexander Afanasyev7992ab62013-07-19 16:50:58 -070045 def toWire (self):
46 return ns.ndnSIM.ndn.Wire.FromName (self._name)
Alexander Afanasyev76b11572013-07-16 21:49:50 -070047
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070048 def __getattr__ (self, name):
49 return self._name.__getattribute__ (name)
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070050
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070051 def __len__ (self):
52 return self._name.size ()
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070053
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070054 def __add__ (self, other):
55 return self._name.append (other)
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070056
57 def __getitem__(self, key):
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070058 if type (key) is int:
59 if abs(key) < self._name.size ():
60 return self._name.get (key)
61 else:
62 raise IndexError ("index out of range")
63 elif type (key) is slice:
64 name = ns.ndnSIM.ndn.Name ()
65 for component in xrange (*key.indices (self.size ())):
66 name.append (self._name.get (component))
67 return name
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070068 else:
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070069 raise ValueError("Unknown __getitem__ type: %s" % type (key))
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070070
Alexander Afanasyev7d0a61d2013-07-17 17:33:05 -070071 def __repr__ (self):
72 return "ndnSIM.Name('" + self._name.toUri () + "')"
Alexander Afanasyev5ba90362013-07-15 19:58:38 -070073