1/* 2 * Copyright 2023, Andrew Lindesay <apl@lindesay.co.nz>. 3 * All rights reserved. Distributed under the terms of the MIT License. 4 */ 5#ifndef FAKE_JSON_DATA_GENERATOR_H 6#define FAKE_JSON_DATA_GENERATOR_H 7 8 9#include <DataIO.h> 10 11 12typedef enum FeedOutState { 13 OPEN_ARRAY, 14 OPEN_QUOTE, // only used for strings 15 ITEM, 16 CLOSE_QUOTE, // only used for strings 17 SEPARATOR, 18 CLOSE_ARRAY, 19 END 20} FeedOutState; 21 22 23class FakeJsonStreamDataIO : public BDataIO { 24public: 25 FakeJsonStreamDataIO(int count, uint32 checksumLimit); 26 virtual ~FakeJsonStreamDataIO(); 27 28 virtual ssize_t Read(void* buffer, size_t size); 29 virtual ssize_t Write(const void* buffer, size_t size); 30 31 virtual status_t Flush(); 32 33 uint32 Checksum() const; 34 35protected: 36 virtual void FillBuffer() = 0; 37 virtual status_t NextChar(char* c) = 0; 38 39 void _ChecksumProcessCharacter(const char c); 40 41protected: 42 FeedOutState fFeedOutState; 43 int fItemCount; 44 int fItemUpto; 45 46private: 47 uint32 fChecksum; 48 uint32 fChecksumLimit; 49}; 50 51 52class FakeJsonStringStreamDataIO : public FakeJsonStreamDataIO { 53public: 54 FakeJsonStringStreamDataIO(int count, uint32 checksumLimit); 55 virtual ~FakeJsonStringStreamDataIO(); 56 57protected: 58 virtual void FillBuffer(); 59 status_t NextChar(char* c); 60 61protected: 62 int fItemBufferSize; 63 int fItemBufferUpto; 64}; 65 66 67class FakeJsonNumberStreamDataIO : public FakeJsonStreamDataIO { 68public: 69 FakeJsonNumberStreamDataIO(int count, uint32 checksumLimit); 70 virtual ~FakeJsonNumberStreamDataIO(); 71 72protected: 73 virtual void FillBuffer(); 74 status_t NextChar(char* c); 75 76protected: 77 int fItemBufferSize; 78 int fItemBufferUpto; 79 char fBuffer[32]; 80}; 81 82 83#endif // FAKE_JSON_DATA_GENERATOR_H 84