DxLibEx
dxle::size_c< T, > Class Template Reference

Template class for 2D sizes specified by its coordinates width and height. More...

#include <point2d.hpp>

Public Types

typedef T value_type
 

Public Member Functions

DXLE_CONSTEXPR size_c () DXLE_NOEXCEPT_IF((std
 
DXLE_CONSTEXPR size_c (const value_type &width_, const value_type &height_) DXLE_NOEXCEPT_IF((std
 
DXLE_CONSTEXPR size_c (value_type &&width_, value_type &&height_) DXLE_NOEXCEPT_OR_NOTHROW
 
template<typename Tp2_ >
DXLE_CONSTEXPR size_c (const size_c< Tp2_ > &other) DXLE_NOEXCEPT_IF((dxle
 
template<typename Tp2_ >
DXLE_CONSTEXPR size_c (size_c< Tp2_ > &&other) DXLE_NOEXCEPT_IF((dxle
 
DXLE_CONSTEXPR size_c (const size_c< value_type > &o) DXLE_NOEXCEPT_IF((std
 
DXLE_CONSTEXPR size_c (size_c< value_type > &&o) DXLE_NOEXCEPT_OR_NOTHROW
 
template<typename Tp2_ >
DXLE_CONSTEXPR size_c (const point_c< Tp2_, nullptr > &other) DXLE_NOEXCEPT_IF((dxle
 
template<typename Tp2_ >
DXLE_CONSTEXPR size_c (point_c< Tp2_, nullptr > &&other) DXLE_NOEXCEPT_IF((dxle
 
DXLE_CONSTEXPR size_c (const point_c< value_type, nullptr > &other) DXLE_NOEXCEPT_IF((dxle
 
DXLE_CONSTEXPR size_c (point_c< value_type, nullptr > &&other) DXLE_NOEXCEPT_IF((dxle
 
size_coperator= (const size_c< value_type > &r) DXLE_NOEXCEPT_IF((std
 
size_coperator= (size_c< value_type > &&r) DXLE_NOEXCEPT_OR_NOTHROW
 
DXLE_CONSTEXPR operator bool () const DXLE_NOEXCEPT_IF_EXPR((dxle
 
template<typename Tp2_ >
DXLE_CONSTEXPR operator size_c< Tp2_ > () const DXLE_NOEXCEPT_IF((dxle
 
template<typename Tp2_ >
 operator std::pair< Tp2_, Tp2_ > () const DXLE_NOEXCEPT_IF((dxle
 

Public Attributes

value_type width
 
value_type height
 

Related Functions

(Note that these are not member functions.)

template<typename T >
size_c< T > make_size_c (const std::pair< T, T > &pa) DXLE_NOEXCEPT_IF(std
 conversion from std::pair More...
 
template<typename T >
size_c< T > make_size_c (std::pair< T, T > &&pa) DXLE_NOEXCEPT_OR_NOTHROW
 conversion from std::pair More...
 
template<typename T >
std::ostream & operator<< (std::ostream &os, const size_c< T > &s)
 ostream operator More...
 
template<typename T >
std::wostream & operator<< (std::wostream &os, const size_c< T > &s)
 ostream operator More...
 
template<typename T >
std::istream & operator>> (std::istream &is, size_c< T > &s)
 istream operator More...
 
template<typename T >
std::wistream & operator>> (std::wistream &is, size_c< T > &s)
 istream operator More...
 
template<typename T >
DXLE_CONSTEXPR size_c< T > operator- (const size_c< T > &r) DXLE_NOEXCEPT_IF_EXPR(-r.width)
 Overload of unary operator -. More...
 
template<typename T >
DXLE_CONSTEXPR size_c< T > operator+ (const size_c< T > &r) DXLE_NOEXCEPT_IF(std
 Overload of unary operator +. More...
 
template<typename T >
DXLE_CONSTEXPR size_c< T > && operator+ (size_c< T > &&r) DXLE_NOEXCEPT_OR_NOTHROW
 Overload of unary operator +. More...
 
template<typename T1 , typename T2 , enable_if_t< is_representable< T2, T1 >::value, nullptr_t > = nullptr>
size_c< T1 > & operator+= (size_c< T1 > &l, const size_c< T2 > &r) DXLE_NOEXCEPT_IF_EXPR(l.width+
 Overload of binary operator +=. More...
 
template<typename T1 , typename T2 >
DXLE_CONSTEXPR auto operator- (const size_c< T1 > &l, const size_c< T2 > &r) DXLE_NOEXCEPT_IF_EXPR(l.width - r.width) -> size_c< decltype(std::declval< std::remove_cv_t< T1 >>() - std::declval< std::remove_cv_t< T2 >>())>
 Overload of binary operator -. More...
 
template<typename T1 , typename T2 >
DXLE_CONSTEXPR auto operator* (const size_c< T1 > &l, T2 r) DXLE_NOEXCEPT_IF_EXPR(l.width *r) -> size_c< decltype(std::declval< std::remove_cv_t< T1 >>() *std::declval< std::remove_cv_t< T2 >>())>
 Overload of binary operator *. More...
 
template<typename T1 , typename T2 >
DXLE_CONSTEXPR auto operator* (T1 l, const size_c< T2 > &r) DXLE_NOEXCEPT_IF_EXPR(l *r.width) -> size_c< decltype(std::declval< std::remove_cv_t< T1 >>() *std::declval< std::remove_cv_t< T2 >>())>
 Overload of binary operator *. More...
 
template<typename T1 , typename T2 , enable_if_t< is_representable< T2, T1 >::value, nullptr_t > = nullptr>
size_c< T1 > & operator*= (size_c< T1 > &l, T2 r) DXLE_NOEXCEPT_IF_EXPR(l.width *
 Overload of binary operator *=. More...
 
template<typename T1 , typename T2 , enable_if_t< is_representable< T2, T1 >::value, nullptr_t > = nullptr>
size_c< T1 > & operator/= (size_c< T1 > &l, T2 r) DXLE_NOEXCEPT_IF_EXPR(l.width/
 Overload of binary operator /=. More...
 
template<typename T1 , typename T2 >
DXLE_CONSTEXPR auto operator+ (const size_c< T1 > &l, const point_c< T2 > &r) DXLE_NOEXCEPT_IF_EXPR(l.width+r.x) -> size_c< decltype(std::declval< std::remove_cv_t< T1 >>()+std::declval< std::remove_cv_t< T2 >>())>
 Overload of binary operator +. More...
 
template<typename T1 , typename T2 >
DXLE_CONSTEXPR auto operator- (const size_c< T1 > &l, const point_c< T2 > &r) DXLE_NOEXCEPT_IF_EXPR(l.width - r.x) -> size_c< decltype(std::declval< std::remove_cv_t< T1 >>() - std::declval< std::remove_cv_t< T2 >>())>
 Overload of binary operator -. More...
 

Detailed Description

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
class dxle::size_c< T, >

Template class for 2D sizes specified by its coordinates width and height.

An instance of the claess is interchangeable with std::pair. There is also a cast operator to convert size coordinates to the specified type (using static_cast). Commonly, the conversion uses this operation for each of the coordinates. Besides the class members listed in the declaration above, the following operations on sizes are implemented:

pt1 = pt2 + pt3;
pt1 = pt2 - pt3;
pt1 = pt2 * a;
pt1 = a * pt2;
pt1 = pt2 / a;
pt1 += pt2;
pt1 -= pt2;
pt1 *= a;
pt1 /= a;
pt1 == pt2;
pt1 != pt2;

For your convenience, the following type aliases are defined:

typedef size_c<int> sizei;
typedef size_c<unsigned int> sizeui;
typedef size_c<double> sized;
typedef size_c<float> sizef;
typedef size_c<std::size_t> size;

Example:

dxle::sizef a(0.3f, 0.f), b(0.f, 0.4f);
dxle::sizei pt = (a + b)*10.f;
std::cout << pt << std::endl;
Template Parameters
TT is the type of the elements. T must meet the requirements of NothrowMoveAssignable and NothrowConstructable. T is expected the following conditions to use all features.

Definition at line 36 of file point2d.hpp.

Member Typedef Documentation

§ value_type

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
typedef T dxle::size_c< T, >::value_type

Definition at line 103 of file size.hpp.

Constructor & Destructor Documentation

§ size_c() [1/11]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
DXLE_CONSTEXPR dxle::size_c< T, >::size_c ( )
inline

Definition at line 105 of file size.hpp.

§ size_c() [2/11]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
DXLE_CONSTEXPR dxle::size_c< T, >::size_c ( const value_type width_,
const value_type height_ 
)
inline

Definition at line 106 of file size.hpp.

§ size_c() [3/11]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
DXLE_CONSTEXPR dxle::size_c< T, >::size_c ( value_type &&  width_,
value_type &&  height_ 
)
inline

Definition at line 107 of file size.hpp.

§ size_c() [4/11]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
template<typename Tp2_ >
DXLE_CONSTEXPR dxle::size_c< T, >::size_c ( const size_c< Tp2_ > &  other)
inlineexplicit

conversion from another data type

Definition at line 111 of file size.hpp.

§ size_c() [5/11]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
template<typename Tp2_ >
DXLE_CONSTEXPR dxle::size_c< T, >::size_c ( size_c< Tp2_ > &&  other)
inlineexplicit

conversion from another data type

Definition at line 115 of file size.hpp.

§ size_c() [6/11]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
DXLE_CONSTEXPR dxle::size_c< T, >::size_c ( const size_c< value_type > &  o)
inline

Definition at line 118 of file size.hpp.

§ size_c() [7/11]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
DXLE_CONSTEXPR dxle::size_c< T, >::size_c ( size_c< value_type > &&  o)
inline

Definition at line 120 of file size.hpp.

§ size_c() [8/11]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
template<typename Tp2_ >
DXLE_CONSTEXPR dxle::size_c< T, >::size_c ( const point_c< Tp2_, nullptr > &  other)
inlineexplicit

conversion from point_c

Definition at line 124 of file size.hpp.

§ size_c() [9/11]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
template<typename Tp2_ >
DXLE_CONSTEXPR dxle::size_c< T, >::size_c ( point_c< Tp2_, nullptr > &&  other)
inlineexplicit

conversion from point_c

Definition at line 128 of file size.hpp.

§ size_c() [10/11]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
DXLE_CONSTEXPR dxle::size_c< T, >::size_c ( const point_c< value_type, nullptr > &  other)
inline

conversion from point_c

Definition at line 132 of file size.hpp.

§ size_c() [11/11]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
DXLE_CONSTEXPR dxle::size_c< T, >::size_c ( point_c< value_type, nullptr > &&  other)
inline

conversion from point_c

Definition at line 136 of file size.hpp.

Member Function Documentation

§ operator bool()

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
DXLE_CONSTEXPR dxle::size_c< T, >::operator bool ( ) const
inlineexplicit

operator bool

  1. operator bool
  2. operator != (nullptr)
  3. default constector + operator !=

Definition at line 158 of file size.hpp.

§ operator size_c< Tp2_ >()

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
template<typename Tp2_ >
DXLE_CONSTEXPR dxle::size_c< T, >::operator size_c< Tp2_ > ( ) const
inlineexplicit

conversion to another data type

Definition at line 164 of file size.hpp.

§ operator std::pair< Tp2_, Tp2_ >()

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
template<typename Tp2_ >
dxle::size_c< T, >::operator std::pair< Tp2_, Tp2_ > ( ) const
inlineexplicit

conversion to std::pair

Definition at line 170 of file size.hpp.

§ operator=() [1/2]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
size_c& dxle::size_c< T, >::operator= ( const size_c< value_type > &  r)
inline

Definition at line 140 of file size.hpp.

§ operator=() [2/2]

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
size_c& dxle::size_c< T, >::operator= ( size_c< value_type > &&  r)
inline

Definition at line 147 of file size.hpp.

Friends And Related Function Documentation

§ make_size_c() [1/2]

template<typename T >
size_c< T > make_size_c ( const std::pair< T, T > &  pa)
related

conversion from std::pair

Parameters
paconst-lvalue reference to std::pair
Returns
size_c value

Definition at line 186 of file size.hpp.

§ make_size_c() [2/2]

template<typename T >
size_c< T > make_size_c ( std::pair< T, T > &&  pa)
related

conversion from std::pair

Parameters
parvalue reference to std::pair
Returns
size_c value

Definition at line 199 of file size.hpp.

§ operator*() [1/2]

template<typename T1 , typename T2 >
DXLE_CONSTEXPR auto operator* ( const size_c< T1 > &  l,
T2  r 
) -> size_c<decltype(std::declval<std::remove_cv_t<T1>>() * std::declval<std::remove_cv_t<T2>>())>
related

Overload of binary operator *.

Parameters
lconst-lvalue reference to size_c value
rarithmetic value
Returns
Memberwise multiplication by 2nd argument

Definition at line 412 of file size.hpp.

§ operator*() [2/2]

template<typename T1 , typename T2 >
DXLE_CONSTEXPR auto operator* ( T1  l,
const size_c< T2 > &  r 
) -> size_c<decltype(std::declval<std::remove_cv_t<T1>>() * std::declval<std::remove_cv_t<T2>>())>
related

Overload of binary operator *.

Parameters
larithmetic value
rconst-lvalue reference to size_c value
Returns
Memberwise multiplication by 1st argument

Definition at line 430 of file size.hpp.

§ operator*=()

template<typename T1 , typename T2 , enable_if_t< is_representable< T2, T1 >::value, nullptr_t > = nullptr>
size_c< T1 > & operator*= ( size_c< T1 > &  l,
T2  r 
)
related

Overload of binary operator *=.

Parameters
lconst-lvalue reference to size_c value
rarithmetic value
Returns
lvalue reference to 1st argument

§ operator+() [1/3]

template<typename T1 , typename T2 >
DXLE_CONSTEXPR auto operator+ ( const size_c< T1 > &  l,
const point_c< T2 > &  r 
) -> size_c<decltype(std::declval<std::remove_cv_t<T1>>() + std::declval<std::remove_cv_t<T2>>())>
related

Overload of binary operator +.

Parameters
lconst-lvalue reference to size_c value
rconst-lvalue reference to point_c value
Returns
Memberwise addition of both size_c value

Definition at line 124 of file basic_types.hpp.

§ operator+() [2/3]

template<typename T >
DXLE_CONSTEXPR size_c< T > operator+ ( const size_c< T > &  r)
related

Overload of unary operator +.

Parameters
rconst-lvalue reference to size_c value
Returns
const-lvalue reference to first argument

Definition at line 312 of file size.hpp.

§ operator+() [3/3]

template<typename T >
DXLE_CONSTEXPR size_c< T > && operator+ ( size_c< T > &&  r)
related

Overload of unary operator +.

Parameters
rrvalue reference to size_c value
Returns
rvalue reference to first argument

Definition at line 324 of file size.hpp.

§ operator+=()

template<typename T1 , typename T2 , enable_if_t< is_representable< T2, T1 >::value, nullptr_t > = nullptr>
size_c< T1 > & operator+= ( size_c< T1 > &  l,
const size_c< T2 > &  r 
)
related

Overload of binary operator +=.

Parameters
llvalue reference to size_c value
rconst-lvalue reference to size_c value
Returns
lvalue reference to first argument

§ operator-() [1/3]

template<typename T1 , typename T2 >
DXLE_CONSTEXPR auto operator- ( const size_c< T1 > &  l,
const point_c< T2 > &  r 
) -> size_c<decltype(std::declval<std::remove_cv_t<T1>>() - std::declval<std::remove_cv_t<T2>>())>
related

Overload of binary operator -.

Parameters
lconst-lvalue reference to size_c value
rconst-lvalue reference to point_c value
Returns
Memberwise addition of both size_c value

Definition at line 160 of file basic_types.hpp.

§ operator-() [2/3]

template<typename T >
DXLE_CONSTEXPR size_c< T > operator- ( const size_c< T > &  r)
related

Overload of unary operator -.

Parameters
rsize_c value to negate
Returns
Memberwise opposite of the size_c value

Definition at line 297 of file size.hpp.

§ operator-() [3/3]

template<typename T1 , typename T2 >
DXLE_CONSTEXPR auto operator- ( const size_c< T1 > &  l,
const size_c< T2 > &  r 
) -> size_c<decltype(std::declval<std::remove_cv_t<T1>>() - std::declval<std::remove_cv_t<T2>>())>
related

Overload of binary operator -.

Parameters
lconst-lvalue reference to size_c value
rconst-lvalue reference to size_c value
Returns
Memberwise subtraction of both size_c value

Definition at line 394 of file size.hpp.

§ operator/=()

template<typename T1 , typename T2 , enable_if_t< is_representable< T2, T1 >::value, nullptr_t > = nullptr>
size_c< T1 > & operator/= ( size_c< T1 > &  l,
T2  r 
)
related

Overload of binary operator /=.

Parameters
lconst-lvalue reference to size_c value
rarithmetic value
Returns
lvalue reference to 1st argument

§ operator<<() [1/2]

template<typename T >
std::ostream & operator<< ( std::ostream &  os,
const size_c< T > &  s 
)
related

ostream operator

Parameters
oslvalue reference to ostream
sconst-lvalue reference to size_c
Returns
lvalue reference to ostream whitch is specified at first argument

Definition at line 233 of file size.hpp.

§ operator<<() [2/2]

template<typename T >
std::wostream & operator<< ( std::wostream &  os,
const size_c< T > &  s 
)
related

ostream operator

Parameters
oslvalue reference to ostream
sconst-lvalue reference to size_c
Returns
lvalue reference to ostream whitch is specified at first argument

Definition at line 249 of file size.hpp.

§ operator>>() [1/2]

template<typename T >
std::istream & operator>> ( std::istream &  is,
size_c< T > &  s 
)
related

istream operator

Parameters
islvalue reference to istream
sconst-lvalue reference to size_c
Returns
lvalue reference to istream whitch is specified at first argument

Definition at line 265 of file size.hpp.

§ operator>>() [2/2]

template<typename T >
std::wistream & operator>> ( std::wistream &  is,
size_c< T > &  s 
)
related

istream operator

Parameters
islvalue reference to istream
sconst-lvalue reference to size_c
Returns
lvalue reference to istream whitch is specified at first argument

Definition at line 281 of file size.hpp.

Member Data Documentation

§ height

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
value_type dxle::size_c< T, >::height

Definition at line 104 of file size.hpp.

§ width

template<typename T, enable_if_t< std::is_nothrow_move_constructible< T >::value &&std::is_nothrow_move_assignable< T >::value, nullptr_t > = nullptr>
value_type dxle::size_c< T, >::width

Definition at line 104 of file size.hpp.


The documentation for this class was generated from the following files: