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
)
60 isl_ctx_deref(str
->ctx
);
64 static void *isl_obj_str_copy(void *v
)
66 return isl_str_copy((isl_str
*)v
);
69 static void isl_obj_str_free(void *v
)
71 isl_str_free((isl_str
*)v
);
74 static __isl_give isl_printer
*isl_obj_str_print(__isl_take isl_printer
*p
,
77 isl_str
*str
= (isl_str
*)v
;
79 isl_printer_print_str(p
, "\"");
80 isl_printer_print_str(p
, str
->s
);
81 isl_printer_print_str(p
, "\"");
84 __isl_give isl_str
*isl_str_concat(__isl_take isl_str
*str1
,
85 __isl_take isl_str
*str2
)
94 str
= isl_str_alloc(str1
->ctx
);
98 len1
= strlen(str1
->s
);
99 len2
= strlen(str2
->s
);
100 str
->s
= isl_alloc_array(str1
->ctx
, char, len1
+ len2
+ 1);
104 memcpy(str
->s
, str1
->s
, len1
);
105 memcpy(str
->s
+ len1
, str2
->s
, len2
);
106 str
->s
[len1
+ len2
] = '\0';
119 static void *isl_obj_str_add(void *v1
, void *v2
)
121 isl_str
*str1
= (isl_str
*)v1
;
122 isl_str
*str2
= (isl_str
*)v2
;
124 return isl_str_concat(str1
, str2
);
127 struct isl_obj_vtable isl_obj_str_vtable
= {