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