Clingo
Loading...
Searching...
No Matches
CppClingo::Number Class Reference

An arbitrary precision integer. More...

#include <number.hh>

Public Member Functions

 Number (int32_t value) noexcept
 Construct a number from an integer.
 
 Number (char const *str, Base base=Base::dec)
 Construct a number from a string.
 
 Number (std::string_view str, Base base=Base::dec)
 Construct a number from a string.
 
 Number (Number const &other)
 Copy construct a number.
 
 Number (Number &&other) noexcept
 Move construct a number.
 
auto operator= (Number const &other) -> Number &
 Copy assign a number.
 
auto operator= (Number &&other) noexcept -> Number &
 Move assign a number.
 
 ~Number () noexcept
 Destroy the number freeing associated memory.
 
auto as_int () const -> std::optional< int32_t >
 Convert the number to an integer if possible.
 
auto as_string () const -> std::string
 Convert the number into a string.
 
void swap (Number &other) noexcept
 Swap two numbers.
 
auto hash () const noexcept -> size_t
 Get a hash code of the number suitable for unordered containers.
 

Static Public Member Functions

static auto from_repr (uint64_t repr) -> Number
 Construct a number from the given representation.
 
static auto to_repr (Number const &num) -> uint64_t
 Get the internal representation of the number.
 
static auto release (Number &num) -> uint64_t
 Get the internal representation of the number and set it to zero.
 

Friends

class Impl
 
auto compare (Number const &a, Number const &b) -> int
 Compare to numbers returning a comparator.
 
auto compare (Number const &a, int32_t b) -> int
 Compare to numbers returning a comparator.
 
auto compare (int32_t a, Number const &b) -> int
 Compare to numbers returning a comparator.
 
auto operator== (Number const &a, Number const &b)
 Equality compare two numbers.
 
auto operator== (int32_t a, Number const &b) -> bool
 Equality compare two numbers.
 
auto operator== (Number const &a, int32_t b) -> bool
 Equality compare two numbers.
 
auto operator<=> (Number const &a, Number const &b)
 Compare two numbers.
 
auto operator<=> (int32_t a, Number const &b)
 Compare two numbers.
 
auto operator<=> (Number const &a, int32_t b)
 Compare two numbers.
 
auto operator+ (Number const &a, Number const &b) -> Number
 Sum up two numbers.
 
auto operator+ (Number &&a, Number const &b) -> Number
 Sum up two numbers.
 
auto operator+ (Number const &a, Number &&b) -> Number
 Sum up two numbers.
 
auto operator+ (Number &&a, Number &&b) -> Number
 Sum up two numbers.
 
auto operator+= (Number &a, Number const &b) -> Number &
 In place add the given number.
 
auto operator+= (Number &a, Number &&b) -> Number &
 In place add the given number.
 
auto operator- (Number const &a, Number const &b) -> Number
 Subtract two numbers.
 
auto operator- (Number &&a, Number const &b) -> Number
 Subtract two numbers.
 
auto operator- (Number const &a, Number &&b) -> Number
 Subtract two numbers.
 
auto operator- (Number &&a, Number &&b) -> Number
 Subtract two numbers.
 
auto operator-= (Number &a, Number const &b) -> Number &
 In place subtract the given number.
 
auto operator-= (Number &a, Number &&b) -> Number &
 In place subtract the given number.
 
auto operator* (Number const &a, Number const &b) -> Number
 Multiply two numbers.
 
auto operator* (Number &&a, Number const &b) -> Number
 Multiply two numbers.
 
auto operator* (Number const &a, Number &&b) -> Number
 Multiply two numbers.
 
auto operator* (Number &&a, Number &&b) -> Number
 Multiply two numbers.
 
auto operator*= (Number &a, Number const &b) -> Number &
 In place multiply the given number.
 
auto operator*= (Number &a, Number &&b) -> Number &
 In place multiply the given number.
 
auto operator/ (Number const &a, Number const &b) -> Number
 Divide two numbers.
 
auto operator/ (Number &&a, Number const &b) -> Number
 Divide two numbers.
 
auto operator/ (Number const &a, Number &&b) -> Number
 Divide two numbers.
 
auto operator/ (Number &&a, Number &&b) -> Number
 Divide two numbers.
 
auto operator/= (Number &a, Number const &b) -> Number &
 In place divide the given number.
 
auto operator/= (Number &a, Number &&b) -> Number &
 In place divide the given number.
 
auto operator% (Number const &a, Number const &b) -> Number
 Modulo of two numbers.
 
auto operator% (Number &&a, Number const &b) -> Number
 Modulo of two numbers.
 
auto operator% (Number const &a, Number &&b) -> Number
 Modulo of two numbers.
 
auto operator% (Number &&a, Number &&b) -> Number
 Modulo of two numbers.
 
auto operator%= (Number &a, Number const &b) -> Number &
 In place modulo the given number.
 
auto operator%= (Number &a, Number &&b) -> Number &
 In place modulo the given number.
 
auto operator- (Number const &a) -> Number
 Negate the number.
 
auto operator- (Number &&a) -> Number
 Negate the number.
 
auto operator~ (Number const &a) -> Number
 Binary complement of the number.
 
auto operator~ (Number &&a) -> Number
 Binary complement of the number.
 
auto operator& (Number const &a, Number const &b) -> Number
 Binary and of the two numbers.
 
auto operator& (Number &&a, Number const &b) -> Number
 Binary and of the two numbers.
 
auto operator& (Number const &a, Number &&b) -> Number
 Binary and of the two numbers.
 
auto operator& (Number &&a, Number &&b) -> Number
 Binary and of the two numbers.
 
auto operator&= (Number &a, Number const &b) -> Number &
 In place binary and the given number.
 
auto operator&= (Number &a, Number &&b) -> Number &
 In place binary and the given number.
 
auto operator| (Number const &a, Number const &b) -> Number
 Binary or of two numbers.
 
auto operator| (Number &&a, Number const &b) -> Number
 Binary or of two numbers.
 
auto operator| (Number const &a, Number &&b) -> Number
 Binary or of two numbers.
 
auto operator| (Number &&a, Number &&b) -> Number
 Binary or of two numbers.
 
auto operator|= (Number &a, Number const &b) -> Number &
 In place binary or the given number.
 
auto operator|= (Number &a, Number &&b) -> Number &
 In place binary or the given number.
 
auto operator^ (Number const &a, Number const &b) -> Number
 Binary xor of two numbers.
 
auto operator^ (Number &&a, Number const &b) -> Number
 Binary xor of two numbers.
 
auto operator^ (Number const &a, Number &&b) -> Number
 Binary xor of two numbers.
 
auto operator^ (Number &&a, Number &&b) -> Number
 Binary xor of two numbers.
 
auto operator^= (Number &a, Number const &b) -> Number &
 In place binary xor the given number.
 
auto operator^= (Number &a, Number &&b) -> Number &
 In place binary xor the given number.
 
auto pow (Number const &a, Number const &b) -> Number
 Exponentiation of two numbers.
 
auto pow (Number &&a, Number const &b) -> Number
 Exponentiation of two numbers.
 
auto pow (Number const &a, Number &&b) -> Number
 Exponentiation of two numbers.
 
auto pow (Number &&a, Number &&b) -> Number
 Exponentiation of two numbers.
 
auto abs (Number const &a) -> Number
 Get absolute of the given number.
 
auto abs (Number &&a) -> Number
 Get absolute of the given number.
 
auto get_sign (Number const &a) -> int
 Get the sign of the given number.
 
auto operator<< (std::ostream &out, Number const &num) -> std::ostream &
 Output the given number.
 
auto operator<< (Util::OutputBuffer &out, Number const &num) -> Util::OutputBuffer &
 Output the given number.
 

Detailed Description

An arbitrary precision integer.

Directly stores a 32bit integer if possible and otherwise a pointer to an arbitrary size integer.

Member Function Documentation

◆ release()

static auto CppClingo::Number::release ( Number num) -> uint64_t
inlinestatic

Get the internal representation of the number and set it to zero.

A new number can be constructed from the given representation.

◆ to_repr()

static auto CppClingo::Number::to_repr ( Number const &  num) -> uint64_t
inlinestatic

Get the internal representation of the number.

Can be used with release() below.


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