1160814Ssimon/*
2280297Sjkim * Copyright 2013, Gerasim Troeglazov, 3dEyes@gmail.com. All rights reserved.
3280297Sjkim * Distributed under the terms of the MIT License.
4280297Sjkim */
5160814Ssimon
6160814Ssimon
7160814Ssimon#ifndef PSD_DATA_ARRAY_H
8160814Ssimon#define PSD_DATA_ARRAY_H
9160814Ssimon
10160814Ssimon#include <stdlib.h>
11160814Ssimon#include <stdio.h>
12160814Ssimon#include <string.h>
13160814Ssimon
14280297Sjkim#include <String.h>
15160814Ssimon#include <DataIO.h>
16160814Ssimon#include <File.h>
17160814Ssimon#include <ByteOrder.h>
18160814Ssimon
19160814Ssimon#define DATAARRAY_BLOCK_SIZE 1024
20160814Ssimon
21160814Ssimonclass BDataArray {
22160814Ssimonpublic:
23160814Ssimon					BDataArray(int32 blockSize = DATAARRAY_BLOCK_SIZE);
24160814Ssimon					~BDataArray();
25160814Ssimon
26160814Ssimon	BDataArray&		Append(int8 val);
27160814Ssimon	BDataArray&		Append(uint8 val);
28160814Ssimon	BDataArray&		Append(int16 val);
29160814Ssimon	BDataArray&		Append(uint16 val);
30160814Ssimon	BDataArray&		Append(int32 val);
31160814Ssimon	BDataArray&		Append(uint32 val);
32160814Ssimon	BDataArray&		Append(int64 val);
33160814Ssimon	BDataArray&		Append(uint64 val);
34160814Ssimon	BDataArray&		Append(const char *str);
35160814Ssimon	BDataArray&		Append(BString& str);
36160814Ssimon	BDataArray&		Append(BDataArray& str);
37160814Ssimon	BDataArray&		Append(uint8 *ptr, int32 len);
38160814Ssimon
39160814Ssimon	BDataArray&		Repeat(uint8 byte, int32 count);
40160814Ssimon
41160814Ssimon	BDataArray&		operator<<(int8);
42160814Ssimon	BDataArray&		operator<<(uint8);
43160814Ssimon	BDataArray&		operator<<(int16);
44160814Ssimon	BDataArray&		operator<<(uint16);
45160814Ssimon	BDataArray&		operator<<(int32);
46160814Ssimon	BDataArray&		operator<<(uint32);
47160814Ssimon	BDataArray&		operator<<(int64);
48160814Ssimon	BDataArray&		operator<<(uint64);
49160814Ssimon	BDataArray&		operator<<(const char*);
50160814Ssimon	BDataArray&		operator<<(BDataArray&);
51160814Ssimon
52160814Ssimon	uint8			*Buffer(void);
53160814Ssimon	int32			Length(void);
54160814Ssimon
55160814Ssimon	ssize_t			WriteToStream(BPositionIO *stream);
56160814Ssimon
57160814Ssimonprivate:
58160814Ssimon	inline status_t	_ReallocArrayFor(int32 size);
59160814Ssimon
60160814Ssimon	uint8			*fData;
61160814Ssimon	int32			fDataSize;
62160814Ssimon	int32			fAllocatedDataSize;
63160814Ssimon	int32			fBlockSize;
64160814Ssimon};
65160814Ssimon
66160814Ssimon
67160814Ssimon#endif	/* PSD_DATA_ARRAY_H */
68160814Ssimon