# Concept SegmentableConcept
A concept for containers that can be used as the host of a segment.

Extends | ContainerConcept
All Extended | AssignableConcept, ContainerConcept, DestructibleConcept
Defined in | <seqan/sequence.h>
Signature | `concept Segmentable;`

## Member Function Overview

### Member Functions Inherited From AssignableConcept

- `operator=`

## Interface Function Overview

- `TInfix infix(s, beginPos, endPos);`
  Returns the infix of a Segmentable type.
- `TInfix infixWithLength(s, beginPos, len);`
  Returns the infix of a Segmentable type.
- `TPrefix prefix(s, endPos);`
  Returns the prefix of a Segmentable type.
- `TSuffix suffix(s, beginPos);`
  Returns the suffix of a Segmentable type.

### Interface Functions Inherited From AssignableConcept

- `assign`
- `move`
- `set`

### Interface Functions Inherited From ContainerConcept

- `append`
- `appendValue`
- `begin`
- `directionIterator`
- `empty`
- `end`
- `getObjectId`
- `length`
- `moveValue`
- `shrinkToFit`
- `swap`
- `write`
- `writeValue`

## Interface Metafunction Overview

- `Infix<TSeq>::Type`
  Returns infix type in a flattening fashion.
- `Prefix<TSeq>::Type`
  Return prefix type in a flattening fashion.
- `Suffix<TSeq>::Type`
  Returns suffix type in a flattening fashion.

### Interface Metafunctions Inherited From ContainerConcept

- `DefaultGetIteratorSpec`
- `DefaultIteratorSpec`
- `Difference`
- `DirectionIterator`
- `GetValue`
- `Iterator`
- `Position`
- `Reference`
- `Size`
- `Value`

## Interface Functions Detail

### `TInfix infix(s, beginPos, endPos);`

Returns the infix of a Segmentable type.

#### Parameters

`s` | Segmentable sequence to return the infix for (type `TSeq`).
`beginPos` | Begin position must be convertible to `Position<TSeq>::Type`.
`endPos` | End position must be convertible to `Position<TSeq>::Type`.

#### Data Races

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

### `TInfix infixWithLength(s, beginPos, len);`

Returns the infix of a Segmentable type.

#### Parameters

`s` | Segmentable sequence to return the infix for (type `TSeq`).
`beginPos` | Begin position must be convertible to `Position<TSeq>::Type`.
`len` | Length of the prefix, must be convertible to `Size<TSeq>::Type`.

Equivalent to `infix(s, beginPos, beginPos + len)`.

#### Data Races

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

### `TPrefix prefix(s, endPos);`

Returns the prefix of a Segmentable type.

#### Parameters

`s` | Segmentable sequence to return the prefix for (type `TSeq`).
`endPos` | End position must be convertible to `Position<TSeq>::Type`.

#### Returns

`TPrefix` | The prefix of length `endPos`. Type as returned by Prefix for TSeq.

#### Data Races

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

### `TSuffix suffix(s, beginPos);`

Returns the suffix of a Segmentable type.

#### Parameters

`s` | The segmentable type to get the suffix of.
`beginPos` | Begin position must be convertible to `Position<TSeq>::Type`.

#### Returns

`TSuffix` | The suffix type as returned by Suffix.

#### Data Races

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

## Interface Metafunctions Detail

### `Infix<TSeq>::Type`

Returns infix type in a flattening fashion.

#### Template Parameters

`TSeq` | The segmentable sequence type to get infix type for.

#### Returns

`Type` | The infix type.

The infix any segment is an infix.

### `Prefix<TSeq>::Type`

Return prefix type in a flattening fashion.

#### Template Parameters

`TSeq` | The segmentable sequence type to get prefix type for.

#### Returns

`Type` | The prefix type.

The prefix type of a prefix is a suffix, the prefix of any other segment type is an infix.

### `Suffix<TSeq>::Type`

Returns suffix type in a flattening fashion.

#### Template Parameters

`TSeq` | The segmentable sequence type to get suffix type for.

#### Returns

`Type` | The suffix type.

The suffix type of a suffix is a suffix, the suffix of any other segment type is an infix.

#### Dox Sources

    /*!
     * @concept SegmentableConcept
     *
     * @headerfile <seqan/sequence.h>
     *
     * @extends ContainerConcept
     *
     * @brief A concept for containers that can be used as the host of a @link
     *        Segment segment @endlink.
     * @brief Returns prefix type in a infix fashion.
     *
     * @signature concept Segmentable;
     *
     * @mfn SegmentableConcept#Prefix
     *
     * @brief Return prefix type in a flattening fashion.
     *
     * @signature Prefix<TSeq>::Type
     *
     * @tparam TSeq The segmentable sequence type to get prefix type for.
     *
     * @return Type The prefix type.
     *
     * The prefix type of a prefix is a suffix, the prefix of any other segment type
     * is an infix.
     *
     * @mfn SegmentableConcept#Infix
     *
     * @brief Returns infix type in a flattening fashion.
     *
     * @signature Infix<TSeq>::Type
     *
     * @tparam TSeq The segmentable sequence type to get infix type for.
     *
     * @return Type The infix type.
     *
     * The infix any segment is an infix.
     *
     * @mfn SegmentableConcept#Suffix
     *
     * @brief Returns suffix type in a flattening fashion.
     *
     * @signature Suffix<TSeq>::Type
     *
     * @tparam TSeq The segmentable sequence type to get suffix type for.
     *
     * @return Type The suffix type.
     *
     * The suffix type of a suffix is a suffix, the suffix of any other segment type
     * is an infix.
     *
     * @fn SegmentableConcept#prefix
     *
     * @brief Returns the prefix of a Segmentable type.
     *
     * @signature TPrefix prefix(s, endPos);
     *
     * @param[in] s Segmentable sequence to return the prefix for (type
     *              <tt>TSeq</tt>).
     * @param[in] endPos End position must be convertible to
     *                   <tt>Position&lt;TSeq&gt;::Type</tt>.
     *
     * @return TPrefix The prefix of length <tt>endPos</tt>. Type as returned by
     *                 @link SegmentableConcept#Prefix @endlink for TSeq.
     *
     * @fn SegmentableConcept#infixWithLength
     *
     * @brief Returns the infix of a Segmentable type.
     *
     * @signature TInfix infixWithLength(s, beginPos, len);
     *
     * @param[in] s Segmentable sequence to return the infix for (type
     *              <tt>TSeq</tt>).
     * @param[in] beginPos Begin position must be convertible to
     *                     <tt>Position&lt;TSeq&gt;::Type</tt>.
     * @param[in] len Length of the prefix, must be convertible to
     *                <tt>Size&lt;TSeq&gt;::Type</tt>.
     *
     * Equivalent to <tt>infix(s, beginPos, beginPos + len)</tt>.
     *
     * @fn SegmentableConcept#infix
     *
     * @brief Returns the infix of a Segmentable type.
     *
     * @signature TInfix infix(s, beginPos, endPos);
     *
     * @param[in] s Segmentable sequence to return the infix for (type
     *              <tt>TSeq</tt>).
     * @param[in] beginPos Begin position must be convertible to
     *                     <tt>Position&lt;TSeq&gt;::Type</tt>.
     * @param[in] endPos End position must be convertible to
     *                   <tt>Position&lt;TSeq&gt;::Type</tt>.
     *
     * @fn SegmentableConcept#suffix
     *
     * @brief Returns the suffix of a Segmentable type.
     *
     * @signature TSuffix suffix(s, beginPos);
     *
     * @param[in] s The segmentable type to get the suffix of.
     * @param[in] beginPos Begin position must be convertible to
     *                     <tt>Position&lt;TSeq&gt;::Type</tt>.
     *
     * @return TSuffix The suffix type as returned by @link
     *                 SegmentableConcept#Suffix @endlink.
     */