# Extents

## basic_extents<size_type>

#### Description

The template class `basic_extents` specifies dimension extents of a tensor instance.

#### Example

    #include <boost/numeric/ublas/tensor/extents.hpp>

    int main () {
        using namespace boost::numeric::ublas;
        shape s{4,3,2};
        for (auto i = 0u; i < s.size(); ++i) {
            std::cout << s.at(i) << std::endl;
        }
    }

#### Definition

Defined in the header tensor/extents.hpp.

#### Public base classes

None.

#### Specialization

`using shape = basic_extents<std::size_t>`

#### Template parameters

Parameter | Description
--- | ---
`size_type` | Unsigned integer type.

#### Member types

Member type | Description
--- | ---
`value_type` | Type `size_type` of the extents.
`size_type` | Unsigned integer such as `std::size_t`.
`reference` | Reference type which is `value_type&`.
`const_reference` | Constant reference type which is `const value_type&`.
`pointer` | Pointer type which is `value_type*`.
`const_pointer` | Constant reference type which is `const value_type*`.

#### Member Functions

Member Function | Description
--- | ---
`basic_extents ()` | Constructs an empty instance of `basic_extents`.
`basic_extents (std::vector<value_type> const& vector)` | Constructs an instance copying the content of `vector`.
`basic_extents (std::vector<value_type> && vector)` | Constructs an instance moving the content of `vector`.
`basic_extents (std::initializer_list<value_type> list)` | Constructs an instance from `list`.
`basic_extents (const_iterator first, const_iterator last)` | Constructs an instance from the range specified by `[first`,`last)`.
`basic_extents (basic_extents const& other)` | Constructs an instance from `other` copying its elements.
`basic_extents (basic_extents && other)` | Constructs an instance from `other` by moving its elements.
`basic_extents& operator= (basic_extents other)` | Assigns the elements of `other` to this instance.
`bool is_scalar() const` | Returns true if the elements are `(1,1,[1,...,1])`.
`bool is_vector() const` | Returns true if the elements are `(n,1,[1,...,1])` or `(1,n,[1,...,1])` where `n>1`.
`bool is_matrix() const` | Returns true if the elements are `(m,n,[1,...,1])` where `m>1` and `n>1`.
`bool is_tensor() const` | Returns true if it is not a scalar, vector or matrix.
`const_pointer data() const` | Returns a `const_pointer` to the first element.
`pointer data()` | Returns a `pointer` to the first element.
`reference operator[](size_type i)` | Returns a `reference` to the `i`-th element.
`const_reference operator[](size_type i) const` | Returns a `const_reference` to the `i`-th element.
`reference at(size_type i)` | Returns a `reference` to the `i`-th element.
`const_reference at(size_type i) const` | Returns a `const_reference` to the `i`-th element.
`bool empty()` | Returns true if the container has no elements.
`size_type size() const` | Returns the number of elements.
`bool valid() const` | Returns true if size()>1 and all elements are greater than one.
`size_type product() const` | Returns the multiplication of all entries.
`basic_extents squeeze() const` | Returns a new instance where entries equal to one are eliminated.
`bool operator==(basic_extents const& b) const` | Returns true if all elements are equal.
`bool operator!=(basic_extents const& b) const` | Returns true if some elements are not equal.
`const_iterator begin() const` | Returns an `const_iterator`pointing to the first element.``
`const_iterator end() const` | Returns a `const_iterator` pointing to an element passed the last element.
`std::vector<size_type> base() const` | Returns a const reference to the private member sequence container holding all elements.

Copyright (©) 2018 Cem Bassoy
Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt ).