# Spec Namer
Extends the input stream by a second field which names the elements.

Extends | Pipe
All Extended | Pipe
Defined in | <seqan/pipe.h>
Signature | `template <typename TInput, typename TCompare> class Pipe<TInput, Namer<TCompare> >;`

## Template Parameters

`TInput` | The type of the pipeline module this module reads from.
`TCompare` | A binary function (see STL's `binary_function`) with result type `int`. Should return `0` if and only if two elements are equal.

## Member Function Overview

- `Pipe::Pipe(in[, comp]);`
  Constructor

### Member Functions Inherited From Pipe

- `Pipe`

## Interface Function Overview

### Interface Functions Inherited From Pipe

- `assign`
- `atEnd`
- `beginRead`
- `endRead`
- `front`
- `length`
- `pop`

## Interface Metafunction Overview

### Interface Metafunctions Inherited From Pipe

- `Size`
- `Value`

## Detailed Description

The output type is a Pair of input type and size type (i.e. `Pair<Value<TInput>::Type, Size<TInput>::Type>`).

The first output field is the original input stream.

The second output field is the name. This field begins with 0 and increases by 1 for every distinct element. Two elements gets the same name, if and only if they are equal.

## Member Functions Detail

### `Pipe::Pipe(in[, comp]);`

Constructor

#### Parameters

`in` | Reference to an input pipe.
`comp` | A `TCompare` object (copied).

#### Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.

#### Dox Sources

    /*!
     * @class Namer
     *
     * @extends Pipe
     *
     * @headerfile <seqan/pipe.h>
     *
     * @brief Extends the input stream by a second field which names the elements.
     *
     * @signature template <typename TInput, typename TCompare> class Pipe<TInput,
     *            Namer<TCompare> >;
     *
     * @tparam TInput The type of the pipeline module this module reads from.
     * @tparam TCompare A binary function (see STL's <tt>binary_function</tt>) with
     *                  result type <tt>int</tt>. Should return <tt>0</tt> if and
     *                  only if two elements are equal.
     *
     * The output type is a Pair of input type and size type (i.e.
     * <tt>Pair&lt;Value&lt;TInput&gt;::Type, Size&lt;TInput&gt;::Type&gt;</tt>).
     *
     * The first output field is the original input stream.
     *
     * The second output field is the name. This field begins with 0 and increases
     * by 1 for every distinct element. Two elements gets the same name, if and only
     * if they are equal.
     *
     * @fn Namer::Pipe
     *
     * @brief Constructor
     *
     * @signature Pipe::Pipe(in[, comp]);
     *
     * @param[in] in Reference to an input pipe.
     * @param[in] comp A <tt>TCompare</tt> object (copied).
     */