update isl for fix in parameter alignment
[barvinok.git] / isl_obj_str.c
blobf633bbdc44e96c5e9e0b48193b14507dc3631088
1 #include <string.h>
2 #include <isl_obj_str.h>
4 __isl_give isl_str *isl_str_alloc(struct isl_ctx *ctx)
6 isl_str *str;
8 str = isl_alloc_type(ctx, struct isl_str);
9 if (!str)
10 return NULL;
12 str->ctx = ctx;
13 isl_ctx_ref(str->ctx);
14 str->ref = 1;
16 str->s = NULL;
18 return str;
21 __isl_give isl_str *isl_str_copy(__isl_keep isl_str *str)
23 if (!str)
24 return NULL;
26 str->ref++;
27 return str;
30 void isl_str_free(__isl_take isl_str *str)
32 int i;
34 if (!str)
35 return;
37 if (--str->ref > 0)
38 return;
40 free(str->s);
41 isl_ctx_deref(str->ctx);
42 free(str);
45 static void *isl_obj_str_copy(void *v)
47 return isl_str_copy((isl_str *)v);
50 static void isl_obj_str_free(void *v)
52 isl_str_free((isl_str *)v);
55 static __isl_give isl_printer *isl_obj_str_print(__isl_take isl_printer *p,
56 void *v)
58 isl_str *str = (isl_str *)v;
60 isl_printer_print_str(p, str->s);
63 __isl_give isl_str *isl_str_concat(__isl_take isl_str *str1,
64 __isl_take isl_str *str2)
66 int i;
67 isl_str *str = NULL;
68 size_t len1, len2;
70 if (!str1 || !str2)
71 goto error;
73 str = isl_str_alloc(str1->ctx);
74 if (!str)
75 goto error;
77 len1 = strlen(str1->s);
78 len2 = strlen(str2->s);
79 str->s = isl_alloc_array(str1->ctx, char, len1 + len2 + 1);
80 if (!str->s)
81 goto error;
83 memcpy(str->s, str1->s, len1);
84 memcpy(str->s + len1, str2->s, len2);
85 str->s[len1 + len2] = '\0';
87 isl_str_free(str1);
88 isl_str_free(str2);
90 return str;
91 error:
92 isl_str_free(str1);
93 isl_str_free(str2);
94 isl_str_free(str);
95 return NULL;
98 static void *isl_obj_str_add(void *v1, void *v2)
100 isl_str *str1 = (isl_str *)v1;
101 isl_str *str2 = (isl_str *)v2;
103 return isl_str_concat(str1, str2);
106 struct isl_obj_vtable isl_obj_str_vtable = {
107 isl_obj_str_copy,
108 isl_obj_str_add,
109 isl_obj_str_print,
110 isl_obj_str_free