TSDuck Version 3.32-2769 (TSDuck - The MPEG Transport Stream Toolkit)
ts::Integer< INT_T, type > Class Template Reference

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

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

Public Types

typedef INT_T int_t
 The underlying signed integer type.
 

Public Member Functions

 Integer ()
 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. More...
 
Integer abs () const
 Get the absolute value. More...
 
virtual ts::UString description () const override
 Get a textual description of the values of that type. More...
 
bool divOverflow (const Integer &x) const
 Check if this Integer number generates an overflow when divided by another Integer. More...
 
virtual bool fromString (const UString &str, UChar separator=COMMA, UChar decimal_dot=FULL_STOP) override
 Parse a string and interpret it as a number. More...
 
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. More...
 
Integer max (const Integer &x) const
 Get the maximum value of two fixed-point numbers. More...
 
Integer min (const Integer &x) const
 Get the minimum value of two fixed-point numbers. More...
 
bool mulOverflow (const Integer &x) const
 Check if this Integer number generates an overflow when multiplied by another Integer. More...
 
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. More...
 
virtual double toDouble () const override
 Conversion to double value. More...
 
int_t toInt () const
 Conversion to integral units. More...
 
virtual int64_t toInt64 () const override
 Conversion to a 64-bit signed integer value. More...
 
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. More...
 

Static Public Attributes

static const AbstractNumber *const INVALID
 Pointer to an invalid instance of AbstractNumber. More...
 
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. More...
 
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. More...
 

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 = 0>
virtual ts::UString ts::Integer< INT_T, type >::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 = 0>
virtual bool ts::Integer< INT_T, type >::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 = 0>
virtual int64_t ts::Integer< INT_T, type >::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 = 0>
virtual double ts::Integer< INT_T, type >::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 = 0>
virtual bool ts::Integer< INT_T, type >::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 = 0>
virtual UString ts::Integer< INT_T, type >::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: