2 #include <isl_obj_str.h>
4 __isl_give isl_str
*isl_str_alloc(struct isl_ctx
*ctx
)
8 str
= isl_alloc_type(ctx
, struct isl_str
);
13 isl_ctx_ref(str
->ctx
);
21 __isl_give isl_str
*isl_str_copy(__isl_keep isl_str
*str
)
30 void isl_str_free(__isl_take isl_str
*str
)
41 isl_ctx_deref(str
->ctx
);
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
,
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
)
73 str
= isl_str_alloc(str1
->ctx
);
77 len1
= strlen(str1
->s
);
78 len2
= strlen(str2
->s
);
79 str
->s
= isl_alloc_array(str1
->ctx
, char, len1
+ len2
+ 1);
83 memcpy(str
->s
, str1
->s
, len1
);
84 memcpy(str
->s
+ len1
, str2
->s
, len2
);
85 str
->s
[len1
+ len2
] = '\0';
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
= {