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_from_string(isl_ctx
*ctx
, __isl_take
char *s
)
28 str
= isl_str_alloc(ctx
);
40 __isl_give isl_str
*isl_str_copy(__isl_keep isl_str
*str
)
49 void isl_str_free(__isl_take isl_str
*str
)
58 isl_ctx_deref(str
->ctx
);
62 static void *isl_obj_str_copy(void *v
)
64 return isl_str_copy((isl_str
*)v
);
67 static void isl_obj_str_free(void *v
)
69 isl_str_free((isl_str
*)v
);
72 static __isl_give isl_printer
*isl_obj_str_print(__isl_take isl_printer
*p
,
75 isl_str
*str
= (isl_str
*)v
;
77 p
= isl_printer_print_str(p
, "\"");
78 p
= isl_printer_print_str(p
, str
->s
);
79 p
= isl_printer_print_str(p
, "\"");
84 __isl_give isl_str
*isl_str_concat(__isl_take isl_str
*str1
,
85 __isl_take isl_str
*str2
)
93 str
= isl_str_alloc(str1
->ctx
);
97 len1
= strlen(str1
->s
);
98 len2
= strlen(str2
->s
);
99 str
->s
= isl_alloc_array(str1
->ctx
, char, len1
+ len2
+ 1);
103 memcpy(str
->s
, str1
->s
, len1
);
104 memcpy(str
->s
+ len1
, str2
->s
, len2
);
105 str
->s
[len1
+ len2
] = '\0';
118 static void *isl_obj_str_add(void *v1
, void *v2
)
120 isl_str
*str1
= (isl_str
*)v1
;
121 isl_str
*str2
= (isl_str
*)v2
;
123 return isl_str_concat(str1
, str2
);
126 struct isl_obj_vtable isl_obj_str_vtable
= {