def find_gt( self, k ):
     #return (key,value) where key > k
     p = self._T.SkipSearch( Map._Item( k ) )
     if p._next is None or p._next._next is None:
         return None
     p = p._next
     return (p._elem._key,p._elem._value)
 def find_ge( self, k ):
     #return (key,value) where key >= k
     p = self._T.SkipSearch( Map._Item( k ) )
     p = p.elem._next
     if p._next is None:
         return None
     return (p._elem._key,p._elem._value)
 def find_lt( self, k ):
     #return (key,value) where key < k
     p = self._T.SkipSearch( Map._Item( k ) )
     if p._prev is None or p._prev._prev is None:
         return None
     if p._elem._k == k:
         p = p._prev
     return (p._elem._key,p._elem._value)
Exemplo n.º 4
0
 def find_le(self, k):
     #SkipSearch s'arrête sur key <= k
     p = self._T.SkipSearch(Map._Item(k))
     #si on arrête sur la sentinelle à gauche
     #il n'existe pas d'élément dont la clé est <= k
     if p._prev is None:
         return None
     #sinon, on s'est arrêté dessus
     return (p._elem._key, p._elem._value)
 def find_range( self, start, stop ):
     #iterate (key,value) where start <= key < stop
     if start is None:
         start = self._T.Min()
     p = self._T.SkipSearch( Map._Item( start ) )
     while not( p._belo is None ):
         p = p._belo
     while not( p._next is None ) and ( p._elem._key < stop ):
             yield (p._elem._key,p._elem._value)
             p = p._next
Exemplo n.º 6
0
 def find_ge(self, k):
     #SkipSearch s'arrête sur key <= k
     p = self._T.SkipSearch(Map._Item(k))
     #si on arrête sur la sentinelle à droite
     #il n'existe pas d'élément dont la clé est >= k
     if p._next is None:
         return None
     #sinon, si l'élément de clé k n'existe pas,
     #le plus grand est le suivant
     if p._elem._key < k:
         p = p._next
     return (p._elem._key, p._elem._value)
Exemplo n.º 7
0
 def find_gt(self, k):
     #SkipSearch s'arrête sur key <= k
     p = self._T.SkipSearch(Map._Item(k))
     #si on arrête sur le dernier élément ou la sentinelle à droite
     #il n'existe pas d'élément dont la clé est > k
     if p._next is None or p._next._next is None:
         return None
     #le plus grand est le suivant
     #s'il l'élément de clé k existe, le > est le suivant
     #s'il n'existe pas, le > est aussi le suivant
     #puisqu'on s'est arrêté sur le premier <
     p = p._next
     return (p._elem._key, p._elem._value)
Exemplo n.º 8
0
 def find_lt(self, k):
     #SkipSearch s'arrête sur key <= k
     p = self._T.SkipSearch(Map._Item(k))
     #si on arrête sur le premier élément ou la sentinelle à gauche
     #il n'existe pas d'élément dont la clé est < k
     if p._prev is None or p._prev._prev is None:
         return None
     #sinon, soit on s'est arrêté sur l'élément de clé k
     #et on doit prendre son précédent (le premier < devant k)
     #ou si l'élément de clé k n'existe pas, on est sur le
     #premier élément de clé < k
     if p._elem._key == k:
         p = p._prev
     return (p._elem._key, p._elem._value)
Exemplo n.º 9
0
 def find_range(self, start, stop):
     #si start est None, on prend start = Min
     if start is None:
         start, v = self.find_min()
     #on cherche l'élément de clé start
     #on arrête sur ce dernier ou sur le premier élément <
     p = self._T.SkipSearch(Map._Item(start))
     #si l'élément start n'existe pas, on est sur l'élément <
     #donc, on prend l'élément suivant
     if p._elem._key < start:
         p = p._next
     #tant qu'il y a des éléments dont la clé est < stop
     #on les rapporte dans l'itérateur
     while not (p._next is None) and (p._elem._key < stop):
         yield (p._elem._key, p._elem._value)
         p = p._next
 def find_le( self, k ):
     #return (key,value) where key <= k
     p = self._T.SkipSearch( Map._Item( k ) )
     if p._prev is None:
         return None
     return (p._elem._key,p._elem._value)
 def __init__( self, _MIN_VALUE, _MAX_VALUE ):
     self._T = SkipList( Map._Item( _MIN_VALUE, None ), Map._Item( _MAX_VALUE, None ) )
Exemplo n.º 12
0
 def __init__(self, _MIN_KEY=_MIN, _MAX_KEY=_MAX):
     self._T = SkipList(Map._Item(_MIN_KEY, None),
                        Map._Item(_MAX_KEY, None))