TSDuck v3.40-3963
MPEG Transport Stream Toolkit
Loading...
Searching...
No Matches
ts::Integer< INT_T, type > Class Template Reference

Encapsulation of an integer type as an AbstractNumber. More...

#include <tsInteger.h>

Inheritance diagram for ts::Integer< INT_T, type >:
Collaboration diagram for ts::Integer< INT_T, type >:

Public Types

using int_t = INT_T
 The underlying signed integer type.
 

Public Member Functions

 Integer ()=default
 Default constructor, implicitly initialized to zero.
 
template<typename INT2 , typename std::enable_if< std::is_integral< INT2 >::value, int >::type = 0>
 Integer (INT2 i)
 Constructor.
 
Integer abs () const
 Get the absolute value.
 
virtual ts::UString description () const override
 Get a textual description of the values of that type.
 
bool divOverflow (const Integer &x) const
 Check if this Integer number generates an overflow when divided by another Integer.
 
virtual bool fromString (const UString &str, UChar separator=COMMA, UChar decimal_dot=FULL_STOP) override
 Parse a string and interpret it as a number.
 
virtual bool inRange (int64_t min, int64_t max) const override
 Check if the value of the number is within a range of integer value.
 
Integer max (const Integer &x) const
 Get the maximum value of two fixed-point numbers.
 
Integer min (const Integer &x) const
 Get the minimum value of two fixed-point numbers.
 
bool mulOverflow (const Integer &x) const
 Check if this Integer number generates an overflow when multiplied by another Integer.
 
template<typename INT2 , typename std::enable_if< std::is_integral< INT2 >::value, int >::type = 0>
bool mulOverflow (INT2 x) const
 Check if this Integer number generates an overflow when multiplied by an integer.
 
virtual double toDouble () const override
 Conversion to double value.
 
int_t toInt () const
 Conversion to integral units.
 
virtual int64_t toInt64 () const override
 Conversion to a 64-bit signed integer value.
 
virtual UString toString (size_t min_width=0, bool right_justified=true, UChar separator=COMMA, bool force_sign=false, size_t decimals=NPOS, bool force_decimals=false, UChar decimal_dot=FULL_STOP, UChar pad=SPACE) const override
 Convert the number to a string object.
 

Static Public Attributes

static const AbstractNumber *const INVALID
 Pointer to an invalid instance of AbstractNumber.
 
static const Integer MAX
 The maximum representable value of this fixed-point type.
 
static const Integer MIN
 The minimum representable value of this fixed-point type.
 

Static Protected Member Functions

static void Deformat (UString &str, UChar separator, UChar decimal_dot)
 Static common utility to deformat a string containing a number.
 
static void Format (UString &str, size_t min_width, bool right_justified, UChar separator, bool add_plus_sign, size_t decimals, bool force_decimals, UChar decimal_dot, UChar pad)
 Static common utility to format a string containing a number with or without decimal part.
 

Detailed Description

template<typename INT_T, typename std::enable_if< std::is_integral< INT_T >::value, int >::type = 0>
class ts::Integer< INT_T, type >

Encapsulation of an integer type as an AbstractNumber.

Template Parameters
INT_TThe underlying integer type.

Constructor & Destructor Documentation

◆ Integer()

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type = 0>
template<typename INT2 , typename std::enable_if< std::is_integral< INT2 >::value, int >::type = 0>
ts::Integer< INT_T, type >::Integer ( INT2  i)
inline

Constructor.

Template Parameters
INT2Some other integer type (signed or unsigned).
Parameters
[in]iInitial value.

Member Function Documentation

◆ description()

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type N>
ts::UString ts::Integer< INT_T, N >::description ( ) const
overridevirtual

Get a textual description of the values of that type.

This is typically used in help texts.

Returns
A textual description of the values of that type.

Implements ts::AbstractNumber.

◆ inRange()

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type N>
bool ts::Integer< INT_T, N >::inRange ( int64_t  min,
int64_t  max 
) const
overridevirtual

Check if the value of the number is within a range of integer value.

Parameters
[in]minMinimum integer value (inclusive).
[in]maxMaximum integer value (inclusive).
Returns
True if this number is within the range min to max, inclusive.

Implements ts::AbstractNumber.

◆ toInt64()

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type N>
int64_t ts::Integer< INT_T, N >::toInt64 ( ) const
overridevirtual

Conversion to a 64-bit signed integer value.

Returns
The value in integral units. Underflow or overflow rounding is applied when necessary.

Implements ts::AbstractNumber.

◆ toDouble()

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type N>
double ts::Integer< INT_T, N >::toDouble ( ) const
overridevirtual

Conversion to double value.

Returns
The value as a double.

Implements ts::AbstractNumber.

◆ fromString()

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type N>
bool ts::Integer< INT_T, N >::fromString ( const UString str,
UChar  separator = COMMA,
UChar  decimal_dot = FULL_STOP 
)
overridevirtual

Parse a string and interpret it as a number.

The content of this object is updated from the parsed string.

Parameters
[in]strA string to parse, representing this object.
[in]separatorSeparator character for groups of thousands, a comma by default.
[in]decimal_dotThe decimal separator, a dot by default.
Returns
True if the str is valid, false otherwise. In case of parsing error, the content of this object is undefined.

Implements ts::AbstractNumber.

◆ toString()

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type N>
ts::UString ts::Integer< INT_T, N >::toString ( size_t  min_width = 0,
bool  right_justified = true,
UChar  separator = COMMA,
bool  force_sign = false,
size_t  decimals = NPOS,
bool  force_decimals = false,
UChar  decimal_dot = FULL_STOP,
UChar  pad = SPACE 
) const
overridevirtual

Convert the number to a string object.

Parameters
[in]min_widthMinimum width of the returned string. Padded with pad characters if larger than the number of characters in the formatted number.
[in]right_justifiedIf true (the default), return a right-justified string. When false, return a left-justified string. Ignored if min_width is lower than the number of characters in the formatted number.
[in]separatorSeparator character for groups of thousands, a comma by default. CHAR_NULL means no separator.
[in]force_signIf true, force a '+' sign for positive values.
[in]decimalsPrecision to use after the decimal point. NPOS means default.
[in]force_decimalsIf true, with positive precision, force a decimal dot and the number of decimal digits of the precision. By default, skip non significant decimal digits.
[in]decimal_dotThe decimal separator, a dot by default.
[in]padThe padding character to adjust the width.
Returns
The formatted string.

Implements ts::AbstractNumber.

◆ toInt()

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type = 0>
int_t ts::Integer< INT_T, type >::toInt ( ) const
inline

Conversion to integral units.

Returns
The value in integral units. Underflow or overflow rounding is applied when necessary.

◆ abs()

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type = 0>
Integer ts::Integer< INT_T, type >::abs ( ) const
inline

Get the absolute value.

Returns
The absolute value of this fixed-point number.

◆ max()

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type = 0>
Integer ts::Integer< INT_T, type >::max ( const Integer< INT_T, type > &  x) const
inline

Get the maximum value of two fixed-point numbers.

Parameters
[in]xAnother fixed-point number.
Returns
The maximum value of this fixed-point number and x.

◆ min()

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type = 0>
Integer ts::Integer< INT_T, type >::min ( const Integer< INT_T, type > &  x) const
inline

Get the minimum value of two fixed-point numbers.

Parameters
[in]xAnother fixed-point number.
Returns
The minimum value of this fixed-point number and x.

◆ mulOverflow() [1/2]

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type = 0>
template<typename INT2 , typename std::enable_if< std::is_integral< INT2 >::value, int >::type = 0>
bool ts::Integer< INT_T, type >::mulOverflow ( INT2  x) const
inline

Check if this Integer number generates an overflow when multiplied by an integer.

Template Parameters
INT2Another integer type.
Parameters
[in]xAn integer of type INT2.
Returns
True if this Integer number generates an overflow when multiplied by x.

◆ mulOverflow() [2/2]

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type = 0>
bool ts::Integer< INT_T, type >::mulOverflow ( const Integer< INT_T, type > &  x) const
inline

Check if this Integer number generates an overflow when multiplied by another Integer.

Parameters
[in]xAnother Integer number.
Returns
True if this Integer number generates an overflow when multiplied by x.

◆ divOverflow()

template<typename INT_T , typename std::enable_if< std::is_integral< INT_T >::value, int >::type = 0>
bool ts::Integer< INT_T, type >::divOverflow ( const Integer< INT_T, type > &  x) const
inline

Check if this Integer number generates an overflow when divided by another Integer.

The method is present for compliance with other AbstractNumber subclasses.

Parameters
[in]xAnother Integer.
Returns
Always false. There is no possible division overflow with Integer.

◆ Format()

static void ts::AbstractNumber::Format ( UString str,
size_t  min_width,
bool  right_justified,
UChar  separator,
bool  add_plus_sign,
size_t  decimals,
bool  force_decimals,
UChar  decimal_dot,
UChar  pad 
)
staticprotectedinherited

Static common utility to format a string containing a number with or without decimal part.

Parameters
[in,out]strString to format.
[in]min_widthMinimum width of the string.
[in]right_justifiedIf true (the default), return a right-justified string.
[in]separatorSeparator character for groups of thousands.
[in]add_plus_signIf true, force a '+' sign before the number.
[in]decimalsPrecision to use after the decimal point. NPOS not allowed.
[in]force_decimalsIf true, force a decimal dot and the number of decimal digits. For integer types, use force_decimals == true and decimals == 0.
[in]decimal_dotThe decimal separator.
[in]padThe padding character to adjust the width.

◆ Deformat()

static void ts::AbstractNumber::Deformat ( UString str,
UChar  separator,
UChar  decimal_dot 
)
staticprotectedinherited

Static common utility to deformat a string containing a number.

Parameters
[in,out]strString to deformat.
[in]separatorSeparator character for groups of thousands.
[in]decimal_dotThe decimal separator.

Member Data Documentation

◆ INVALID

const AbstractNumber* const ts::AbstractNumber::INVALID
staticinherited

Pointer to an invalid instance of AbstractNumber.

Its toString() method always return an empty string.


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