pocketpy/src/common/sstream.c
方而静 031f189a4a
Make SourceData and SStream c11 (#266)
* Make SourceData c11

* make it compile

* add a marco

* follow up rename of c11_vetor__push

* remove isascii marco

* fix empty function name handling

* change enum back

* Remove trival accessor

* make pkpy_Str__take_buf hidden

* make it compile

* remove rcptr and use shared_ptr instead

* change enum name in C++ code back

* fix type problem

* remove strdup polyfill

* remove xmake

* ...
2024-06-11 20:28:51 +08:00

49 lines
1.3 KiB
C

#include "pocketpy/common/sstream.h"
#include <stdio.h>
void pkpy_SStream__ctor(pkpy_SStream* self) {
c11_vector__ctor(&self->data, sizeof(char));
}
void pkpy_SStream__dtor(pkpy_SStream* self) {
c11_vector__dtor(&self->data);
}
void pkpy_SStream__append_cstr(pkpy_SStream* self, const char* str) {
for (int i = 0; str[i] != '\0'; i++) {
c11_vector__push(char, &self->data, str[i]);
}
}
void pkpy_SStream__append_cstrn(pkpy_SStream* self, const char* str, int n) {
for (int i = 0; i < n; i++) {
c11_vector__push(char, &self->data, str[i]);
}
}
void pkpy_SStream__append_Str(pkpy_SStream* self, const pkpy_Str* str) {
pkpy_SStream__append_cstr(self, pkpy_Str__data(str));
}
void pkpy_SStream__append_char(pkpy_SStream* self, char c) {
c11_vector__push(char, &self->data, c);
}
void pkpy_SStream__append_int(pkpy_SStream* self, int i) {
char str[12]; // sign + 10 digits + null terminator
sprintf(str, "%d", i);
pkpy_SStream__append_cstr(self, str);
}
void pkpy_SStream__append_int64(pkpy_SStream* self, int64_t i) {
char str[23]; // sign + 21 digits + null terminator
sprintf(str, "%lld", i);
pkpy_SStream__append_cstr(self, str);
}
pkpy_Str pkpy_SStream__to_Str(const pkpy_SStream* self) {
pkpy_Str res;
pkpy_Str__ctor2(&res, self->data.data, self->data.count);
return res;
}