Unit tests for SmartRest

Dependencies:   C027 SmartRest mbed

Committer:
vwochnik
Date:
Mon Mar 24 10:12:45 2014 +0000
Revision:
0:789029e49ea1
fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vwochnik 0:789029e49ea1 1 #include <stdlib.h>
vwochnik 0:789029e49ea1 2 #include <stdio.h>
vwochnik 0:789029e49ea1 3 #include <string.h>
vwochnik 0:789029e49ea1 4 #include "BufferedDataSink.h"
vwochnik 0:789029e49ea1 5
vwochnik 0:789029e49ea1 6 BufferedDataSink::BufferedDataSink()
vwochnik 0:789029e49ea1 7 {
vwochnik 0:789029e49ea1 8 _size = BDS_MEMORY_INCREMENT;
vwochnik 0:789029e49ea1 9 _buffer = (char*)malloc(_size*sizeof(char));
vwochnik 0:789029e49ea1 10 *_buffer = 0;
vwochnik 0:789029e49ea1 11 _ptr = _buffer;
vwochnik 0:789029e49ea1 12 }
vwochnik 0:789029e49ea1 13
vwochnik 0:789029e49ea1 14 BufferedDataSink::~BufferedDataSink()
vwochnik 0:789029e49ea1 15 {
vwochnik 0:789029e49ea1 16 free(_buffer);
vwochnik 0:789029e49ea1 17 }
vwochnik 0:789029e49ea1 18
vwochnik 0:789029e49ea1 19 char * BufferedDataSink::value()
vwochnik 0:789029e49ea1 20 {
vwochnik 0:789029e49ea1 21 return _buffer;
vwochnik 0:789029e49ea1 22 }
vwochnik 0:789029e49ea1 23
vwochnik 0:789029e49ea1 24 void BufferedDataSink::clear()
vwochnik 0:789029e49ea1 25 {
vwochnik 0:789029e49ea1 26 _ptr = _buffer;
vwochnik 0:789029e49ea1 27 *_ptr = 0;
vwochnik 0:789029e49ea1 28 }
vwochnik 0:789029e49ea1 29
vwochnik 0:789029e49ea1 30 size_t BufferedDataSink::write(char c)
vwochnik 0:789029e49ea1 31 {
vwochnik 0:789029e49ea1 32 ensureMinimumFreeMemory(1);
vwochnik 0:789029e49ea1 33 *_ptr++ = c;
vwochnik 0:789029e49ea1 34 *_ptr = 0;
vwochnik 0:789029e49ea1 35 return 1;
vwochnik 0:789029e49ea1 36 }
vwochnik 0:789029e49ea1 37
vwochnik 0:789029e49ea1 38 size_t BufferedDataSink::write(void *buf, size_t length)
vwochnik 0:789029e49ea1 39 {
vwochnik 0:789029e49ea1 40 ensureMinimumFreeMemory(length);
vwochnik 0:789029e49ea1 41 memcpy(_ptr, buf, length);
vwochnik 0:789029e49ea1 42 _ptr += length;
vwochnik 0:789029e49ea1 43 *_ptr = 0;
vwochnik 0:789029e49ea1 44 return length;
vwochnik 0:789029e49ea1 45 }
vwochnik 0:789029e49ea1 46
vwochnik 0:789029e49ea1 47 size_t BufferedDataSink::write(const char *str)
vwochnik 0:789029e49ea1 48 {
vwochnik 0:789029e49ea1 49 return write((void*)str, strlen(str)*sizeof(char));
vwochnik 0:789029e49ea1 50 }
vwochnik 0:789029e49ea1 51
vwochnik 0:789029e49ea1 52 size_t BufferedDataSink::write(unsigned long number)
vwochnik 0:789029e49ea1 53 {
vwochnik 0:789029e49ea1 54 size_t length;
vwochnik 0:789029e49ea1 55
vwochnik 0:789029e49ea1 56 length = snprintf(NULL, 0, "%lu", number);
vwochnik 0:789029e49ea1 57
vwochnik 0:789029e49ea1 58 ensureMinimumFreeMemory(length);
vwochnik 0:789029e49ea1 59 length = sprintf(_ptr, "%lu", number);
vwochnik 0:789029e49ea1 60 _ptr += length;
vwochnik 0:789029e49ea1 61 return length;
vwochnik 0:789029e49ea1 62 }
vwochnik 0:789029e49ea1 63
vwochnik 0:789029e49ea1 64 void BufferedDataSink::ensureMinimumFreeMemory(size_t required)
vwochnik 0:789029e49ea1 65 {
vwochnik 0:789029e49ea1 66 size_t size = _size, offset = _ptr - _buffer;
vwochnik 0:789029e49ea1 67
vwochnik 0:789029e49ea1 68 if (required < BDS_MIN_FREE_MEMORY)
vwochnik 0:789029e49ea1 69 required = BDS_MIN_FREE_MEMORY;
vwochnik 0:789029e49ea1 70 else
vwochnik 0:789029e49ea1 71 required++;
vwochnik 0:789029e49ea1 72
vwochnik 0:789029e49ea1 73 while (size - offset < required)
vwochnik 0:789029e49ea1 74 size += BDS_MEMORY_INCREMENT;
vwochnik 0:789029e49ea1 75
vwochnik 0:789029e49ea1 76 if (size == _size)
vwochnik 0:789029e49ea1 77 return;
vwochnik 0:789029e49ea1 78
vwochnik 0:789029e49ea1 79 _size = size;
vwochnik 0:789029e49ea1 80 _buffer = (char*)realloc(_buffer, _size*sizeof(char));
vwochnik 0:789029e49ea1 81 _ptr = _buffer + offset;
vwochnik 0:789029e49ea1 82 }