# Spec AnnotationTreeIterator
Iterator of the annotation tree represetned by a FragmentStore.

Extends | Iter
All Extended | Iter
All Impl'd | IteratorAssociatedTypesConcept
Defined in | <seqan/store.h>
Signature | `template <typename TFragmentStore> class Iter<TFragmentStore, AnnotationTree<> >;`

## Template Parameters

`TFragmentStore` | The FragmentStore to iterate over.

## Member Function Overview

- `Iter::Iter();, Iter::Iter(store[, startInNode]);`
  Constructor

### Member Functions Inherited From Iter

- `Iter`

## Interface Function Overview

- `void assignValueByKey(it, key, value);`
  Add or update a key-value pair of the current annotation.
- `void clearValues(it);`
  Clear all key-value pairs of a given annotation.
- `TIter createLeftChild(it);`
  Create a new leftmost child of the current node and returns an iterator to it.
- `TIter createRightChild(it);`
  Creates a new rightmost child of the current node and returns an iterator to it.
- `TIter createSibling(it);`
  Creates a new right sibling of the current node and return an iterator to it.
- `TAnnotation getAnnotation(it);`
  Returns the current annotation.
- `TName getName(it);`
  Returns the identifier of the current annotation.
- `TName getParentName(it);`
  Returns the identifier of the parent node in the annotationt ree of the current annotation.
- `TSeq getType(it);`
  Returns the type name of the current annotation.
- `CharString getUniqueName(it);`
  Returns a unique name of the current annotation.
- `bool getValueByKey(it, key);, bool getValueByKey(value, it, key);`
  Retrieve a key's value in the current annotation.
- `bool goDown(it);`
  Move the iterator down to the leftmost child in the annotation tree.
- `void goNextUp(it);`
  Go to the next node in preorder DFS skipping the current node's subtree.
- `void goNextUp(it);`
  Go to the next node in preorder DFS skipping the subtrees of the current node and all of its siblings.
- `bool goRight(it);`
  Move the iterator right to the next sibling in the annotation tree.
- `void goRoot(it);`
  Move the iterator down to the tree root.
- `void goTo(it, annoId);`
  Moves the iterator to an arbitrary node giving its annotationId.
- `bool goUp(it);`
  Move the iterator down to the parent in the annotation tree.
- `bool isLastChild(it);`
  Returns a boolean value that indicates whether the current node is the last child.
- `bool isLeaf(it);`
  Return a boolean indicating whether the annotation is a leaf.
- `bool isRoot(it);`
  Return a boolean indicating whether the annotation is the root.
- `TIter nodeDown(it);`
  Returns a new iterator to the first child node of the current annotation in the annotation tree.
- `TIter nodeRight(it);`
  Returns a new iterator to the right sibling of the current annotation in the annotation tree.
- `TIter nodeUp(it);`
  Returns a new iterator to the parent node of the current annotation in the annotation tree.
- `void setName(it, name);`
  Sets the identifier of the current annotation.
- `void setType(it, typeName);`
  Sets the type name of the current annotation.

### Interface Functions Inherited From IteratorAssociatedTypesConcept

- `operator*`
- `value`
- `getValue`

## Interface Metafunction Overview

### Interface Metafunctions Inherited From Iter

- `Container`
- `IterComplementConst`
- `IterMakeConst`
- `Spec`

### Interface Metafunctions Inherited From IteratorAssociatedTypesConcept

- `Difference`
- `GetValue`
- `Pointer`
- `Reference`
- `Value`

## Detailed Description

This iterator can move down, right, and up in the tree and supports a preorder DFS traversal using the functions goBegin, goNext, and atEnd.

Preorder means that the iterator visits the node befor it visits its children.

To obtain the type of the AnnotationTreeIterator for a FragmentStore specializiation `TFragmentStore`, you can use the metafunction Iterator as follows: `Iterator<TFragmentStore>::Type`.

### Remarks

To access the annotation, the iterator points to, use getAnnotation. The annotation id is returned by value.

### Example

A new annotation iterator can be instantiated as follows:

    FragmentStore<> store;
    Iterator<FragmentStore<>, AnnotationTree<> >::Type it;
    it = begin(store, AnnotationTree<>());

Or shorter:

    FragmentStore<> store;
    Iterator<FragmentStore<>, AnnotationTree<> >::Type it(store);

## Member Functions Detail

### `Iter::Iter(); Iter::Iter(store[, startInNode]);`

Constructor

#### Parameters

`store` | The FragmentStore with the annotation tree to iterate.
`startInNode` | Annotation id of the ndoe the iterator should start at. Default: 0, the root node id.

The begin function can also be used to create a tree iterator that starts in the root node:

    FragmentStore<> store;
    Iterator<FragmentStore<>, AnnotationTree<> >::Type it;
    it = begin(store, AnnotationTree<>());

#### Data Races

Thread safety unknown!

## Interface Functions Detail

### `void assignValueByKey(it, key, value);`

Add or update a key-value pair of the current annotation.

#### Parameters

`it` | The AnnotationTreeIterator to
`key` | The key whose value should be changed. Type: ContainerConcept.
`value` | The value that should be assigned. Type: ContainerConcept.

#### Data Races

Thread safety unknown!

#### See Also

- clearValues
- getValueByKey

### `void clearValues(it);`

Clear all key-value pairs of a given annotation.

#### Parameters

`it` | The AnnotationTreeIterator to clear all key-value pairs of the current annotation.

#### Data Races

Thread safety unknown!

#### See Also

- assignValueByKey
- getValueByKey

### `TIter createLeftChild(it);`

Create a new leftmost child of the current node and returns an iterator to it.

#### Parameters

`it` | The AnnotationTreeIterator to create a left child for.

#### Returns

`TIter` | Iterator to the new child.

#### Data Races

Thread safety unknown!

#### See Also

- createRightChild
- createSibling

### `TIter createRightChild(it);`

Creates a new rightmost child of the current node and returns an iterator to it.

#### Parameters

`it` | The AnnotationTreeIterator that was just created.

#### Returns

`TIter` | Iterator to the new child.

#### Data Races

Thread safety unknown!

#### See Also

- createLeftChild
- createSibling

### `TIter createSibling(it);`

Creates a new right sibling of the current node and return an iterator to it.

#### Parameters

`it` | The AnnotationTreeIterator to create the sibling for.

#### Returns

`TIter` | Iterator to the new sibling.

#### Data Races

Thread safety unknown!

#### See Also

- createLeftChild
- createRightChild

### `TAnnotation getAnnotation(it);`

Returns the current annotation.

#### Parameters

`it` | The AnnotationTreeIterator to query for its annotation.

#### Returns

`TAnnotation` | A reference to the AnnotationStoreElement the iterator points to.

#### Data Races

Thread safety unknown!

### `TName getName(it);`

Returns the identifier of the current annotation.

#### Parameters

`it` | An AnnotationTreeIterator to query.

#### Returns

`TName` | The name of the current annotation. This is a reference to the corresponding position in annotationNameStore.

#### Data Races

Thread safety unknown!

#### See Also

- setName

### `TName getParentName(it);`

Returns the identifier of the parent node in the annotationt ree of the current annotation.

#### Parameters

`it` | The AnnotationTreeIterator to get the name for.

#### Returns

`TName` | The name of the parent of the current annotation. This is a reference to the corresponding value in annotationNameStore.

#### Data Races

Thread safety unknown!

### `TSeq getType(it);`

Returns the type name of the current annotation.

#### Parameters

`it` | The AnnotationTreeIterator to query for its type.

#### Returns

`The` | name of the current annotation, e.g. "exon" or "mRNA". This is a reference to an entry in annotationTypeStore.

#### Data Races

Thread safety unknown!

#### See Also

- setType

### `CharString getUniqueName(it);`

Returns a unique name of the current annotation.

#### Parameters

`it` | The AnnotationTreeIterator to query.

#### Returns

`CharString` | A unique name of the current annotation.

Some annotation file formats do not require that every annotation has a non-empty name. This function returns the name if non-emtpy and otherwise generates one using the type an id.

#### Data Races

Thread safety unknown!

#### See Also

- getName

### `bool getValueByKey(it, key); bool getValueByKey(value, it, key);`

Retrieve a key's value in the current annotation.

#### Parameters

`it` | The AnnotationTreeIterator for which to retrieve the key.
`key` | The key to get the value for.
`value` | The resulting value.

#### Data Races

Thread safety unknown!

#### See Also

- assignValueByKey
- clearValues

### `bool goDown(it);`

Move the iterator down to the leftmost child in the annotation tree.

#### Parameters

`it` | The AnnotationTreeIterator to move.

#### Returns

`bool` | `true` if the iterator could be moved and `false` otherwise.

#### Data Races

Thread safety unknown!

#### See Also

- goRight
- goUp

### `void goNextUp(it);`

Go to the next node in preorder DFS skipping the current node's subtree.

#### Parameters

`it` | The AnnotationTreeIterator to

#### Data Races

Thread safety unknown!

### `void goNextUp(it);`

Go to the next node in preorder DFS skipping the subtrees of the current node and all of its siblings.

#### Parameters

`it` | The AnnotationTreeIterator to

#### Data Races

Thread safety unknown!

### `bool goRight(it);`

Move the iterator right to the next sibling in the annotation tree.

#### Parameters

`it` | The AnnotationTreeIterator to move.

#### Returns

`bool` | `true` if the iterator could be moved and `false` otherwise.

#### Data Races

Thread safety unknown!

#### See Also

- goDown
- goUp

### `void goRoot(it);`

Move the iterator down to the tree root.

#### Parameters

`it` | The AnnotationTreeIterator to move.

#### Data Races

Thread safety unknown!

### `void goTo(it, annoId);`

Moves the iterator to an arbitrary node giving its annotationId.

#### Parameters

`it` | The AnnotationTreeIterator to move.
`annoId` | The id of the annotation to move to.

#### Data Races

Thread safety unknown!

### `bool goUp(it);`

Move the iterator down to the parent in the annotation tree.

#### Parameters

`it` | The AnnotationTreeIterator to move.

#### Returns

`bool` | `true` if the iterator could be moved and `false` otherwise.

#### Data Races

Thread safety unknown!

#### See Also

- goDown
- goRight

### `bool isLastChild(it);`

Returns a boolean value that indicates whether the current node is the last child.

#### Parameters

`it` | The AnnotationTreeIterator to query.

#### Data Races

Thread safety unknown!

### `bool isLeaf(it);`

Return a boolean indicating whether the annotation is a leaf.

#### Parameters

`it` | The AnnotationTreeIterator to query.

#### Data Races

Thread safety unknown!

### `bool isRoot(it);`

Return a boolean indicating whether the annotation is the root.

#### Parameters

`it` | The AnnotationTreeIterator to query.

#### Data Races

Thread safety unknown!

### `TIter nodeDown(it);`

Returns a new iterator to the first child node of the current annotation in the annotation tree.

#### Parameters

`it` | The AnnotationTreeIterator to query.

#### Returns

`TIter` | Iterator to the first child node of it.

#### Data Races

Thread safety unknown!

#### See Also

- nodeRight
- nodeUp

### `TIter nodeRight(it);`

Returns a new iterator to the right sibling of the current annotation in the annotation tree.

#### Parameters

`it` | The AnnotationTreeIterator to query.

#### Returns

`TIter` | Iterator to the right sibling of it.

#### Data Races

Thread safety unknown!

#### See Also

- nodeDown
- nodeUp

### `TIter nodeUp(it);`

Returns a new iterator to the parent node of the current annotation in the annotation tree.

#### Parameters

`it` | The AnnotationTreeIterator to query.

#### Returns

`TIter` | Iterator to the parent node.

#### Data Races

Thread safety unknown!

#### See Also

- nodeDown
- nodeRight

### `void setName(it, name);`

Sets the identifier of the current annotation.

#### Parameters

`it` | Iterator to the annotation to set the name for.
`name` | The new identifier of the annotation pointed to by it.

#### Data Races

Thread safety unknown!

#### See Also

- getName

### `void setType(it, typeName);`

Sets the type name of the current annotation.

#### Parameters

`it` | The iterator to the annotation to set the type name for.
`typeName` | The name of the type (e.g. "exon" or "mRNA"). Type: ContainerConcept.

#### Data Races

Thread safety unknown!

#### See Also

- getType

#### Dox Sources

    /*!
     * @class AnnotationTreeIterator
     *
     * @extends Iter
     *
     * @headerfile <seqan/store.h>
     *
     * @brief Iterator of the annotation tree represetned by a @link FragmentStore
     *        @endlink.
     *
     * @signature template <typename TFragmentStore> class Iter<TFragmentStore,
     *            AnnotationTree<> >;
     *
     * @tparam TFragmentStore The FragmentStore to iterate over.
     *
     * This iterator can move @link AnnotationTreeIterator#goDown down @endlink,
     * @link AnnotationTreeIterator#goRight right @endlink, and @link
     * AnnotationTreeIterator#goUp up @endlink in the tree and supports a preorder
     * DFS traversal using the functions @link
     * RootedRandomAccessIteratorConcept#goBegin @endlink, @link
     * InputIteratorConcept#goNext @endlink, and @link RootedIteratorConcept#atEnd
     * @endlink.
     *
     * Preorder means that the iterator visits the node befor it visits its
     * children.
     *
     * To obtain the type of the AnnotationTreeIterator for a FragmentStore
     * specializiation <tt>TFragmentStore</tt>, you can use the metafunction @link
     * ContainerConcept#Iterator Iterator @endlink as follows:
     * <tt>Iterator&lt;TFragmentStore&gt;::Type</tt>.
     *
     * @section Remarks
     *
     * To access the annotation, the iterator points to, use @link
     * AnnotationTreeIterator#getAnnotation @endlink. The annotation id is returned
     * by @link IteratorAssociatedTypesConcept#value @endlink.
     *
     * @section Example
     *
     * <img src="AnnotationTree.png" title="Typical annotation tree hierarchy." />
     *
     * A new annotation iterator can be instantiated as follows:
     *
     * @code{.cpp}
     * FragmentStore<> store;
     * Iterator<FragmentStore<>, AnnotationTree<> >::Type it;
     * it = begin(store, AnnotationTree<>());
     * @endcode
     *
     *
     * Or shorter:
     *
     * @code{.cpp}
     * FragmentStore<> store;
     * Iterator<FragmentStore<>, AnnotationTree<> >::Type it(store);
     * @endcode
     *
     *
     * @fn AnnotationTreeIterator::AnnotationTreeIterator
     *
     * @brief Constructor
     *
     * @signature Iter::Iter();
     * @signature Iter::Iter(store[, startInNode]);
     *
     * @param[in] store The FragmentStore with the annotation tree to iterate.
     * @param[in] startInNode Annotation id of the ndoe the iterator should start
     *                        at. Default: 0, the root node id.
     *
     * The @link ContainerConcept#begin @endlink function can also be used to create
     * a tree iterator that starts in the root node:
     *
     * @code{.cpp}
     * FragmentStore<> store;
     * Iterator<FragmentStore<>, AnnotationTree<> >::Type it;
     * it = begin(store, AnnotationTree<>());
     * @endcode
     *
     *
     * @fn AnnotationTreeIterator#getAnnotation
     *
     * @brief Returns the current annotation.
     *
     * @signature TAnnotation getAnnotation(it);
     *
     * @param[in] it The AnnotationTreeIterator to query for its annotation.
     *
     * @return TAnnotation A reference to the AnnotationStoreElement the iterator
     *                     points to.
     *
     * @fn AnnotationTreeIterator#getName
     *
     * @brief Returns the identifier of the current annotation.
     *
     * @signature TName getName(it);
     *
     * @param[in] it An AnnotationTreeIterator to query.
     *
     * @return TName The name of the current annotation. This is a reference to the
     *               corresponding position in @link
     *               FragmentStore::annotationNameStore @endlink.
     *
     * @see AnnotationTreeIterator#setName
     *
     * @fn AnnotationTreeIterator#setName
     *
     * @brief Sets the identifier of the current annotation.
     *
     * @signature void setName(it, name);
     *
     * @param[in,out] it Iterator to the annotation to set the name for.
     * @param[in] name The new identifier of the annotation pointed to by it.
     *
     * @see AnnotationTreeIterator#getName
     *
     * @fn AnnotationTreeIterator#getParentName
     *
     * @brief Returns the identifier of the parent node in the annotationt ree of
     *        the current annotation.
     *
     * @signature TName getParentName(it);
     *
     * @param[in] it The AnnotationTreeIterator to get the name for.
     *
     * @return TName The name of the parent of the current annotation. This is a
     *               reference to the corresponding value in @link
     *               FragmentStore::annotationNameStore @endlink.
     *
     * @fn AnnotationTreeIterator#getType
     *
     * @brief Returns the type name of the current annotation.
     *
     * @signature TSeq getType(it);
     *
     * @param[in] it The AnnotationTreeIterator to query for its type.
     *
     * @return The name of the current annotation, e.g. "exon" or "mRNA". This is a
     *             reference to an entry in @link FragmentStore::annotationTypeStore
     *             @endlink.
     *
     * @see AnnotationTreeIterator#setType
     *
     * @fn AnnotationTreeIterator#setType
     *
     * @brief Sets the type name of the current annotation.
     *
     * @signature void setType(it, typeName);
     *
     * @param[in,out] it The iterator to the annotation to set the type name for.
     * @param[in] typeName The name of the type (e.g. "exon" or "mRNA"). Type: @link
     *                     ContainerConcept @endlink.
     *
     * @see AnnotationTreeIterator#getType
     *
     * @fn AnnotationTreeIterator#getUniqueName
     *
     * @brief Returns a unique name of the current annotation.
     *
     * @signature CharString getUniqueName(it);
     *
     * @param[in] it The AnnotationTreeIterator to query.
     *
     * @return CharString A unique name of the current annotation.
     *
     * Some annotation file formats do not require that every annotation has a non-
     * empty name. This function returns the name if non-emtpy and otherwise
     * generates one using the type an id.
     *
     * @see AnnotationTreeIterator#getName
     *
     * @fn AnnotationTreeIterator#clearValues
     *
     * @brief Clear all key-value pairs of a given annotation.
     *
     * @signature void clearValues(it);
     *
     * @param[in,out] it The AnnotationTreeIterator to clear all key-value pairs of
     *                   the current annotation.
     *
     * @see AnnotationTreeIterator#assignValueByKey
     * @see AnnotationTreeIterator#getValueByKey
     *
     * @fn AnnotationTreeIterator#assignValueByKey
     *
     * @brief Add or update a key-value pair of the current annotation.
     *
     * @signature void assignValueByKey(it, key, value);
     *
     * @param[in,out] it The AnnotationTreeIterator to
     * @param[in] key The key whose value should be changed. Type: @link
     *                ContainerConcept @endlink.
     * @param[in] value The value that should be assigned. Type: @link
     *                  ContainerConcept @endlink.
     *
     * @see AnnotationTreeIterator#clearValues
     * @see AnnotationTreeIterator#getValueByKey
     *
     * @fn AnnotationTreeIterator#getValueByKey
     *
     * @brief Retrieve a key's value in the current annotation.
     *
     * @signature bool getValueByKey(it, key);
     * @signature bool getValueByKey(value, it, key);
     *
     * @param[in] it The AnnotationTreeIterator for which to retrieve the key.
     * @param[in] key The key to get the value for.
     * @param[out] value The resulting value.
     *
     * @see AnnotationTreeIterator#clearValues
     * @see AnnotationTreeIterator#assignValueByKey
     *
     * @fn AnnotationTreeIterator#goTo
     *
     * @brief Moves the iterator to an arbitrary node giving its annotationId.
     *
     * @signature void goTo(it, annoId);
     *
     * @param[in,out] it The AnnotationTreeIterator to move.
     * @param[in] annoId The id of the annotation to move to.
     *
     * @fn AnnotationTreeIterator#goNextRight
     *
     * @brief Go to the next node in preorder DFS skipping the current node's
     *        subtree.
     *
     * @signature void goNextUp(it);
     *
     * @param[in,out] it The AnnotationTreeIterator to
     *
     * @fn AnnotationTreeIterator#goNextUp
     *
     * @brief Go to the next node in preorder DFS skipping the subtrees of the
     *        current node and all of its siblings.
     *
     * @signature void goNextUp(it);
     *
     * @param[in,out] it The AnnotationTreeIterator to
     *
     * @fn AnnotationTreeIterator#goRoot
     *
     * @brief Move the iterator down to the tree root.
     *
     * @signature void goRoot(it);
     *
     * @param[in,out] it The AnnotationTreeIterator to move.
     *
     * @fn AnnotationTreeIterator#goUp
     *
     * @brief Move the iterator down to the parent in the annotation tree.
     *
     * @signature bool goUp(it);
     *
     * @param[in,out] it The AnnotationTreeIterator to move.
     *
     * @return bool <tt>true</tt> if the iterator could be moved and <tt>false</tt>
     *              otherwise.
     *
     * @see AnnotationTreeIterator#goDown
     * @see AnnotationTreeIterator#goRight
     *
     * @fn AnnotationTreeIterator#goDown
     *
     * @brief Move the iterator down to the leftmost child in the annotation tree.
     *
     * @signature bool goDown(it);
     *
     * @param[in,out] it The AnnotationTreeIterator to move.
     *
     * @return bool <tt>true</tt> if the iterator could be moved and <tt>false</tt>
     *              otherwise.
     *
     * @see AnnotationTreeIterator#goUp
     * @see AnnotationTreeIterator#goRight
     *
     * @fn AnnotationTreeIterator#goRight
     *
     * @brief Move the iterator right to the next sibling in the annotation tree.
     *
     * @signature bool goRight(it);
     *
     * @param[in,out] it The AnnotationTreeIterator to move.
     *
     * @return bool <tt>true</tt> if the iterator could be moved and <tt>false</tt>
     *              otherwise.
     *
     * @see AnnotationTreeIterator#goUp
     * @see AnnotationTreeIterator#goDown
     *
     * @fn AnnotationTreeIterator#nodeUp
     *
     * @brief Returns a new iterator to the parent node of the current annotation in
     *        the annotation tree.
     *
     * @signature TIter nodeUp(it);
     *
     * @param[in] it The AnnotationTreeIterator to query.
     *
     * @return TIter Iterator to the parent node.
     *
     * @see AnnotationTreeIterator#nodeDown
     * @see AnnotationTreeIterator#nodeRight
     *
     * @fn AnnotationTreeIterator#nodeDown
     *
     * @brief Returns a new iterator to the first child node of the current
     *        annotation in the annotation tree.
     *
     * @signature TIter nodeDown(it);
     *
     * @param[in] it The AnnotationTreeIterator to query.
     *
     * @return TIter Iterator to the first child node of it.
     *
     * @see AnnotationTreeIterator#nodeUp
     * @see AnnotationTreeIterator#nodeRight
     *
     * @fn AnnotationTreeIterator#nodeRight
     *
     * @brief Returns a new iterator to the right sibling of the current annotation
     *        in the annotation tree.
     *
     * @signature TIter nodeRight(it);
     *
     * @param[in] it The AnnotationTreeIterator to query.
     *
     * @return TIter Iterator to the right sibling of it.
     *
     * @see AnnotationTreeIterator#nodeUp
     * @see AnnotationTreeIterator#nodeDown
     *
     * @fn AnnotationTreeIterator#createLeftChild
     *
     * @brief Create a new leftmost child of the current node and returns an
     *        iterator to it.
     *
     * @signature TIter createLeftChild(it);
     *
     * @param[in,out] it The AnnotationTreeIterator to create a left child for.
     *
     * @return TIter Iterator to the new child.
     *
     * @see AnnotationTreeIterator#createRightChild
     * @see AnnotationTreeIterator#createSibling
     *
     * @fn AnnotationTreeIterator#createRightChild
     *
     * @brief Creates a new rightmost child of the current node and returns an
     *        iterator to it.
     *
     * @signature TIter createRightChild(it);
     *
     * @param[in,out] it The AnnotationTreeIterator that was just created.
     *
     * @return TIter Iterator to the new child.
     *
     * @see AnnotationTreeIterator#createLeftChild
     * @see AnnotationTreeIterator#createSibling
     *
     * @fn AnnotationTreeIterator#createSibling
     *
     * @brief Creates a new right sibling of the current node and return an iterator
     *        to it.
     *
     * @signature TIter createSibling(it);
     *
     * @param[in] it The AnnotationTreeIterator to create the sibling for.
     *
     * @return TIter Iterator to the new sibling.
     *
     * @see AnnotationTreeIterator#createLeftChild
     * @see AnnotationTreeIterator#createRightChild
     *
     * @fn AnnotationTreeIterator#isRoot
     *
     * @brief Return a boolean indicating whether the annotation is the root.
     *
     * @signature bool isRoot(it);
     *
     * @param[in] it The AnnotationTreeIterator to query.
     *
     * @fn AnnotationTreeIterator#isLeaf
     *
     * @brief Return a boolean indicating whether the annotation is a leaf.
     *
     * @signature bool isLeaf(it);
     *
     * @param[in] it The AnnotationTreeIterator to query.
     *
     * @fn AnnotationTreeIterator#isLastChild
     *
     * @brief Returns a boolean value that indicates whether the current node is the
     *        last child.
     *
     * @signature bool isLastChild(it);
     *
     * @param[in] it The AnnotationTreeIterator to query.
     */