# Class Triple
Store three arbitrary object.

Implements | ComparableConcept, LessThanComparableConcept
All Subcl's | PackedTriple
All Impl'd | ComparableConcept, EqualityComparableConcept, LessThanComparableConcept
Defined in | <seqan/basic.h>
Signature | `template <typename T1, typename T3, typename T3[, typename TSpec]> class Triple;`

## Template Parameters

`T1` | Type of first object.
`T2` | Type of second object.
`T3` | Type of third object.
`TSpec` | Tag for specialization (Default: `void`).

## Member Function Overview

- `Triple::Triple(), Triple::Triple(other), Triple::Triple(x1, x2, x3)`
  Default and copy construction and construction with three objects.

### Member Functions Inherited From ComparableConcept

- `operator>`

### Member Functions Inherited From EqualityComparableConcept

- `operator!=`
- `operator==`

### Member Functions Inherited From LessThanComparableConcept

- `operator<`

## Interface Function Overview

- `void assignValueI1(triple, val);`
  Set first entry of a triple.
- `void assignValueI2(triple, val);`
  Set second entry of a triple.
- `void assignValueI3(triple, val);`
  Set third entry of a triple.
- `T1 getValue(triple);`
  The get-value of the Triple's first entry.
- `T2 getValue(triple);`
  The get-value of the Triple's second entry.
- `T3 getValue(triple);`
  The get-value of the Triple's third entry.
- `void setValueI1(triple, val);`
  Set first entry of a triple.
- `void setValueI2(triple, val);`
  Set second entry of a triple.
- `void setValueI3(triple, val);`
  Set third entry of a triple.

### Interface Functions Inherited From ComparableConcept

- `operator<=`
- `operator>=`

## Interface Metafunction Overview

- `LENGTH<TTriple>::VALUE`
  Return (only type-depending) length of a triple: 3.
- `Spec<TTriple>::Type;`
  Return specialization tag.
- `Value<TTriple, I>::Type;`
  Return ith type of the triple.

## Member Variable Overview

- `T1 Triple::i1`
  First value of triple.
- `T2 Triple::i2`
  Second value of triple.
- `T3 Triple::i3`
  Third value of triple.

## Member Functions Detail

### `Triple::Triple() Triple::Triple(other) Triple::Triple(x1, x2, x3)`

Default and copy construction and construction with three objects.

#### Parameters

`other` | Other Triple object to copy from.
`x1` | First object.
`x2` | Second object.
`x3` | Third object.

`x1` must be convertible to T1, `x2` to T2, `x3` to T3. For example, a Triple of three `int` values can be constructed with three `double` values.

#### Data Races

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

## Interface Functions Detail

### `void assignValueI1(triple, val);`

Set first entry of a triple.

#### Parameters

`triple` | The triple to get entry from.
`val` | Set the value of the Triple's first entry.

#### Data Races

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

### `void assignValueI2(triple, val);`

Set second entry of a triple.

#### Parameters

`triple` | The triple to get entry from.
`val` | Set the value of the Triple's second entry.

#### Data Races

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

### `void assignValueI3(triple, val);`

Set third entry of a triple.

#### Parameters

`triple` | The triple to get entry from.
`val` | Set the value of the Triple's third entry.

#### Data Races

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

### `T1 getValue(triple);`

The get-value of the Triple's first entry.

#### Parameters

`triple` | The triple to get entry from.

#### Returns

`T1` | The first entry of the Triple.

#### Data Races

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

### `T2 getValue(triple);`

The get-value of the Triple's second entry.

#### Parameters

`triple` | The triple to get entry from.

#### Returns

`T2` | The second entry of the Triple.

#### Data Races

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

### `T3 getValue(triple);`

The get-value of the Triple's third entry.

#### Parameters

`triple` | The triple to get entry from.

#### Returns

`T3` | The third entry of the Triple.

#### Data Races

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

### `void setValueI1(triple, val);`

Set first entry of a triple.

#### Parameters

`triple` | The triple to get entry from.
`val` | Set the value of the Triple's first entry.

#### Data Races

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

### `void setValueI2(triple, val);`

Set second entry of a triple.

#### Parameters

`triple` | The triple to get entry from.
`val` | Set the value of the Triple's second entry.

#### Data Races

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

### `void setValueI3(triple, val);`

Set third entry of a triple.

#### Parameters

`triple` | The triple to get entry from.
`val` | Set the value of the Triple's third entry.

#### Data Races

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

## Interface Metafunctions Detail

### `LENGTH<TTriple>::VALUE`

Return (only type-depending) length of a triple: 3.

#### Template Parameters

`TTriple` | The Triple specialization to get the length of.

#### Returns

`VALUE` | Length of the triple (always 3).

### `Spec<TTriple>::Type;`

Return specialization tag.

#### Template Parameters

`TTriple` | The Triple specialization to query for the specialization tag.

#### Returns

`Type` | The specialization type.

### `Value<TTriple, I>::Type;`

Return ith type of the triple.

#### Template Parameters

`TTriple` | The Triple to return the `I`-th value of.
`I` | The index of the value to return, one of 1, 2, or 3.

## Member Variables Detail

### `T1 Triple::i1`

First value of triple.

signature T1 Triple::i1;

### `T2 Triple::i2`

Second value of triple.

signature T2 Triple::i2;

### `T3 Triple::i3`

Third value of triple.

signature T3 Triple::i3;

#### Dox Sources

    /*!
     * @class Triple
     *
     * @implements ComparableConcept
     * @implements LessThanComparableConcept
     *
     * @headerfile <seqan/basic.h>
     *
     * @brief Store three arbitrary object.
     *
     * @signature template <typename T1, typename T3, typename T3[, typename TSpec]>
     *            class Triple;
     *
     * @tparam T1 Type of first object.
     * @tparam T2 Type of second object.
     * @tparam T3 Type of third object.
     * @tparam TSpec Tag for specialization (Default: <tt>void</tt>).
     *
     * @mfn Triple#LENGTH
     *
     * @brief Return (only type-depending) length of a triple: 3.
     *
     * @signature LENGTH<TTriple>::VALUE
     *
     * @tparam TTriple The Triple specialization to get the length of.
     *
     * @return VALUE Length of the triple (always 3).
     *
     * @mfn Triple#Value
     *
     * @brief Return i<sup>th</sup> type of the triple.
     *
     * @signature Value<TTriple, I>::Type;
     *
     * @tparam TTriple The Triple to return the <tt>I</tt>-th value of.
     * @tparam I The index of the value to return, one of 1, 2, or 3.
     *
     * @mfn Triple#Spec
     *
     * @brief Return specialization tag.
     *
     * @signature Spec<TTriple>::Type;
     *
     * @tparam TTriple The Triple specialization to query for the specialization
     *                 tag.
     *
     * @return Type The specialization type.
     *
     * @fn Triple::Triple
     *
     * @brief Default and copy construction and construction with three objects.
     *
     * @signature Triple::Triple()
     * @signature Triple::Triple(other)
     * @signature Triple::Triple(x1, x2, x3)
     *
     * @param[in] other Other Triple object to copy from.
     * @param[in] x1 First object.
     * @param[in] x2 Second object.
     * @param[in] x3 Third object.
     *
     * <tt>x1</tt> must be convertible to T1, <tt>x2</tt> to T2, <tt>x3</tt> to T3.
     * For example, a Triple of three <tt>int</tt> values can be constructed with
     * three <tt>double</tt> values.
     *
     * @var T1 Triple::i1;
     *
     * @brief First value of triple.
     *
     * signature T1 Triple::i1;
     *
     * @var T2 Triple::i2;
     *
     * @brief Second value of triple.
     *
     * signature T2 Triple::i2;
     *
     * @var T3 Triple::i3;
     *
     * @brief Third value of triple.
     *
     * signature T3 Triple::i3;
     *
     * @fn Triple#getValueI1
     *
     * @brief The get-value of the Triple's first entry.
     *
     * @signature T1 getValue(triple);
     *
     * @param[in] triple The triple to get entry from.
     *
     * @return T1 The first entry of the Triple.
     *
     * @fn Triple#getValueI2
     *
     * @brief The get-value of the Triple's second entry.
     *
     * @signature T2 getValue(triple);
     *
     * @param[in] triple The triple to get entry from.
     *
     * @return T2 The second entry of the Triple.
     *
     * @fn Triple#getValueI3
     *
     * @brief The get-value of the Triple's third entry.
     *
     * @signature T3 getValue(triple);
     *
     * @param[in] triple The triple to get entry from.
     *
     * @return T3 The third entry of the Triple.
     *
     * @fn Triple#assignValueI1
     *
     * @brief Set first entry of a triple.
     *
     * @signature void assignValueI1(triple, val);
     *
     * @param[in] triple The triple to get entry from.
     * @param[in] val Set the value of the Triple's first entry.
     *
     * @fn Triple#assignValueI2
     *
     * @brief Set second entry of a triple.
     *
     * @signature void assignValueI2(triple, val);
     *
     * @param[in] triple The triple to get entry from.
     * @param[in] val Set the value of the Triple's second entry.
     *
     * @fn Triple#assignValueI3
     *
     * @brief Set third entry of a triple.
     *
     * @signature void assignValueI3(triple, val);
     *
     * @param[in] triple The triple to get entry from.
     * @param[in] val Set the value of the Triple's third entry.
     *
     * @fn Triple#setValueI1
     *
     * @brief Set first entry of a triple.
     *
     * @signature void setValueI1(triple, val);
     *
     * @param[in] triple The triple to get entry from.
     * @param[in] val Set the value of the Triple's first entry.
     *
     * @fn Triple#setValueI2
     *
     * @brief Set second entry of a triple.
     *
     * @signature void setValueI2(triple, val);
     *
     * @param[in] triple The triple to get entry from.
     * @param[in] val Set the value of the Triple's second entry.
     *
     * @fn Triple#setValueI3
     *
     * @brief Set third entry of a triple.
     *
     * @signature void setValueI3(triple, val);
     *
     * @param[in] triple The triple to get entry from.
     * @param[in] val Set the value of the Triple's third entry.
     */