StringBuilder.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * Arduino JSON library
  3. * Benoit Blanchon 2014 - MIT License
  4. */
  5. #include "StringBuilder.h"
  6. void StringBuilder::append(const char* s)
  7. {
  8. char* tail = buffer + length;
  9. while (*s && length<capacity)
  10. {
  11. buffer[length++] = *s++;
  12. }
  13. buffer[length] = 0;
  14. }
  15. void StringBuilder::appendEscaped(const char* s)
  16. {
  17. if (length > capacity - 3) return;
  18. buffer[length++] = '"';
  19. // keep one slot for the end quote
  20. capacity--;
  21. while (*s && length < capacity)
  22. {
  23. switch (*s)
  24. {
  25. case '"':
  26. append("\\\"");
  27. break;
  28. case '\\':
  29. append("\\\\");
  30. break;
  31. case '\b':
  32. append("\\b");
  33. break;
  34. case '\f':
  35. append("\\f");
  36. break;
  37. case '\n':
  38. append("\\n");
  39. break;
  40. case '\r':
  41. append("\\r");
  42. break;
  43. case '\t':
  44. append("\\t");
  45. break;
  46. default:
  47. buffer[length++] = *s;
  48. break;
  49. }
  50. s++;
  51. }
  52. buffer[length++] = '"';
  53. buffer[length] = 0;
  54. // restore the original capacity
  55. capacity++;
  56. }
  57. void StringBuilder::appendFormatted(const char* format, ...)
  58. {
  59. char* tail = buffer + length;
  60. va_list args;
  61. va_start(args, format);
  62. vsnprintf(tail, capacity - length, format, args);
  63. va_end(args);
  64. length += strlen(tail);
  65. }