Class FieldNameIterator

java.lang.Object
org.python.core.PyObject
org.python.core.stringlib.FieldNameIterator
All Implemented Interfaces:
Serializable, Traverseproc

public class FieldNameIterator extends PyObject implements Traverseproc
This class is an implementation of the iterator object returned by str._formatter_field_name_split() and unicode._formatter_field_name_split(). The function _formatter_field_name_split() returns a pair (tuple) consisting of a head element and an instance of this iterator. The constructor of this class effectively implements that function, since as well as "being" the iterator, the object has an extra method head() to return the required first member of the pair.
See Also:
  • Field Details

    • TYPE

      public static final PyType TYPE
  • Constructor Details

    • FieldNameIterator

      public FieldNameIterator(String fieldName, boolean bytes)
      Create an iterator for the parts of this field name (and extract the head name field, which may be an empty string). According to the Python Standard Library documentation, a replacement field name has the structure:
       field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
       arg_name          ::=  [identifier | integer]
       attribute_name    ::=  identifier
       element_index     ::=  integer | index_string
       
      The object is used from PyUnicode and from PyString, and we have to signal which it is, so that returned values may match in type.
      Parameters:
      fieldName - the field name as UTF-16
      bytes - true if elements returned should be PyString, else PyUnicode
    • FieldNameIterator

      public FieldNameIterator(PyString fieldNameObject)
      Create an iterator for the parts of this field name (and extract the head name field, which may be an empty string).
      Parameters:
      fieldNameObject -
  • Method Details

    • __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
    • __iternext__

      public PyObject __iternext__()
      Description copied from class: PyObject
      Return the next element of the sequence that this is an iterator for. Returns null when the end of the sequence is reached.
      Overrides:
      __iternext__ in class PyObject
    • head

      public Object head()
      Returns:
      the isolated head object from the field name.
    • pyHead

      public PyObject pyHead()
      Return the head object from the field name, as PyInteger, PyString or PyUnicode.
      Returns:
      the isolated head object from the field name.
    • isBytes

      public final boolean isBytes()
      If originally given a PyString, the iterator must return PyString not PyUnicode.
      Returns:
      true if originally given a PyString
    • nextChunk

      public FieldNameIterator.Chunk nextChunk()
      Return the next "chunk" of the field name (or return null if ended). A chunk is a 2-tuple describing:
      1. whether the chunk is an attribute name,
      2. the name or number (as a String or Integer) for accessing the value.
      Returns:
      next element of the field name
    • 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) throws UnsupportedOperationException
      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
      Throws:
      UnsupportedOperationException