1/*
2 * Copyright 2013, Gerasim Troeglazov, 3dEyes@gmail.com. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#ifndef PSD_DATA_ARRAY_H
8#define PSD_DATA_ARRAY_H
9
10#include <stdlib.h>
11#include <stdio.h>
12#include <string.h>
13
14#include <String.h>
15#include <DataIO.h>
16#include <File.h>
17#include <ByteOrder.h>
18
19#define DATAARRAY_BLOCK_SIZE 1024
20
21class BDataArray {
22public:
23					BDataArray(int32 blockSize = DATAARRAY_BLOCK_SIZE);
24					~BDataArray();
25
26	BDataArray&		Append(int8 val);
27	BDataArray&		Append(uint8 val);
28	BDataArray&		Append(int16 val);
29	BDataArray&		Append(uint16 val);
30	BDataArray&		Append(int32 val);
31	BDataArray&		Append(uint32 val);
32	BDataArray&		Append(int64 val);
33	BDataArray&		Append(uint64 val);
34	BDataArray&		Append(const char *str);
35	BDataArray&		Append(BString& str);
36	BDataArray&		Append(BDataArray& str);
37	BDataArray&		Append(uint8 *ptr, int32 len);
38
39	BDataArray&		Repeat(uint8 byte, int32 count);
40
41	BDataArray&		operator<<(int8);
42	BDataArray&		operator<<(uint8);
43	BDataArray&		operator<<(int16);
44	BDataArray&		operator<<(uint16);
45	BDataArray&		operator<<(int32);
46	BDataArray&		operator<<(uint32);
47	BDataArray&		operator<<(int64);
48	BDataArray&		operator<<(uint64);
49	BDataArray&		operator<<(const char*);
50	BDataArray&		operator<<(BDataArray&);
51
52	uint8			*Buffer(void);
53	int32			Length(void);
54
55	ssize_t			WriteToStream(BPositionIO *stream);
56
57private:
58	inline status_t	_ReallocArrayFor(int32 size);
59
60	uint8			*fData;
61	int32			fDataSize;
62	int32			fAllocatedDataSize;
63	int32			fBlockSize;
64};
65
66
67#endif	/* PSD_DATA_ARRAY_H */
68