00001 #include "multiprec.h"
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include <stdarg.h>
00005
00015 void *(*ymp_malloc)(size_t size) = malloc;
00016
00022 void *(*ymp_realloc)(void *pv_mem, size_t size) = realloc;
00023
00028 void (*ymp_free)(void *pv_mem) = free;
00029
00043 static void
00044 ymp_alloc_error_default(const char *psz_msg, size_t size)
00045 {
00046 fprintf(stderr, "[メモリー確保失敗] %s -- %ubytes\n", psz_msg, size);
00047 abort();
00048 }
00049
00055 static void
00056 ymp_error_default(const char *format, ...)
00057 {
00058 va_list ap;
00059 va_start(ap, format);
00060 vfprintf(stderr, format, ap);
00061 va_end(ap);
00062 fputc('\n', stderr);
00063 }
00064
00070 static void
00071 ymp_fatal_default(const char *format, ...)
00072 {
00073 va_list ap;
00074 va_start(ap, format);
00075 vfprintf(stderr, format, ap);
00076 va_end(ap);
00077 fputc('\n', stderr);
00078 abort();
00079 }
00080
00081
00087 void (*ymp_warning)(const char *format, ...) = ymp_error_default;
00088
00094 void (*ymp_error)(const char *format, ...) = ymp_error_default;
00095
00102 void (*ymp_fatal)(const char *format, ...) = ymp_fatal_default;
00103
00111 void (*ymp_alloc_error)(const char *psz_msg, size_t size) = ymp_alloc_error_default;
00112
00128 size_t digit_len_to_str_len(size_t len, digit_t r)
00129 {
00130 static const unsigned log_2_r_map[36+1] = {
00131 0, 0, 1, 1, 2, 2, 2, 2,
00132 3, 3, 3, 3, 3, 3, 3, 3,
00133 4, 4, 4, 4, 4, 4, 4, 4,
00134 4, 4, 4, 4, 4, 4, 4, 4,
00135 5, 5, 5, 5, 5
00136 };
00137
00138 return len * DIGIT_BIT / log_2_r_map[r] + 1;
00139 }
00140
00141