X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_printer.c;h=e0821f2a2b4ef5d57ee6927d9e436b9f6b587a72;hb=ca90b151a05f17ccc1c3215ff24dc5d7b9198ff4;hp=5bfaac9092fa5ce6693d7666c07e7f2d12bb8366;hpb=5b898f1e08d13ea4cbd90b149df11f5a8e4b7844;p=platform%2Fupstream%2Fisl.git diff --git a/isl_printer.c b/isl_printer.c index 5bfaac9..e0821f2 100644 --- a/isl_printer.c +++ b/isl_printer.c @@ -26,6 +26,13 @@ static __isl_give isl_printer *file_print_str(__isl_take isl_printer *p, return p; } +static __isl_give isl_printer *file_print_double(__isl_take isl_printer *p, + double d) +{ + fprintf(p->file, "%g", d); + return p; +} + static __isl_give isl_printer *file_print_int(__isl_take isl_printer *p, int i) { fprintf(p->file, "%d", i); @@ -116,6 +123,24 @@ static __isl_give isl_printer *str_print_str(__isl_take isl_printer *p, return str_print(p, s, strlen(s)); } +static __isl_give isl_printer *str_print_double(__isl_take isl_printer *p, + double d) +{ + int left = p->buf_size - p->buf_n; + int need = snprintf(p->buf + p->buf_n, left, "%g", d); + if (need >= left) { + if (grow_buf(p, need)) + goto error; + left = p->buf_size - p->buf_n; + need = snprintf(p->buf + p->buf_n, left, "%g", d); + } + p->buf_n += need; + return p; +error: + isl_printer_free(p); + return NULL; +} + static __isl_give isl_printer *str_print_int(__isl_take isl_printer *p, int i) { int left = p->buf_size - p->buf_n; @@ -138,21 +163,21 @@ static __isl_give isl_printer *str_print_isl_int(__isl_take isl_printer *p, { char *s; int len; - isl_int_print_gmp_free_t gmp_free; s = isl_int_get_str(i); len = strlen(s); if (len < p->width) p = str_print_indent(p, p->width - len); p = str_print(p, s, len); - mp_get_memory_functions(NULL, NULL, &gmp_free); - (*gmp_free)(s, len + 1); + isl_int_free_str(s); return p; } struct isl_printer_ops { __isl_give isl_printer *(*start_line)(__isl_take isl_printer *p); __isl_give isl_printer *(*end_line)(__isl_take isl_printer *p); + __isl_give isl_printer *(*print_double)(__isl_take isl_printer *p, + double d); __isl_give isl_printer *(*print_int)(__isl_take isl_printer *p, int i); __isl_give isl_printer *(*print_isl_int)(__isl_take isl_printer *p, isl_int i); @@ -164,6 +189,7 @@ struct isl_printer_ops { static struct isl_printer_ops file_ops = { file_start_line, file_end_line, + file_print_double, file_print_int, file_print_isl_int, file_print_str, @@ -173,6 +199,7 @@ static struct isl_printer_ops file_ops = { static struct isl_printer_ops str_ops = { str_start_line, str_end_line, + str_print_double, str_print_int, str_print_isl_int, str_print_str, @@ -227,13 +254,15 @@ error: return NULL; } -void isl_printer_free(__isl_take isl_printer *p) +void *isl_printer_free(__isl_take isl_printer *p) { if (!p) - return; + return NULL; free(p->buf); isl_ctx_deref(p->ctx); free(p); + + return NULL; } isl_ctx *isl_printer_get_ctx(__isl_keep isl_printer *printer) @@ -331,10 +360,21 @@ __isl_give isl_printer *isl_printer_print_str(__isl_take isl_printer *p, { if (!p) return NULL; + if (!s) + return isl_printer_free(p); return p->ops->print_str(p, s); } +__isl_give isl_printer *isl_printer_print_double(__isl_take isl_printer *p, + double d) +{ + if (!p) + return NULL; + + return p->ops->print_double(p, d); +} + __isl_give isl_printer *isl_printer_print_int(__isl_take isl_printer *p, int i) { if (!p)