blob: 628b843848ddc85a392aea911156a87318c5db56 [file] [log] [blame]
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
#
# Copyright (c) 2011-2013, Regents of the University of California
# Alexander Afanasyev
#
# GNU 3.0 license, See the LICENSE file for more information
#
# Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
#
#
# Based on PyCCN code, copyrighted and licensed as follows
#
# Copyright (c) 2011-2013, Regents of the University of California
# BSD license, See the COPYING file for more information
# Written by: Derek Kulinski <takeda@takeda.tk>
# Jeff Burke <jburke@ucla.edu>
#
import ns.ndnSIM
class Name (object):
_name = None
def __init__ (self,
value = None,
name = None):
if name is not None:
if isinstance (name, ns.ndnSIM.ndn.Name):
self._name = name
elif isinstance (name, Name):
self._name = name._name
else:
raise TypeError ("Incorrect type for 'name' parameter [%s]" % type (name))
else:
if value is not None:
if isinstance (value, Name):
self._name = ns.ndnSIM.ndn.Name (value._name)
else:
self._name = ns.ndnSIM.ndn.Name (value)
else:
self._name = ns.ndnSIM.ndn.Name ()
@staticmethod
def fromWire (wire):
return Name (name = ns.ndnSIM.ndn.Wire.ToName (wire))
def toWire (self):
return ns.ndnSIM.ndn.Wire.FromName (self._name)
def append (self, value):
if isinstance (value, Name):
self._name.append (value._name)
else:
self._name.append (value)
return self
def __getattr__ (self, name):
return self._name.__getattribute__ (name)
def __len__ (self):
return self._name.size ()
def __add__ (self, other):
return self._name.append (other)
def __getitem__(self, key):
if isinstance (key, int):
if abs(key) < self._name.size ():
return self._name.get (key)
else:
raise IndexError ("index out of range")
elif isinstance (key, slice):
name = ns.ndnSIM.ndn.Name ()
for component in xrange (*key.indices (self.size ())):
name.append (self._name.get (component))
return name
else:
raise ValueError("Unknown __getitem__ type: %s" % type (key))
def __repr__ (self):
return "ndn.Name('" + self._name.toUri () + "')"
def __str__ (self):
return self._name.toUri ()
def __eq__ (self, other):
return self._name == other._name
def isPrefixOf (self, other):
return self[:] == other[:len(self)]
@property
def keyName (self):
return self