Dynamic Fraction Library 1.0.0
Reference-counted arbitrary precision rational number library (MIT OR Unlicense)
Loading...
Searching...
No Matches
Functions
Integer Creation Functions

Functions for creating arbitrary precision integers from various sources. More...

Functions

di_int di_from_int32 (int32_t value)
 Create a new integer from a 32-bit signed integer.
 
di_int di_from_int64 (int64_t value)
 Create a new integer from a 64-bit signed integer.
 
di_int di_from_uint32 (uint32_t value)
 Create a new integer from a 32-bit unsigned integer.
 
di_int di_from_uint64 (uint64_t value)
 Create a new integer from a 64-bit unsigned integer.
 
di_int di_from_string (const char *str, int base)
 Create a new integer from a string representation.
 
di_int di_zero (void)
 Create a new integer with value zero.
 
di_int di_one (void)
 Create a new integer with value one.
 
di_int di_copy (di_int big)
 Create a deep copy of an integer.
 

Detailed Description

Functions for creating arbitrary precision integers from various sources.

Function Documentation

◆ di_copy()

di_int di_copy ( di_int  big)

Create a deep copy of an integer.

Parameters
bigInteger to copy (may be NULL)
Returns
New di_int instance with same value, or NULL on failure
Since
1.0.0
di_int original = di_from_int32(42);
di_int copy = di_copy(original);
assert(di_eq(original, copy));
di_release(&original);
di_release(&copy);
struct di_int_internal * di_int
Integer handle for arbitrary precision integers.
bool di_eq(di_int a, di_int b)
Test if two integers are equal.
di_int di_copy(di_int big)
Create a deep copy of an integer.
di_int di_from_int32(int32_t value)
Create a new integer from a 32-bit signed integer.
void di_release(di_int *big)
Decrement reference count and free if zero.
Note
Creates an independent copy with reference count = 1
See also
di_retain() for sharing the same integer instance

Definition at line 1166 of file dynamic_int.h.

◆ di_from_int32()

di_int di_from_int32 ( int32_t  value)

Create a new integer from a 32-bit signed integer.

Parameters
valueThe 32-bit signed integer value
Returns
New di_int instance, or NULL on failure
Since
1.0.0
di_int num = di_from_int32(-42);
int32_t result;
if (di_to_int32(num, &result)) {
printf("Value: %d\n", result); // Value: -42
}
di_release(&num);
bool di_to_int32(di_int big, int32_t *result)
Convert integer to 32-bit signed integer.
See also
di_from_int64() for 64-bit integers
di_to_int32() for Conversion Functions back to int32_t
di_release() for memory cleanup

Definition at line 1086 of file dynamic_int.h.

◆ di_from_int64()

di_int di_from_int64 ( int64_t  value)

Create a new integer from a 64-bit signed integer.

Parameters
valueThe 64-bit signed integer value
Returns
New di_int instance, or NULL on failure
Since
1.0.0
di_int big_num = di_from_int64(9223372036854775807LL); // INT64_MAX
char* str = di_to_string(big_num, 10);
printf("Value: %s\n", str);
free(str);
di_release(&big_num);
char * di_to_string(di_int big, int base)
Convert integer to string representation.
di_int di_from_int64(int64_t value)
Create a new integer from a 64-bit signed integer.
See also
di_from_int32() for 32-bit integers
di_to_int64() for Conversion Functions back to int64_t

Definition at line 1106 of file dynamic_int.h.

◆ di_from_string()

di_int di_from_string ( const char *  str,
int  base 
)

Create a new integer from a string representation.

Parameters
strNull-terminated string containing the number
baseNumber base (2-36)
Returns
New di_int instance, or NULL on failure or invalid input
Since
1.0.0
di_int hex = di_from_string("DEADBEEF", 16);
di_int bin = di_from_string("1010110", 2);
di_int dec = di_from_string("-12345", 10);
// Clean up
di_release(&hex);
di_release(&bin);
di_release(&dec);
di_int di_from_string(const char *str, int base)
Create a new integer from a string representation.
Note
Currently only base 10 is fully implemented
See also
di_to_string() for Conversion Functions back to string

Definition at line 1180 of file dynamic_int.h.

◆ di_from_uint32()

di_int di_from_uint32 ( uint32_t  value)

Create a new integer from a 32-bit unsigned integer.

Parameters
valueThe 32-bit unsigned integer value
Returns
New di_int instance, or NULL on failure
Since
1.0.0
See also
di_from_uint64() for 64-bit unsigned integers
di_to_uint32() for Conversion Functions back to uint32_t

Definition at line 1134 of file dynamic_int.h.

◆ di_from_uint64()

di_int di_from_uint64 ( uint64_t  value)

Create a new integer from a 64-bit unsigned integer.

Parameters
valueThe 64-bit unsigned integer value
Returns
New di_int instance, or NULL on failure
Since
1.0.0
See also
di_from_uint32() for 32-bit unsigned integers
di_to_uint64() for Conversion Functions back to uint64_t

Definition at line 1145 of file dynamic_int.h.

◆ di_one()

di_int di_one ( void  )

Create a new integer with value one.

Returns
New di_int instance with value 1, or NULL on failure
Since
1.0.0
See also
di_zero() for creating integer with value 0

Definition at line 1162 of file dynamic_int.h.

◆ di_zero()

di_int di_zero ( void  )

Create a new integer with value zero.

Returns
New di_int instance with value 0, or NULL on failure
Since
1.0.0
di_int zero = di_zero();
assert(di_is_zero(zero));
di_release(&zero);
bool di_is_zero(di_int big)
Test if integer is zero.
di_int di_zero(void)
Create a new integer with value zero.
See also
di_one() for creating integer with value 1
di_is_zero() for checking if integer is zero

Definition at line 1158 of file dynamic_int.h.