Project Euler Solutions
Classes | Namespaces | Functions | Variables
bcd.h File Reference

An implementation of arbitrary-precision binary-coded-decimal integers. More...

#include <stdbool.h>
#include <stdint.h>
#include <string.h>
#include "macros.h"
#include <stdlib.h>
#include <math.h>
Include dependency graph for bcd.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  BCD_int
 A little-endian, arbitrary-precision, binary-coded-decimal number. More...
 

Namespaces

 c::include::bcd
 

Functions

void c::include::bcd::free_BCD_int (BCD_int *const x)
 
BCD_int c::include::bcd::new_BCD_int1 (const intmax_t a)
 
BCD_int c::include::bcd::new_BCD_int2 (uintmax_t a, const bool negative)
 
BCD_int c::include::bcd::copy_BCD_int (BCD_int a)
 
BCD_int c::include::bcd::BCD_from_bytes (const unsigned char *const str, const size_t chars, const bool negative, const bool little_endian)
 
BCD_int c::include::bcd::BCD_from_ascii (const char *const str, const size_t digits, const bool negative)
 
BCD_int c::include::bcd::bcd_error (const BCD_error error, const BCD_error orig_error)
 
comp_t c::include::bcd::cmp_bcd (const BCD_int x, const BCD_int y)
 
bool c::include::bcd::bool_bcd (const BCD_int x)
 
bool c::include::bcd::not_bcd (const BCD_int x)
 
BCD_int c::include::bcd::sign_bcd (BCD_int x, const bool no_copy, const bool negative)
 
BCD_int c::include::bcd::abs_bcd (const BCD_int x, const bool no_copy)
 
BCD_int c::include::bcd::neg_bcd (const BCD_int x, const bool no_copy)
 
BCD_int c::include::bcd::opp_bcd (const BCD_int x, const bool no_copy)
 
BCD_int c::include::bcd::add_bcd (const BCD_int x, const BCD_int y)
 
BCD_int c::include::bcd::inc_bcd (const BCD_int x)
 
BCD_int c::include::bcd::sub_bcd (const BCD_int x, const BCD_int y)
 
BCD_int c::include::bcd::dec_bcd (const BCD_int x)
 
BCD_int c::include::bcd::mul_bcd (const BCD_int x, const BCD_int y)
 
BCD_int c::include::bcd::div_bcd (const BCD_int x, const BCD_int y)
 
BCD_int c::include::bcd::mod_bcd (const BCD_int x, const BCD_int y)
 
BCD_int c::include::bcd::divmod_bcd (const BCD_int x, BCD_int y, BCD_int *mod)
 
BCD_int c::include::bcd::pow_bcd (const BCD_int x, const BCD_int y)
 
BCD_int c::include::bcd::factorial_bcd (const BCD_int x)
 
void c::include::bcd::isign_bcd (BCD_int *const x, const bool negative)
 
void c::include::bcd::iabs_bcd (BCD_int *const x)
 
void c::include::bcd::ineg_bcd (BCD_int *const x)
 
void c::include::bcd::iopp_bcd (BCD_int *const x)
 
void c::include::bcd::iadd_bcd (BCD_int *const x, const BCD_int y)
 
void c::include::bcd::iinc_bcd (BCD_int *const x)
 
void c::include::bcd::isub_bcd (BCD_int *const x, const BCD_int y)
 
void c::include::bcd::idec_bcd (BCD_int *const x)
 
void c::include::bcd::imul_bcd (BCD_int *const x, const BCD_int y)
 
void c::include::bcd::idiv_bcd (BCD_int *const x, const BCD_int y)
 
void c::include::bcd::imod_bcd (BCD_int *const x, const BCD_int y)
 
void c::include::bcd::idivmod_bcd (BCD_int *const x, BCD_int *const y)
 
void c::include::bcd::ipow_bcd (BCD_int *const x, const BCD_int y)
 
void c::include::bcd::ifactorial_bcd (BCD_int *const x)
 
uintmax_t c::include::bcd::abs_bcd_cuint (const BCD_int x)
 
intmax_t c::include::bcd::val_bcd_cint (const BCD_int x)
 
comp_t c::include::bcd::cmp_bcd_cint (const BCD_int x, const intmax_t y)
 
comp_t c::include::bcd::cmp_bcd_cuint (const BCD_int x, const uintmax_t y)
 
BCD_int c::include::bcd::mul_bcd_cint (const BCD_int x, const intmax_t y)
 
BCD_int c::include::bcd::mul_bcd_cuint (const BCD_int x, uintmax_t y)
 
BCD_int c::include::bcd::mul_bcd_pow_10 (const BCD_int x, const size_t tens)
 
BCD_int c::include::bcd::shift_bcd_left (const BCD_int x, const size_t tens)
 
BCD_int c::include::bcd::div_bcd_pow_10 (const BCD_int a, const size_t tens)
 
BCD_int c::include::bcd::shift_bcd_right (const BCD_int a, const size_t tens)
 
BCD_int c::include::bcd::pow_cuint_cuint (const uintmax_t x, uintmax_t y)
 
BCD_int c::include::bcd::pow_cint_cuint (const intmax_t x, uintmax_t y)
 
void c::include::bcd::imul_bcd_cuint (BCD_int *const x, const uintmax_t y)
 
void c::include::bcd::imul_bcd_cint (BCD_int *const x, const intmax_t y)
 
void c::include::bcd::imul_bcd_pow_10 (BCD_int *const x, const size_t tens)
 
void c::include::bcd::ishift_bcd_left (BCD_int *const x, const size_t tens)
 
void c::include::bcd::idiv_bcd_pow_10 (BCD_int *const a, const size_t tens)
 
void c::include::bcd::ishift_bcd_right (BCD_int *const a, const size_t tens)
 
void c::include::bcd::print_bcd (const BCD_int x)
 
void c::include::bcd::print_bcd_ln (const BCD_int x)
 
uint16_t c::include::bcd::mul_dig_pair (const packed_BCD_pair ab, const packed_BCD_pair cd)
 Multiply a pair of BCD bytes. More...
 

Variables

 c::include::bcd::EXTERN_PRINTF
 
const BCD_int c::include::bcd::BCD_two
 The BCD_two constant is used to represent the commonly used value two. More...
 
const BCD_int c::include::bcd::BCD_one
 The BCD_one constant is used to represent the commonly used value one. More...
 
const BCD_int c::include::bcd::BCD_zero
 The BCD_zero constant is used to represent the commonly used value zero. More...
 
const BCD_int c::include::bcd::BCD_nan
 The BCD_nan constant is used to represent the commonly used value NaN. More...
 
enum  c::include::bcd::comp_t { c::include::bcd::EQUAL_TO, c::include::bcd::GREATER_THAN, c::include::bcd::LESS_THAN, c::include::bcd::NO_COMP }
 An enum that we return for BCD comparisons. More...
 
enum  c::include::bcd::BCD_error {
  c::include::bcd::NON_ERR, c::include::bcd::ORIG_NAN, c::include::bcd::IS_FREED, c::include::bcd::ADD_NAN,
  c::include::bcd::SUB_NAN, c::include::bcd::MUL_NAN, c::include::bcd::DIV_NAN, c::include::bcd::POW_NAN,
  c::include::bcd::FACT_NAN, c::include::bcd::SHIFT_NAN, c::include::bcd::POW_NEG, c::include::bcd::FACT_NEG,
  c::include::bcd::DIV_ZERO, c::include::bcd::NO_MEM, c::include::bcd::NOT_SUPP, c::include::bcd::RESERVED
}
 An enum that we use to track errors in BCD integers. More...
 
typedef uint8_t c::include::bcd::packed_BCD_pair
 An alias for uint8_t that shows it is intended to store packed BCD data. More...
 

Detailed Description

An implementation of arbitrary-precision binary-coded-decimal integers.

Author
Gabe Appleton
Date
12 Oct 2019