00001 00090 inline int plint_num_n2i(plint_num_t n) 00091 { 00092 return (n.typ == PLINT_num_dbl) ? (int)n.val.num_dbl : n.val.num_int; 00093 } 00094 00100 inline double plint_num_n2d(plint_num_t n) 00101 { 00102 return (n.typ == PLINT_num_dbl) ? n.val.num_dbl : (double)n.val.num_int; 00103 } 00104 00110 inline plint_num_t plint_num_INT(int i) 00111 { 00112 plint_num_t ret; 00113 ret.typ = PLINT_num_int; 00114 ret.val.num_int = i; 00115 return ret; 00116 } 00117 00123 inline plint_num_t plint_num_DBL(double d) 00124 { 00125 plint_num_t ret; 00126 ret.typ = PLINT_num_dbl; 00127 ret.val.num_dbl = d; 00128 return ret; 00129 } 00130 00136 plint_val_t plint_num_val(plint_num_t num) 00137 { 00138 plint_val_t ret; 00139 switch (num.typ) 00140 { 00141 case PLINT_num OR PLINT_num_int: 00142 ret.num_int = num.val.num_int; 00143 break; 00144 00145 case PLINT_num_dbl: 00146 ret.num_dbl = num.val.num_dbl; 00147 break; 00148 00149 default: 00150 } 00151 return ret; 00152 } 00153 00162 inline plint_num_t plint_ptr_num(plint_ptr_t p) 00163 { 00164 return plint_val_num(&p->val, p->typ); 00165 } 00166 00167 inline plint_ptr_t plint_num_ptr(plint_num_t n) 00168 { 00169 plint_ptr_t p = plint_ptr_new(n.typ); 00170 return plint_num_set(p, n); 00171 } 00172 00173 inline plint_ptr_t plint_num_set(plint_ptr_t p, plint_num_t n) 00174 { 00175 p->typ = n.typ; 00176 p->val = plint_num_val(n); 00177 return p; 00178 } 00179