Class PyStringMap

All Implemented Interfaces:
Serializable, Traverseproc

public class PyStringMap extends AbstractDict implements Traverseproc
Special fast dict implementation for __dict__ instances. Allows interned String keys in addition to PyObject unlike PyDictionary.
See Also:
  • Constructor Details

    • PyStringMap

      public PyStringMap()
    • PyStringMap

      public PyStringMap(int capacity)
    • PyStringMap

      public PyStringMap(Map<Object,PyObject> map)
    • PyStringMap

      public PyStringMap(PyObject[] elements)
  • Method Details

    • getMap

      public ConcurrentMap<Object,PyObject> getMap()
      Specified by:
      getMap in class AbstractDict
    • fromkeys

      public static PyObject fromkeys(PyObject keys)
    • fromkeys

      public static PyObject fromkeys(PyObject keys, PyObject value)
    • __len__

      public int __len__()
      Description copied from class: PyObject
      Equivalent to the standard Python __len__ method. Part of the mapping discipline.
      Overrides:
      __len__ in class PyObject
      Returns:
      the length of the object
    • __nonzero__

      public boolean __nonzero__()
      Description copied from class: PyObject
      Equivalent to the standard Python __nonzero__ method. Returns whether of not a given PyObject is considered true.
      Overrides:
      __nonzero__ in class PyObject
    • __finditem__

      public PyObject __finditem__(String key)
      Description copied from class: PyObject
      A variant of the __finditem__ method which accepts a Java String as the key. By default, this method will call __finditem__(PyObject key) with the appropriate args. The only reason to override this method is for performance. Warning: key must be an interned string!!!!!!!!
      Overrides:
      __finditem__ in class PyObject
      Parameters:
      key - the key to lookup in this sequence - must be an interned string .
      Returns:
      the value corresponding to key or null if key is not found.
      See Also:
    • __finditem__

      public PyObject __finditem__(PyObject key)
      Description copied from class: PyObject
      Very similar to the standard Python __getitem__ method. Instead of throwing a KeyError if the item isn't found, this just returns null. Classes that wish to implement __getitem__ should override this method instead (with the appropriate semantics.
      Overrides:
      __finditem__ in class PyObject
      Parameters:
      key - the key to lookup in this container
      Returns:
      the value corresponding to key or null if key is not found
    • __getitem__

      public PyObject __getitem__(String key)
    • __getitem__

      public PyObject __getitem__(PyObject key)
      Description copied from class: PyObject
      Equivalent to the standard Python __getitem__ method. This method should not be overridden. Override the __finditem__ method instead.
      Overrides:
      __getitem__ in class PyObject
      Parameters:
      key - the key to lookup in this container.
      Returns:
      the value corresponding to that key.
      See Also:
    • __iter__

      public PyObject __iter__()
      Description copied from class: PyObject
      Return an iterator that is used to iterate the element of this sequence. From version 2.2, this method is the primary protocol for looping over sequences.

      If a PyObject subclass should support iteration based in the __finditem__() method, it must supply an implementation of __iter__() like this:

       public PyObject __iter__() {
           return new PySequenceIter(this);
       }
       
      When iterating over a python sequence from java code, it should be done with code like this:
       for (PyObject item : seq.asIterable()) {
           // Do something with item
       }
       
      Overrides:
      __iter__ in class PyObject
    • __setitem__

      public void __setitem__(String key, PyObject value)
      Description copied from class: PyObject
      A variant of the __setitem__ method which accepts a String as the key. This String must be interned. By default, this will call __setitem__(PyObject key, PyObject value) with the appropriate args. The only reason to override this method is for performance.
      Overrides:
      __setitem__ in class PyObject
      Parameters:
      key - the key whose value will be set - must be an interned string .
      value - the value to set this key to
      See Also:
    • __setitem__

      public void __setitem__(PyObject key, PyObject value)
      Description copied from class: PyObject
      Equivalent to the standard Python __setitem__ method.
      Overrides:
      __setitem__ in class PyObject
      Parameters:
      key - the key whose value will be set
      value - the value to set this key to
    • __delitem__

      public void __delitem__(String key)
      Description copied from class: PyObject
      A variant of the __delitem__ method which accepts a String as the key. This String must be interned. By default, this will call __delitem__(PyObject key) with the appropriate args. The only reason to override this method is for performance.
      Overrides:
      __delitem__ in class PyObject
      Parameters:
      key - the key who will be removed - must be an interned string .
      See Also:
    • __delitem__

      public void __delitem__(PyObject key)
      Description copied from class: PyObject
      Equivalent to the standard Python __delitem__ method.
      Overrides:
      __delitem__ in class PyObject
      Parameters:
      key - the key to be removed from the container
    • clear

      public void clear()
      Remove all items from the dictionary.
      Specified by:
      clear in class AbstractDict
    • toString

      public String toString()
      Overrides:
      toString in class PyObject
    • __cmp__

      public int __cmp__(PyObject other)
      Description copied from class: PyObject
      Equivalent to the standard Python __cmp__ method.
      Overrides:
      __cmp__ in class PyObject
      Parameters:
      other - the object to compare this with.
      Returns:
      -1 if this<o; 0 if this==o; +1 if this>o; -2 if no comparison is implemented
    • has_key

      public boolean has_key(String key)
      Return true if the key exist in the dictionary.
    • has_key

      public boolean has_key(PyObject key)
      Specified by:
      has_key in class AbstractDict
    • __contains__

      public boolean __contains__(PyObject o)
      Description copied from class: PyObject
      Equivalent to the standard Python __contains__ method.
      Overrides:
      __contains__ in class PyObject
      Parameters:
      o - the element to search for in this container.
      Returns:
      the result of the search.
    • get

      public PyObject get(PyObject key, PyObject defaultObj)
      Return this[key] if the key exists in the mapping, defaultObj is returned otherwise.
      Specified by:
      get in class AbstractDict
      Parameters:
      key - the key to lookup in the mapping.
      defaultObj - the value to return if the key does not exists in the mapping.
    • get

      public PyObject get(PyObject key)
      Return this[key] if the key exists in the mapping, None is returned otherwise.
      Specified by:
      get in class AbstractDict
      Parameters:
      key - the key to lookup in the mapping.
    • copy

      public PyStringMap copy()
      Return a shallow copy of the dictionary.
      Specified by:
      copy in class AbstractDict
    • update

      public void update(PyObject other)
      Specified by:
      update in class AbstractDict
    • merge

      public void merge(PyObject other, boolean override)
      Merge another PyObject that supports keys() with this dict.
      Specified by:
      merge in class AbstractDict
      Parameters:
      other - a PyObject with a keys() method
      override - if true, the value from other is used on key-collision
    • mergeFromKeys

      public void mergeFromKeys(PyObject other, PyObject keys, boolean override)
      Merge another PyObject via its keys() method
      Specified by:
      mergeFromKeys in class AbstractDict
      Parameters:
      other - a PyObject with a keys() method
      keys - the result of other's keys() method
      override - if true, the value from other is used on key-collision
    • mergeFromSeq

      public void mergeFromSeq(PyObject other, boolean override)
      Merge any iterable object producing iterable objects of length 2 into this dict.
      Specified by:
      mergeFromSeq in class AbstractDict
      Parameters:
      other - another PyObject
      override - if true, the value from other is used on key-collision
    • setdefault

      public PyObject setdefault(PyObject key)
      Return this[key] if the key exist, otherwise insert key with a None value and return None.
      Specified by:
      setdefault in class AbstractDict
      Parameters:
      key - the key to lookup in the mapping.
    • setdefault

      public PyObject setdefault(PyObject key, PyObject failobj)
      Return this[key] if the key exist, otherwise insert key with the value of failobj and return failobj
      Specified by:
      setdefault in class AbstractDict
      Parameters:
      key - the key to lookup in the mapping.
      failobj - the default value to insert in the mapping if key does not already exist.
    • popitem

      public PyObject popitem()
      Return a random (key, value) tuple pair and remove the pair from the mapping.
      Specified by:
      popitem in class AbstractDict
    • pop

      public PyObject pop(PyObject key)
      Specified by:
      pop in class AbstractDict
    • pop

      public PyObject pop(PyObject key, PyObject failobj)
      Specified by:
      pop in class AbstractDict
    • items

      public PyList items()
      Return a copy of the mappings list of (key, value) tuple pairs.
      Specified by:
      items in class AbstractDict
    • keys

      public PyList keys()
      Return a copy of the mappings list of keys. We have to take in account that we could be storing String or PyObject objects
      Specified by:
      keys in class AbstractDict
    • values

      public PyList values()
      Return a copy of the mappings list of values.
      Specified by:
      values in class AbstractDict
    • iteritems

      public PyObject iteritems()
      return an iterator over (key, value) pairs
      Specified by:
      iteritems in class AbstractDict
    • iterkeys

      public PyObject iterkeys()
      return an iterator over the keys
      Specified by:
      iterkeys in class AbstractDict
    • itervalues

      public PyObject itervalues()
      return an iterator over the values
      Specified by:
      itervalues in class AbstractDict
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class PyObject
    • isMappingType

      public boolean isMappingType()
      Overrides:
      isMappingType in class PyObject
    • isSequenceType

      public boolean isSequenceType()
      Overrides:
      isSequenceType in class PyObject
    • pyKeySet

      public Set<PyObject> pyKeySet()
      Specified by:
      pyKeySet in class AbstractDict
    • entrySet

      public Set entrySet()
      Specified by:
      entrySet in class AbstractDict
      See Also:
    • viewkeys

      public PyObject viewkeys()
      Returns a dict_keys on the dictionary's keys
      Overrides:
      viewkeys in class AbstractDict
    • viewitems

      public PyObject viewitems()
      Returns a dict_items on the dictionary's items
      Overrides:
      viewitems in class AbstractDict
    • viewvalues

      public PyObject viewvalues()
      Returns a dict_values on the dictionary's values
      Overrides:
      viewvalues in class AbstractDict
    • traverse

      public int traverse(Visitproc visit, Object arg)
      Description copied from interface: Traverseproc
      Traverses all directly contained PyObjects. Like in CPython, arg must be passed unmodified to visit as its second parameter. If Visitproc.visit(PyObject, Object) returns nonzero, this return value must be returned immediately by traverse. Visitproc.visit(PyObject, Object) must not be called with a null PyObject-argument.
      Specified by:
      traverse in interface Traverseproc
    • refersDirectlyTo

      public boolean refersDirectlyTo(PyObject ob)
      Description copied from interface: Traverseproc
      Optional operation. Should only be implemented if it is more efficient than calling Traverseproc.traverse(Visitproc, Object) with a visitproc that just watches out for ob. Must return false if ob is null.
      Specified by:
      refersDirectlyTo in interface Traverseproc