This commit is contained in:
Martin Bauer
2019-08-18 19:41:19 +02:00
parent 512ec482f7
commit 7838e740a7
5 changed files with 173 additions and 23 deletions

View File

@@ -3,18 +3,34 @@
#include <stdio.h>
#include <stdlib.h>
#include <vector>
class Adaptor {
class VectorAdaptor {
public:
Adaptor(const String &fileName) {
VectorAdaptor(std::vector<uint8_t> * v) : v_(v) {}
void write(const char *data, uint32_t size) {
v_->insert(v_->end(), data, data + size );
}
private:
std::vector<uint8_t> * v_;
};
class FilePtrAdaptor {
public:
FilePtrAdaptor(const String &fileName) {
static const String baseDirectory(".");
auto fullFileName = baseDirectory + fileName;
fptr = fopen(fullFileName.c_str(), "wb");
}
~Adaptor() {
~FilePtrAdaptor() {
fclose(fptr);
}
FilePtrAdaptor(const FilePtrAdaptor &) = delete;
void operator=(const FilePtrAdaptor &) = delete;
void write(const char *data, uint32_t size) {
fwrite(data, size, 1, fptr);
@@ -28,8 +44,8 @@ private:
class MockStorageWriter {
public:
MockStorageWriter(const String &fileName) {
adaptor_ = new Adaptor(fileName);
encoder_ = new StreamingMsgPackEncoder <Adaptor>(adaptor_);
adaptor_ = new FilePtrAdaptor(fileName);
encoder_ = new StreamingMsgPackEncoder <FilePtrAdaptor>(adaptor_);
}
~MockStorageWriter(){
delete adaptor_;
@@ -37,11 +53,11 @@ public:
}
MockStorageWriter(const MockStorageWriter &) = delete;
StreamingMsgPackEncoder<Adaptor> &encoder() { return *encoder_; }
StreamingMsgPackEncoder<FilePtrAdaptor> &encoder() { return *encoder_; }
private:
Adaptor * adaptor_;
StreamingMsgPackEncoder <Adaptor> * encoder_;
FilePtrAdaptor * adaptor_;
StreamingMsgPackEncoder <FilePtrAdaptor> * encoder_;
};

View File

@@ -26,6 +26,16 @@ public:
return true;
}
void finalize() {
if( otherChunkFilled() )
saveChunkToFile(otherChunk);
if( currentChunk->numMeasurements() > 0) {
saveChunkToFile(currentChunk);
}
currentChunk->init(0, 0);
otherChunk->init(0, 0);
}
template<typename T>
void serialize(StreamingMsgPackEncoder<T> & encoder, uint32_t startIdx) const
{

View File

@@ -42,9 +42,10 @@ public:
void serialize(StreamingMsgPackEncoder<T> & encoder) const
{
sendHeader(encoder, sessionStartTime, startIndex);
encoder.sendArray(values + startIndex, nextFree - startIndex);
encoder.sendArray(values, nextFree);
}
/*
template<typename T>
void serialize(StreamingMsgPackEncoder<T> & encoder, uint32_t start, uint32_t end) const
{
@@ -67,7 +68,7 @@ public:
const uint32_t length = min(nextFree, end - start);
encoder.sendArray(values + idxStart, length);
}
}
}*/
template<typename T>
static uint32_t valueOffset()