Ruby
2.0.0p598(2014-11-13revision48408)
|
#include "ruby/ruby.h"
#include "internal.h"
#include <ctype.h>
#include <stdio.h>
#include <errno.h>
#include <math.h>
#include <float.h>
#include "ruby/util.h"
#include <sys/types.h>
#include <sys/stat.h>
#include "stdlib.h"
#include "string.h"
Go to the source code of this file.
Data Structures | |
struct | stack_node |
union | U |
struct | Bigint |
Macros | |
#define | S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) |
#define | mmtype long |
#define | mmcount (16 / SIZEOF_LONG) |
#define | A ((mmtype*)a) |
#define | B ((mmtype*)b) |
#define | C ((mmtype*)c) |
#define | D ((mmtype*)d) |
#define | mmstep (sizeof(mmtype) * mmcount) |
#define | mmprepare(base, size) |
#define | mmarg mmkind, size, high, low |
#define | mmargdecl int mmkind, size_t size, size_t high, size_t low |
#define | mmswap(a, b) mmswap_((a),(b),mmarg) |
#define | mmrot3(a, b, c) mmrot3_((a),(b),(c),mmarg) |
#define | PUSH(ll, rr) do { top->LL = (ll); top->RR = (rr); ++top; } while (0) /* Push L,l,R,r */ |
#define | POP(ll, rr) do { --top; (ll) = top->LL; (rr) = top->RR; } while (0) /* Pop L,l,R,r */ |
#define | med3(a, b, c) |
#define | PATH_MAX 8192 |
#define | IEEE_LITTLE_ENDIAN |
#define | MALLOC malloc |
#define | FREE free |
#define | PRIVATE_MEM 2304 |
#define | PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double)) |
#define | IEEE_Arith |
#define | word0(x) ((x).L[1]) |
#define | word1(x) ((x).L[0]) |
#define | dval(x) ((x).d) |
#define | Storeinc(a, b, c) |
#define | Exp_shift 20 |
#define | Exp_shift1 20 |
#define | Exp_msk1 0x100000 |
#define | Exp_msk11 0x100000 |
#define | Exp_mask 0x7ff00000 |
#define | P 53 |
#define | Bias 1023 |
#define | Emin (-1022) |
#define | Exp_1 0x3ff00000 |
#define | Exp_11 0x3ff00000 |
#define | Ebits 11 |
#define | Frac_mask 0xfffff |
#define | Frac_mask1 0xfffff |
#define | Ten_pmax 22 |
#define | Bletch 0x10 |
#define | Bndry_mask 0xfffff |
#define | Bndry_mask1 0xfffff |
#define | LSB 1 |
#define | Sign_bit 0x80000000 |
#define | Log2P 1 |
#define | Tiny0 0 |
#define | Tiny1 1 |
#define | Quick_max 14 |
#define | Int_max 14 |
#define | Avoid_Underflow |
#define | Flt_Rounds 1 |
#define | Rounding Flt_Rounds |
#define | rounded_product(a, b) ((a) *= (b)) |
#define | rounded_quotient(a, b) ((a) /= (b)) |
#define | Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) |
#define | Big1 0xffffffff |
#define | Pack_32 |
#define | FFFFFFFF 0xffffffffUL |
#define | Llong long long |
#define | ULLong unsigned Llong |
#define | MULTIPLE_THREADS 1 |
#define | ACQUIRE_DTOA_LOCK(n) /*unused right now*/ |
#define | FREE_DTOA_LOCK(n) /*unused right now*/ |
#define | Kmax 15 |
#define | Bcopy(x, y) |
#define | d0 word0(d) |
#define | d1 word1(d) |
#define | d0 word0(d) |
#define | d1 word1(d) |
#define | Scale_Bit 0x10 |
#define | n_bigtens 5 |
#define | rv_alloc(i) xmalloc(i) |
#define | rv_strdup(s, rve) nrv_alloc((s), (rve), strlen(s)+1) |
#define | DBL_MANH_SIZE 20 |
#define | DBL_MANL_SIZE 32 |
#define | DBL_ADJ (DBL_MAX_EXP - 2) |
#define | SIGFIGS ((DBL_MANT_DIG + 3) / 4 + 1) |
#define | dexp_get(u) ((int)(word0(u) >> Exp_shift) & ~Exp_msk1) |
#define | dexp_set(u, v) (word0(u) = (((int)(word0(u)) & ~Exp_mask) | ((v) << Exp_shift))) |
#define | dmanh_get(u) ((uint32_t)(word0(u) & Frac_mask)) |
#define | dmanl_get(u) ((uint32_t)word1(u)) |
Typedefs | |
typedef int( | cmpfunc_t )(const void *, const void *, void *) |
typedef U | double_u |
typedef struct Bigint | Bigint |
Functions | |
unsigned long | ruby_scan_oct (const char *start, size_t len, size_t *retlen) |
unsigned long | ruby_scan_hex (const char *start, size_t len, size_t *retlen) |
static unsigned long | scan_digits (const char *str, int base, size_t *retlen, int *overflow) |
unsigned long | ruby_strtoul (const char *str, char **endptr, int base) |
static void | mmswap_ (register char *a, register char *b, mmargdecl) |
static void | mmrot3_ (register char *a, register char *b, register char *c, mmargdecl) |
void | ruby_qsort (void *base, const size_t nel, const size_t size, cmpfunc_t *cmp, void *d) |
char * | ruby_strdup (const char *str) |
char * | ruby_getcwd (void) |
static Bigint * | Balloc (int k) |
static void | Bfree (Bigint *v) |
static Bigint * | multadd (Bigint *b, int m, int a) |
static Bigint * | s2b (const char *s, int nd0, int nd, ULong y9) |
static int | hi0bits (register ULong x) |
static int | lo0bits (ULong *y) |
static Bigint * | i2b (int i) |
static Bigint * | mult (Bigint *a, Bigint *b) |
static Bigint * | pow5mult (Bigint *b, int k) |
static Bigint * | lshift (Bigint *b, int k) |
static int | cmp (Bigint *a, Bigint *b) |
static Bigint * | diff (Bigint *a, Bigint *b) |
static double | ulp (double x_) |
static double | b2d (Bigint *a, int *e) |
static Bigint * | d2b (double d_, int *e, int *bits) |
static double | ratio (Bigint *a, Bigint *b) |
double | ruby_strtod (const char *s00, char **se) |
static int | quorem (Bigint *b, Bigint *S) |
static char * | nrv_alloc (const char *s, char **rve, size_t n) |
char * | ruby_dtoa (double d_, int mode, int ndigits, int *decpt, int *sign, char **rve) |
void | ruby_each_words (const char *str, void(*func)(const char *, int, void *), void *arg) |
char * | ruby_hdtoa (double d, const char *xdigs, int ndigits, int *decpt, int *sign, char **rve) |
Variables | |
static double | private_mem [PRIVATE_mem] |
static double * | pmem_next = private_mem |
static Bigint * | freelist [Kmax+1] |
static Bigint * | p5s |
static const double | tens [] |
static const double | bigtens [] = { 1e16, 1e32, 1e64, 1e128, 1e256 } |
static const double | tinytens [] |
static const char | INFSTR [] = "Infinity" |
static const char | NANSTR [] = "NaN" |
static const char | ZEROSTR [] = "0" |
#define ACQUIRE_DTOA_LOCK | ( | n | ) | /*unused right now*/ |
Definition at line 989 of file util.c.
Referenced by Balloc(), Bfree(), and pow5mult().
#define Avoid_Underflow |
Definition at line 859 of file util.c.
Referenced by ruby_strtod().
#define Bcopy | ( | x, | |
y | |||
) |
Definition at line 1055 of file util.c.
Referenced by multadd(), ruby_dtoa(), and ruby_strtod().
#define Bias 1023 |
Definition at line 840 of file util.c.
Referenced by d2b(), ruby_dtoa(), and ruby_strtod().
#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1)) |
Definition at line 955 of file util.c.
Referenced by ruby_strtod().
#define Big1 0xffffffff |
Definition at line 956 of file util.c.
Referenced by ruby_strtod().
#define Bletch 0x10 |
Definition at line 848 of file util.c.
Referenced by ruby_dtoa().
#define Bndry_mask 0xfffff |
Definition at line 849 of file util.c.
Referenced by ruby_dtoa(), and ruby_strtod().
#define Bndry_mask1 0xfffff |
Definition at line 850 of file util.c.
Referenced by ruby_strtod().
Definition at line 194 of file util.c.
Referenced by get_event_id(), mmrot3_(), and symbol2event_flag().
Referenced by b2d(), d2b(), math_acos(), math_acosh(), math_asin(), math_atanh(), math_gamma(), math_lgamma(), math_log(), math_log10(), math_log2(), and math_sqrt().
Referenced by b2d(), d2b(), and inet_pton().
#define DBL_ADJ (DBL_MAX_EXP - 2) |
Definition at line 3810 of file util.c.
Referenced by ruby_hdtoa().
#define DBL_MANH_SIZE 20 |
Definition at line 3808 of file util.c.
Referenced by ruby_hdtoa().
#define DBL_MANL_SIZE 32 |
Definition at line 3809 of file util.c.
Referenced by ruby_hdtoa().
Definition at line 3812 of file util.c.
Referenced by ruby_hdtoa().
Definition at line 3813 of file util.c.
Referenced by ruby_hdtoa().
Definition at line 3814 of file util.c.
Referenced by ruby_hdtoa().
Definition at line 3815 of file util.c.
Referenced by ruby_hdtoa().
#define dval | ( | x | ) | ((x).d) |
Definition at line 812 of file util.c.
Referenced by b2d(), d2b(), ratio(), ruby_dtoa(), ruby_strtod(), and ulp().
#define Emin (-1022) |
Definition at line 841 of file util.c.
Referenced by ruby_strtod().
#define Exp_1 0x3ff00000 |
Definition at line 842 of file util.c.
Referenced by b2d(), ruby_dtoa(), and ruby_strtod().
#define Exp_11 0x3ff00000 |
Definition at line 843 of file util.c.
Referenced by ruby_dtoa().
#define Exp_mask 0x7ff00000 |
Definition at line 838 of file util.c.
Referenced by ruby_dtoa(), ruby_strtod(), and ulp().
#define Exp_msk1 0x100000 |
Definition at line 836 of file util.c.
Referenced by d2b(), ratio(), ruby_dtoa(), ruby_strtod(), and ulp().
#define Exp_shift 20 |
Definition at line 834 of file util.c.
Referenced by d2b(), ruby_dtoa(), ruby_strtod(), and ulp().
#define Exp_shift1 20 |
Definition at line 835 of file util.c.
Referenced by ruby_dtoa().
#define FFFFFFFF 0xffffffffUL |
#define Flt_Rounds 1 |
Definition at line 869 of file util.c.
Referenced by ruby_dtoa(), and ruby_strtod().
#define Frac_mask 0xfffff |
Definition at line 845 of file util.c.
Referenced by d2b(), ruby_dtoa(), and ruby_strtod().
#define Frac_mask1 0xfffff |
Definition at line 846 of file util.c.
Referenced by ruby_dtoa().
#define FREE_DTOA_LOCK | ( | n | ) | /*unused right now*/ |
Definition at line 990 of file util.c.
Referenced by Balloc(), Bfree(), and pow5mult().
#define IEEE_Arith |
Definition at line 740 of file util.c.
Referenced by ruby_strtod().
#define Int_max 14 |
Definition at line 857 of file util.c.
Referenced by ruby_dtoa().
#define Log2P 1 |
Definition at line 853 of file util.c.
Referenced by ruby_dtoa(), and ruby_strtod().
#define LSB 1 |
Definition at line 851 of file util.c.
Referenced by ruby_strtod().
#define mmprepare | ( | base, | |
size | |||
) |
Definition at line 284 of file util.c.
Referenced by ruby_qsort().
Definition at line 246 of file util.c.
Referenced by ruby_qsort().
#define n_bigtens 5 |
Definition at line 1850 of file util.c.
Referenced by ruby_dtoa(), and ruby_strtod().
#define P 53 |
Definition at line 839 of file util.c.
Referenced by d2b(), ruby_dtoa(), ruby_strtod(), and ulp().
#define PATH_MAX 8192 |
Referenced by ruby_getcwd().
Definition at line 297 of file util.c.
Referenced by ruby_qsort().
#define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double)) |
Definition at line 296 of file util.c.
Referenced by ruby_qsort().
#define Quick_max 14 |
Definition at line 856 of file util.c.
Referenced by ruby_dtoa().
Definition at line 951 of file util.c.
Referenced by ruby_strtod().
Definition at line 952 of file util.c.
Referenced by ruby_strtod().
#define Rounding Flt_Rounds |
Definition at line 878 of file util.c.
Referenced by ruby_dtoa(), and ruby_strtod().
Definition at line 3023 of file util.c.
Referenced by nrv_alloc(), ruby_dtoa(), and ruby_hdtoa().
Definition at line 3038 of file util.c.
Referenced by ruby_dtoa(), and ruby_hdtoa().
#define Scale_Bit 0x10 |
Definition at line 1849 of file util.c.
Referenced by ruby_strtod().
#define SIGFIGS ((DBL_MANT_DIG + 3) / 4 + 1) |
Definition at line 3811 of file util.c.
Referenced by ruby_hdtoa().
#define Sign_bit 0x80000000 |
Definition at line 852 of file util.c.
Referenced by ruby_dtoa(), and ruby_hdtoa().
#define Ten_pmax 22 |
Definition at line 847 of file util.c.
Referenced by ruby_dtoa(), and ruby_strtod().
#define Tiny0 0 |
Definition at line 854 of file util.c.
Referenced by ruby_strtod().
#define Tiny1 1 |
Definition at line 855 of file util.c.
Referenced by ruby_strtod().
#define ULLong unsigned Llong |
#define word0 | ( | x | ) | ((x).L[1]) |
Definition at line 806 of file util.c.
Referenced by b2d(), d2b(), ratio(), ruby_dtoa(), ruby_hdtoa(), ruby_strtod(), and ulp().
#define word1 | ( | x | ) | ((x).L[0]) |
Definition at line 807 of file util.c.
Referenced by b2d(), d2b(), ruby_dtoa(), ruby_strtod(), and ulp().
Definition at line 1006 of file util.c.
References ACQUIRE_DTOA_LOCK, FREE_DTOA_LOCK, Bigint::k, Kmax, len, MALLOC, Bigint::maxwds, Bigint::next, PRIVATE_mem, Bigint::sign, Bigint::wds, and Bigint::x.
Referenced by d2b(), diff(), i2b(), lshift(), mult(), multadd(), ruby_dtoa(), ruby_strtod(), and s2b().
Definition at line 1041 of file util.c.
References ACQUIRE_DTOA_LOCK, FREE, FREE_DTOA_LOCK, Bigint::k, Kmax, Bigint::next, and v.
Referenced by lshift(), multadd(), pow5mult(), ruby_dtoa(), and ruby_strtod().
Definition at line 1436 of file util.c.
References i, Bigint::wds, and Bigint::x.
Referenced by diff(), quorem(), ruby_dtoa(), and ruby_strtod().
Definition at line 1465 of file util.c.
References a, b, Balloc(), c, cmp(), FFFFFFFF, i, Bigint::k, Bigint::sign, Storeinc, ULLong, Bigint::wds, and Bigint::x.
Referenced by num_interval_step_size(), num_step(), pair_byte_cmp(), rb_dlptr_cmp(), rb_fiddle_ptr_cmp(), ruby_dtoa(), and ruby_strtod().
|
static |
Definition at line 1216 of file util.c.
References b, Balloc(), i, Bigint::wds, and Bigint::x.
Referenced by pow5mult(), ruby_dtoa(), and ruby_strtod().
|
static |
Definition at line 1382 of file util.c.
References Balloc(), Bfree(), i, Bigint::k, Bigint::maxwds, n, Bigint::wds, and Bigint::x.
Referenced by ruby_dtoa(), and ruby_strtod().
Definition at line 1227 of file util.c.
References a, b, Balloc(), c, FFFFFFFF, Bigint::k, Bigint::maxwds, Storeinc, ULLong, Bigint::wds, and Bigint::x.
Referenced by iseq_specialized_instruction(), pow5mult(), ruby_dtoa(), and ruby_strtod().
Definition at line 1059 of file util.c.
References a, b, Balloc(), Bcopy, Bfree(), FFFFFFFF, i, Bigint::k, Bigint::maxwds, ULLong, Bigint::wds, and Bigint::x.
Referenced by pow5mult(), ruby_dtoa(), and s2b().
|
static |
Definition at line 1330 of file util.c.
References ACQUIRE_DTOA_LOCK, b, Bfree(), FREE_DTOA_LOCK, i, i2b(), mult(), multadd(), and Bigint::next.
Referenced by ruby_dtoa(), and ruby_strtod().
Definition at line 1791 of file util.c.
References b2d(), dval, Exp_msk1, Bigint::k, Bigint::wds, and word0.
Referenced by ruby_strtod().
Definition at line 3093 of file util.c.
References b, Balloc(), Bcopy, Bfree(), Bias, bigtens, Bletch, Bndry_mask, cmp(), d, d2b(), diff(), dval, Exp_1, Exp_11, Exp_mask, Exp_msk1, Exp_shift, Exp_shift1, Flt_Rounds, Frac_mask, Frac_mask1, hi0bits(), i, i2b(), int, Int_max, Bigint::k, Log2P, lshift(), mult(), multadd(), n_bigtens, no_digits, P, pow5mult(), Quick_max, quorem(), ret, Rounding, rv_alloc, rv_strdup, s, S, Bigint::sign, Sign_bit, Ten_pmax, tens, Bigint::wds, word0, word1, and Bigint::x.
Referenced by flo_to_s(), and w_float().
Definition at line 3766 of file util.c.
References arg, end, int, ISSPACE, len, and str.
Referenced by proc_options(), and ruby_set_debug_option().
char* ruby_getcwd | ( | void | ) |
unsigned long ruby_scan_hex | ( | const char * | start, |
size_t | len, | ||
size_t * | retlen | ||
) |
Definition at line 42 of file util.c.
References int, retval, s, strchr(), and tmp.
Referenced by unescape_unicode_bmp(), and unescape_unicode_list().
unsigned long ruby_scan_oct | ( | const char * | start, |
size_t | len, | ||
size_t * | retlen | ||
) |
Definition at line 28 of file util.c.
References int, retval, and s.
Referenced by parser_tokadd_escape(), and unescape_nonascii().
char* ruby_strdup | ( | const char * | str | ) |
Definition at line 456 of file util.c.
References len, memcpy(), strlen(), tmp, and xmalloc.
Referenced by argf_initialize_copy(), compat_init_setproctitle(), features_index_add_single(), load_lock(), register_init_ext(), and ruby_setenv().
double ruby_strtod | ( | const char * | s00, |
char ** | se | ||
) |
Definition at line 1944 of file util.c.
References Avoid_Underflow, Balloc(), Bcopy, Bfree(), Bias, Big0, Big1, bigtens, Bndry_mask, Bndry_mask1, c, cmp(), d2b(), DBL_DIG, DBL_MAX_10_EXP, DBL_MAX_EXP, diff(), dval, e, Emin, errno, Exp_1, Exp_mask, Exp_msk1, Exp_shift, FLT_RADIX, Flt_Rounds, Frac_mask, i, i2b(), IEEE_Arith, int, ISDIGIT, Bigint::k, Log2P, LSB, lshift(), match(), mult(), n_bigtens, nf, NULL, P, pow5mult(), ratio(), ret, rounded_product, rounded_quotient, Rounding, s, s2b(), Scale_Bit, Bigint::sign, strchr(), Ten_pmax, tens, Tiny0, Tiny1, ulp(), Bigint::wds, word0, word1, and Bigint::x.
Definition at line 1110 of file util.c.
References b, Balloc(), i, Bigint::k, multadd(), Bigint::wds, and Bigint::x.
Referenced by ruby_strtod().
|
static |
|
static |
Definition at line 1838 of file util.c.
Referenced by ruby_dtoa(), and ruby_strtod().
|
static |
|
static |
|
static |
Definition at line 1827 of file util.c.
Referenced by ruby_dtoa(), and ruby_strtod().
|
static |