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

下位関数群
[出力]


関数

int do_snprint (char *buf, size_t len, mp_cref_t mz, digit_t radix)
 多倍長整数をr進表記で文字列に変換. より詳しく...

int ymp_fprint (FILE *fp, mp_cref_t mz, digit_t radix)
 多倍長整数をr進表記でファイルに出力. より詳しく...

int ymp_snprint (char *buf, size_t len, mp_cref_t mz, digit_t radix)
 多倍長整数をr進表記で文字列に出力. より詳しく...


変数

const int digit_prec = DIGIT_BIT/4 + (DIGIT_BIT%4!=0)

関数の解説

int do_snprint char *    buf,
size_t    len,
mp_cref_t    mz,
digit_t    radix
[inline, static]
 

多倍長整数をr進表記で文字列に変換.

buf[buf_len-1]から、バッファーを逆順に埋める。先頭部分は使われないかも知れない。

引数:
buf  出力を受けるバッファーの先頭へのポインタ
len  bufの長さ。これ以上は出力されない
mz  出力されるstruct multiprecへのポインタ
radix  出力の表記に用いる基数
戻り値:
出力されたバイト数。 もし、lenが十分でなく出力を打ち切ったときには十分であったなら書きこまれた であろうバイト数を返す

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

参照 digit_t, mp_cref_t, ymp_divmodabs_digit, と YMP_TEMP_ALLOCATE.

呼出 ymp_fprint, と ymp_snprint.

00034 {
00035   int ret = 0;
00036   size_t tmp_used = mz->used;
00037   digit_t *tmp;
00038 
00039   if (tmp_used == 0) 
00040     {
00041       if (len > 0) buf[len-1] = '0';
00042       return 1;
00043     }
00044 
00045   YMP_TEMP_ALLOCATE(tmp, digit_t, tmp_used);
00046   memcpy(tmp, mz->digits, sizeof(digit_t)*tmp_used);
00047 
00048   do
00049     {
00050       digit_t d = ymp_divmodabs_digit(tmp, tmp, radix, tmp_used);
00051       if (!tmp[tmp_used-1]) --tmp_used;
00052 
00053       if (len-- > 0) buf[len] = "0123456789abcdefghijklmnopqrstuvwxyz"[d];
00054       
00055       ++ret;
00056     } while (tmp_used != 0);
00057 
00058   if (len-- > 0 && mz->sign) {buf[len] = '-'; ++ret;}
00059   return ret;
00060 }

int ymp_fprint FILE *    fp,
mp_cref_t    mz,
digit_t    radix
 

多倍長整数をr進表記でファイルに出力.

引数:
fp  出力先のファイル
mz  出力されるstruct multiprecへのポインタ
radix  出力の表記に用いる基数
戻り値:
出力されたバイト数。

io.c71 行で定義されています。

参照 digit_len_to_str_len, digit_t, do_snprint, mp_cref_t, と YMP_TEMP_ALLOCATE.

00072 {
00073   int ret;
00074   char *buf;
00075   size_t buf_len = digit_len_to_str_len(mz->used, radix);
00076 
00077   YMP_TEMP_ALLOCATE(buf, char, buf_len);
00078   ret = do_snprint(buf, buf_len, mz, radix);
00079   assert(ret <= buf_len);
00080   return fwrite(buf+buf_len-ret, 1, ret, fp);
00081 }

int ymp_snprint char *    buf,
size_t    len,
mp_cref_t    mz,
digit_t    radix
 

多倍長整数をr進表記で文字列に出力.

引数:
buf  出力を受けるバッファーの先頭へのポインタ
len  bufの長さ。これ以上は出力されない
mz  出力されるstruct multiprecへのポインタ
radix  出力の表記に用いる基数
戻り値:
出力されたバイト数。 もし、lenが十分でなく出力を打ち切ったときには十分であったなら書きこまれた であろうバイト数を返す

io.c94 行で定義されています。

参照 digit_len_to_str_len, digit_t, do_snprint, mp_cref_t, と YMP_TEMP_ALLOCATE.

00095 {
00096   int ret;
00097   char *new_buf;
00098   size_t new_buf_len = digit_len_to_str_len(mz->used, radix);
00099 
00100   YMP_TEMP_ALLOCATE(new_buf, char, new_buf_len);
00101   ret = do_snprint(new_buf, new_buf_len, mz, radix);
00102   assert(ret <= new_buf_len);
00103 
00104   if (ret > len) memcpy(buf, new_buf, len);
00105   else memcpy(buf, new_buf+new_buf_len-ret, ret);
00106   return ret;
00107 }


変数の解説

const int digit_prec = DIGIT_BIT/4 + (DIGIT_BIT%4!=0) [static]
 

io.c18 行で定義されています。

呼出 ymp_dump, と ymp_print_hex.


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