| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #include "core/ToString.h"
- #include <stdarg.h>
- #include <stdio.h>
- #include "core/BitArray.h"
- #include "core/Box.h"
- #include "core/HashMap.h"
- #include "core/Matrix.h"
- #include "core/Plane.h"
- #include "core/Queue.h"
- #include "core/Utility.h"
- size_t coreToString(char* buffer, size_t n, const char* format, ...) {
- va_list args;
- va_start(args, format);
- int w = vsnprintf(buffer, n, format, args);
- va_end(args);
- return w < 0 ? 0 : (size_t)w;
- }
- size_t toStringSize(const void* p, char* buffer, size_t n) {
- return toString(buffer, n, "%zu", *(const size_t*)p);
- }
- size_t toStringInt(const void* p, char* buffer, size_t n) {
- return toString(buffer, n, "%d", *(const int*)p);
- }
- void stringAdd(size_t* w, char** buffer, size_t* n, size_t shift) {
- *w += shift;
- if(*n > shift) {
- *buffer += shift;
- *n -= shift;
- } else {
- *n = 0;
- }
- }
- size_t toStringBitArray(const BitArray* a, char* buffer, size_t n) {
- size_t w = 0;
- stringAdd(&w, &buffer, &n, coreToString(buffer, n, "["));
- size_t length = a->length;
- if(length > 0) {
- length--;
- for(size_t i = 0; i < length; i++) {
- u64 v = getBits(a, i);
- stringAdd(&w, &buffer, &n, coreToString(buffer, n, "%lu, ", v));
- }
- u64 v = getBits(a, length);
- stringAdd(&w, &buffer, &n, coreToString(buffer, n, "%lu", v));
- }
- stringAdd(&w, &buffer, &n, coreToString(buffer, n, "]"));
- return w;
- }
- size_t toStringBox(const Box* box, char* buffer, size_t n) {
- return coreToString(buffer, n,
- "Box([%.3f, %.3f, %.3f], [%.3f, %.3f, %.3f])",
- (double)box->min.data[0], (double)box->min.data[1],
- (double)box->min.data[2], (double)box->max.data[0],
- (double)box->max.data[1], (double)box->max.data[2]);
- }
- size_t toStringMatrix(const Matrix* m, char* buffer, size_t n) {
- size_t w = 0;
- stringAdd(&w, &buffer, &n, toString(buffer, n, "["));
- stringAdd(&w, &buffer, &n, toStringV4(m->data + 0, buffer, n));
- stringAdd(&w, &buffer, &n, toString(buffer, n, ", "));
- stringAdd(&w, &buffer, &n, toStringV4(m->data + 1, buffer, n));
- stringAdd(&w, &buffer, &n, toString(buffer, n, ", "));
- stringAdd(&w, &buffer, &n, toStringV4(m->data + 2, buffer, n));
- stringAdd(&w, &buffer, &n, toString(buffer, n, ", "));
- stringAdd(&w, &buffer, &n, toStringV4(m->data + 3, buffer, n));
- stringAdd(&w, &buffer, &n, toString(buffer, n, "]"));
- return w;
- }
- size_t toStringPlane(const Plane* p, char* buffer, size_t n) {
- return coreToString(buffer, n, "(%.3f x + %.3f y + %.3f z + %.3f)",
- (double)p->abc.data[0], (double)p->abc.data[1],
- (double)p->abc.data[2], (double)p->d);
- }
- size_t toStringQueue(const Queue* r, char* buffer, size_t n, ToString c) {
- size_t w = 0;
- stringAdd(&w, &buffer, &n, coreToString(buffer, n, "["));
- size_t end = r->length;
- if(end > 0) {
- end--;
- for(size_t i = 0; i < end; i++) {
- stringAdd(&w, &buffer, &n, c(getQueueIndex(r, i), buffer, n));
- stringAdd(&w, &buffer, &n, coreToString(buffer, n, ", "));
- }
- stringAdd(&w, &buffer, &n, c(getQueueIndex(r, end), buffer, n));
- }
- stringAdd(&w, &buffer, &n, coreToString(buffer, n, "]"));
- return w;
- }
|