root/src/add-ons/translators/psd/DataArray.h
/*
 * Copyright 2013, Gerasim Troeglazov, 3dEyes@gmail.com. All rights reserved.
 * Distributed under the terms of the MIT License.
 */


#ifndef PSD_DATA_ARRAY_H
#define PSD_DATA_ARRAY_H

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include <String.h>
#include <DataIO.h>
#include <File.h>
#include <ByteOrder.h>

#define DATAARRAY_BLOCK_SIZE 1024

class BDataArray {
public:
                                        BDataArray(int32 blockSize = DATAARRAY_BLOCK_SIZE);
                                        ~BDataArray();

        BDataArray&             Append(int8 val);
        BDataArray&             Append(uint8 val);
        BDataArray&             Append(int16 val);
        BDataArray&             Append(uint16 val);
        BDataArray&             Append(int32 val);
        BDataArray&             Append(uint32 val);
        BDataArray&             Append(int64 val);
        BDataArray&             Append(uint64 val);
        BDataArray&             Append(const char *str);
        BDataArray&             Append(BString& str);
        BDataArray&             Append(BDataArray& str);
        BDataArray&             Append(uint8 *ptr, int32 len);
        
        BDataArray&             Repeat(uint8 byte, int32 count);

        BDataArray&             operator<<(int8);
        BDataArray&             operator<<(uint8);
        BDataArray&             operator<<(int16);
        BDataArray&             operator<<(uint16);
        BDataArray&             operator<<(int32);
        BDataArray&             operator<<(uint32);
        BDataArray&             operator<<(int64);
        BDataArray&             operator<<(uint64);
        BDataArray&             operator<<(const char*);
        BDataArray&             operator<<(BDataArray&);

        uint8                   *Buffer(void);
        int32                   Length(void);

        ssize_t                 WriteToStream(BPositionIO *stream);

private:
        inline status_t _ReallocArrayFor(int32 size);

        uint8                   *fData;
        int32                   fDataSize;
        int32                   fAllocatedDataSize;
        int32                   fBlockSize;
};


#endif  /* PSD_DATA_ARRAY_H */