メインページ   モジュール   データ構造   ファイル一覧   データフィールド   グローバル  

初期化・破棄
[多倍長整数]


マクロ定義

#define to_sign_check(self, val)
#define not_to_sign_check(self, val)   (void)(self->sign = positive_sign)
#define do_assign_integral_value(type, self, val, allocator, sign_check)
#define define_ymp_initialize_integral_type(type, postfix, sign_check)
#define do_assign_floating_value(type, sys_suffix, funcname, allocator)
#define ymp_alloca_initialize(self, new_len)
 多倍長整数を、`alloca()により'一定のdigit列を確保した状態で初期化し、0を代入. より詳しく...


関数

void ymp_initialize (mp_ref_t self)
 多倍長整数を標準初期化指定子の値で初期化. より詳しく...

void ymp_destroy (mp_ref_t self)
 多倍長整数を破棄し、digit列を解放する。. より詳しく...

void ymp_reinitialize (mp_ref_t self)
 初期化済の多倍長整数を再び初期状態にする。. より詳しく...

void ymp_initialize_by_mp (mp_ref_t self, mp_cref_t other)
 ディープコピーにより多倍長整数を初期化. より詳しく...

void ymp_reserve_and_initialize_by_digit (mp_ref_t self, size_t len, digit_t d)
 多倍長整数を、一定のdigit列を確保した状態で初期化し、digit_tを代入. より詳しく...

void ymp_initialize_by_digit (mp_ref_t self, digit_t d)
 多倍長整数を、digit_tを代入して初期化. より詳しく...

void ymp_reserve_and_initialize (mp_ref_t self, size_t len)
 多倍長整数を、一定のdigit列を確保した状態で初期化し、0を代入. より詳しく...

void ymp_initialize_by_array (mp_ref_t self, size_t len, const digit_t *array)
 多倍長整数をdigit_tの列により初期化. より詳しく...

void ymp_initialize_by_char (mp_ref_t self, signed char val)
 多倍長整数に signed char 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_short (mp_ref_t self, short val)
 多倍長整数に short 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_int (mp_ref_t self, int val)
 多倍長整数に int 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_long (mp_ref_t self, long val)
 多倍長整数に long 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_uchar (mp_ref_t self, unsigned char val)
 多倍長整数に unsigned char 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_ushort (mp_ref_t self, unsigned short val)
 多倍長整数に unsigned short 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_uint (mp_ref_t self, unsigned int val)
 多倍長整数に unsigned int 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_ulong (mp_ref_t self, unsigned long val)
 多倍長整数に unsigned long 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_intmax (mp_ref_t self, intmax_t val)
 多倍長整数に intmax_t 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_uintmax (mp_ref_t self, uintmax_t val)
 多倍長整数に uintmax_t 型から値を代入して初期化. より詳しく...

void ymp_initialize_by_double (mp_ref_t self, double val)
 多倍長整数にdouble型から値を代入して初期化. より詳しく...

mp_ref_t ymp_dup (mp_cref_t orig)
 ディープコピーにより多倍長整数を新規に生成. より詳しく...

void ymp_reserve (mp_ref_t self, size_t len)
 多倍長整数が、少なくとも len 個からなるdigit列を持つことを保証する. より詳しく...

void ymp_cut_down (mp_ref_t self)
 多倍長整数が保持している余分なdigitを(可能なら)解放する。. より詳しく...

void ymp_initialize_by_string (mp_ref_t self, const char *psz, char **endptr, unsigned radix)
 文字列形式で表された整数値でstruct multiprecを初期化. より詳しく...


マクロ定義の解説

#define to_sign_check self,
val   
 

値:

if (val >= 0)                                   \
    {                                           \
      self->sign = positive_sign;               \
    }                                           \
  else                                          \
    {                                           \
      self->sign = negative_sign;               \
      val = -val;                               \
    }

construct.c136 行で定義されています。

呼出 ymp_assign_char, ymp_assign_int, ymp_assign_intmax, ymp_assign_long, ymp_assign_short, ymp_initialize_by_char, ymp_initialize_by_int, ymp_initialize_by_intmax, ymp_initialize_by_long, ymp_initialize_by_short, と ymp_initialize_by_uintmax.

#define not_to_sign_check self,
val       (void)(self->sign = positive_sign)
 

construct.c155 行で定義されています。

呼出 ymp_assign_uchar, ymp_assign_uint, ymp_assign_uintmax, ymp_assign_ulong, ymp_assign_ushort, ymp_initialize_by_uchar, ymp_initialize_by_uint, ymp_initialize_by_ulong, と ymp_initialize_by_ushort.

#define do_assign_integral_value type,
self,
val,
allocator,
sign_check   
 

値:

static const size_t len                                          \
    = sizeof(type)/sizeof(digit_t)+!!(sizeof(type)%sizeof(digit_t));     \
  size_t i;                                                              \
                                                                         \
  sign_check(self, val);                                                 \
  allocator(self, len);                                                  \
                                                                         \
  for (i=0; val; ++i)                                                    \
    {                                                                    \
      self->digits[i] = (digit_t)val & DIGIT_MAX;                        \
      val >>= DIGIT_BIT;                                                 \
    }                                                                    \
  self->used = i;

construct.c168 行で定義されています。

#define define_ymp_initialize_integral_type type,
postfix,
sign_check   
 

値:

                                                                           \
void ymp_initialize_by_##postfix(mp_ref_t self, type val)                  \
{                                                                          \
  do_assign_integral_value(type, self, val, YMP_ALLOC_DIGITS, sign_check); \
}

construct.c192 行で定義されています。

#define do_assign_floating_value type,
sys_suffix,
funcname,
allocator   
 

construct.c218 行で定義されています。

呼出 ymp_assign_double, と ymp_initialize_by_double.

#define ymp_alloca_initialize self,
new_len   
 

値:

do {                                                            \
  (self)->sign = positive_sign;                                 \
  (self)->len = (self)->used = 0;                               \
  YMP_TEMP_ALLOCATE((self)->digits, digit_t, (new_len));        \
  (self)->len = (new_len);                                      \
} while (0)
多倍長整数を、`alloca()により'一定のdigit列を確保した状態で初期化し、0を代入.

引数:
self  初期化する多倍長整数へのポインタ
new_len  確保するdigit列の要素数
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。
覚え書き:
このマクロではself, new_lenは複数回評価される

multiprec.h276 行で定義されています。

呼出 ymp_binary_sunzi, ymp_euclid_ex, ymp_iroot, ymp_is_perfect_power, ymp_modinv, ymp_nsqrt_mod2exp, ymp_odd_root, ymp_odd_sqrt, と ymp_proot.


関数の解説

void ymp_initialize mp_ref_t    self [inline]
 

多倍長整数を標準初期化指定子の値で初期化.

初期化されたselfは値としては0である。 MULTIPREC_INITIALIZERによる初期化と同じ

引数:
self  初期化すべきstruct multiprecへのポインタ
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c20 行で定義されています。

参照 MULTIPREC_INITIALIZER.

00021 {
00022   static const struct multiprec prototype = MULTIPREC_INITIALIZER;
00023   memcpy(self, &prototype, sizeof(struct multiprec));
00024 }

void ymp_destroy mp_ref_t    self [inline]
 

多倍長整数を破棄し、digit列を解放する。.

引数:
self  破棄する多倍長整数へのポインタ
事前条件:
selfは初期化済のこと。未初期化の場合の動作は不定

construct.c33 行で定義されています。

参照 YMP_FREE_DIGITS.

00034 {
00035   YMP_FREE_DIGITS(self);
00036 }

void ymp_reinitialize mp_ref_t    self
 

初期化済の多倍長整数を再び初期状態にする。.

したがって、値としては0となる。

引数:
self  多倍長整数へのポインタ
事前条件:
selfは初期化済のこと。未初期化の場合の動作は不定

construct.c46 行で定義されています。

参照 ymp_destroy, と ymp_initialize.

00047 {
00048   ymp_destroy(self);
00049   ymp_initialize(self);
00050 }

void ymp_initialize_by_mp mp_ref_t    self,
mp_cref_t    other
[inline]
 

ディープコピーにより多倍長整数を初期化.

引数:
self  初期化する多倍長整数
other  コピー元の多倍長整数
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。
otherは初期化済のこと。未初期化の場合の動作は不定

construct.c61 行で定義されています。

参照 digit_t, multiprec::digits, multiprec::len, mp_cref_t, multiprec::used, と YMP_ALLOC_DIGITS.

00062 {
00063   memcpy(self, other, sizeof(*self)-sizeof(digit_t*));
00064   YMP_ALLOC_DIGITS(self, self->len);
00065   memcpy(self->digits, other->digits, sizeof(digit_t)*self->used);
00066 }

void ymp_reserve_and_initialize_by_digit mp_ref_t    self,
size_t    len,
digit_t    d
[inline]
 

多倍長整数を、一定のdigit列を確保した状態で初期化し、digit_tを代入.

引数:
self  初期化する多倍長整数へのポインタ
len  確保するdigit列の要素数
d  代入する数値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c76 行で定義されています。

参照 digit_t, multiprec::digits, positive_sign, multiprec::sign, multiprec::used, と YMP_ALLOC_DIGITS.

00077 {
00078   self->sign = positive_sign;
00079   YMP_ALLOC_DIGITS(self, len);
00080   self->used = 1;
00081   self->digits[0] = d;
00082 }

void ymp_initialize_by_digit mp_ref_t    self,
digit_t    d
 

多倍長整数を、digit_tを代入して初期化.

引数:
self  初期化する多倍長整数へのポインタ
d  代入する数値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c91 行で定義されています。

参照 digit_t, と ymp_reserve_and_initialize_by_digit.

00092 {
00093   ymp_reserve_and_initialize_by_digit(self, 1, d);
00094 }

void ymp_reserve_and_initialize mp_ref_t    self,
size_t    len
 

多倍長整数を、一定のdigit列を確保した状態で初期化し、0を代入.

引数:
self  初期化する多倍長整数へのポインタ
len  確保するdigit列の要素数
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c103 行で定義されています。

参照 ymp_reserve_and_initialize_by_digit.

00104 {
00105   ymp_reserve_and_initialize_by_digit(self, len, 0);
00106 }

void ymp_initialize_by_array mp_ref_t    self,
size_t    len,
const digit_t   array
 

多倍長整数をdigit_tの列により初期化.

引数:
self  初期化する多倍長整数へのポインタ
len  arrayがポイントする配列の要素数
array  多倍長整数の各桁を表すdigit_tの列の先頭へのポインタ
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c118 行で定義されています。

参照 digit_t, multiprec::digits, positive_sign, multiprec::sign, multiprec::used, と YMP_ALLOC_DIGITS.

00119 {
00120   self->sign = positive_sign;
00121   self->used = len;
00122   YMP_ALLOC_DIGITS(self, len);
00123   memcpy(self->digits, array, len);
00124 } 

void ymp_initialize_by_char mp_ref_t    self,
signed char    val
 

多倍長整数に signed char 型から値を代入して初期化.

引数:
self  初期化される多倍長整数へのポインタ
val  代入する値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c204 行で定義されています。

参照 to_sign_check.

00223 {                                                                       \

void ymp_initialize_by_short mp_ref_t    self,
short    val
 

多倍長整数に short 型から値を代入して初期化.

引数:
self  初期化される多倍長整数へのポインタ
val  代入する値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c205 行で定義されています。

参照 to_sign_check.

00223 {                                                                       \

void ymp_initialize_by_int mp_ref_t    self,
int    val
 

多倍長整数に int 型から値を代入して初期化.

引数:
self  初期化される多倍長整数へのポインタ
val  代入する値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c206 行で定義されています。

参照 to_sign_check.

00223 {                                                                       \

void ymp_initialize_by_long mp_ref_t    self,
long    val
 

多倍長整数に long 型から値を代入して初期化.

引数:
self  初期化される多倍長整数へのポインタ
val  代入する値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c207 行で定義されています。

参照 to_sign_check.

00223 {                                                                       \

void ymp_initialize_by_uchar mp_ref_t    self,
unsigned char    val
 

多倍長整数に unsigned char 型から値を代入して初期化.

引数:
self  初期化される多倍長整数へのポインタ
val  代入する値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c208 行で定義されています。

参照 not_to_sign_check.

00223 {                                                                       \

void ymp_initialize_by_ushort mp_ref_t    self,
unsigned short    val
 

多倍長整数に unsigned short 型から値を代入して初期化.

引数:
self  初期化される多倍長整数へのポインタ
val  代入する値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c209 行で定義されています。

参照 not_to_sign_check.

00223 {                                                                       \

void ymp_initialize_by_uint mp_ref_t    self,
unsigned int    val
 

多倍長整数に unsigned int 型から値を代入して初期化.

引数:
self  初期化される多倍長整数へのポインタ
val  代入する値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c210 行で定義されています。

参照 not_to_sign_check.

00223 {                                                                       \

void ymp_initialize_by_ulong mp_ref_t    self,
unsigned long    val
 

多倍長整数に unsigned long 型から値を代入して初期化.

引数:
self  初期化される多倍長整数へのポインタ
val  代入する値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c211 行で定義されています。

参照 not_to_sign_check.

00223 {                                                                       \

void ymp_initialize_by_intmax mp_ref_t    self,
intmax_t    val
 

多倍長整数に intmax_t 型から値を代入して初期化.

引数:
self  初期化される多倍長整数へのポインタ
val  代入する値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c213 行で定義されています。

参照 to_sign_check.

00223 {                                                                       \

void ymp_initialize_by_uintmax mp_ref_t    self,
uintmax_t    val
 

多倍長整数に uintmax_t 型から値を代入して初期化.

引数:
self  初期化される多倍長整数へのポインタ
val  代入する値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c214 行で定義されています。

参照 to_sign_check.

00223 {                                                                       \

void ymp_initialize_by_double mp_ref_t    self,
double    val
 

多倍長整数にdouble型から値を代入して初期化.

double型の値の整数部分が代入される。

引数:
self  初期化される多倍長整数へのポインタ
val  代入する値
事前条件:
selfは未初期化のこと。初期化済の場合、メモリーがリークする。

construct.c262 行で定義されています。

参照 do_assign_floating_value, と YMP_ALLOC_DIGITS.

00263 {
00264   do_assign_floating_value(double,, "ymp_initialize_by_double", YMP_ALLOC_DIGITS);
00265 }

mp_ref_t ymp_dup mp_cref_t    orig
 

ディープコピーにより多倍長整数を新規に生成.

引数:
orig  元の多倍長整数
事前条件:
origは初期化済のこと。未初期化の場合の動作は不定

construct.c275 行で定義されています。

参照 mp_cref_t, ymp_alloc_error, ymp_initialize_by_mp, と ymp_malloc.

00276 {
00277   struct multiprec *p = ymp_malloc(sizeof(struct multiprec));
00278   if (!p)
00279     ymp_alloc_error("can't dup struct multiprec", sizeof(struct multiprec));
00280 
00281   ymp_initialize_by_mp(p, orig);
00282   return p;
00283 }

void ymp_reserve mp_ref_t    self,
size_t    len
 

多倍長整数が、少なくとも len 個からなるdigit列を持つことを保証する.

多倍長整数がlen個以上のdigitを現在保持している場合は、何もしない。

引数:
self  多倍長整数へのポインタ
len  確保するdigit列の要素数
事前条件:
selfは初期化済のこと。未初期化の場合の動作は不定
覚え書き:
self->digitsは変化するかも知れない

construct.c295 行で定義されています。

参照 multiprec::len, と YMP_REALLOC_DIGITS.

呼出 ymp_assign_double.

00296 {
00297   if (self->len < len) YMP_REALLOC_DIGITS(self, len);
00298 }

void ymp_cut_down mp_ref_t    self
 

多倍長整数が保持している余分なdigitを(可能なら)解放する。.

解放によりself->digits[]の長さが変化したときにはself->lenは適切に設定される

引数:
self  多倍長整数へのポインタ
事前条件:
selfは初期化済のこと。未初期化の場合の動作は不定
事後条件:
self->sign, self->usedは変化しない
覚え書き:
self->digitsは変化するかも知れない

construct.c310 行で定義されています。

参照 multiprec::used, と YMP_REALLOC_DIGITS.

00311 {
00312   YMP_REALLOC_DIGITS(self, self->used);
00313 }

void ymp_initialize_by_string mp_ref_t    self,
const char *    psz,
char **    endptr,
unsigned    radix
 

文字列形式で表された整数値でstruct multiprecを初期化.

引数のの意味はstrtol(), strtoul()と同じ

引数:
self  代入される多倍長整数へのポインタ
psz  代入する値.
endptr  NULLでなければ、整数として認識できなくなった最初の位置への ポインタが*endptrに格納される
radix  文字列表現の基数。0ならば基数は整数値のプレフィックスから 自動的に決定される
事前条件:
selfは未初期化のこと。初期化済の場合、動作は不定
0 <= radix <= 36
例外:
ymp_error  radixが範囲外のとき
ymp_alloc_error  格納領域のメモリーを確保できないとき

construct_str.c141 行で定義されています。

参照 ymp_assign_string, と ymp_initialize.

00143 {
00144   ymp_initialize(self);
00145   ymp_assign_string(self, psz, endptr, radix);
00146 }


YMPに対してTue Mar 16 19:23:52 2004に生成されました。 doxygen1.2.14 作者 Dimitri van Heesch, © 1997-2002