130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/* 230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Copyright (C) 2011 The sfntly Open Source Project 330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Licensed under the Apache License, Version 2.0 (the "License"); 530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * you may not use this file except in compliance with the License. 630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * You may obtain a copy of the License at 730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * http://www.apache.org/licenses/LICENSE-2.0 930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * 1030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Unless required by applicable law or agreed to in writing, software 1130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * distributed under the License is distributed on an "AS IS" BASIS, 1230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * See the License for the specific language governing permissions and 1430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * limitations under the License. 1530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun */ 1630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 1730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#ifndef SFNTLY_CPP_SRC_SFNTLY_DATA_BYTE_ARRAY_H_ 1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#define SFNTLY_CPP_SRC_SFNTLY_DATA_BYTE_ARRAY_H_ 1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/port/refcount.h" 2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/port/type.h" 2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/port/input_stream.h" 2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/port/output_stream.h" 2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace sfntly { 2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// An abstraction to a contiguous array of bytes. 2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// C++ port of this class assumes that the data are stored in a linear region 2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// like std::vector. 3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunclass ByteArray : virtual public RefCount { 3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public: 3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual ~ByteArray(); 3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Gets the current filled and readable length of the array. 3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t Length(); 3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Gets the maximum size of the array. This is the maximum number of bytes that 3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // the array can hold and all of it may not be filled with data or even fully 3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // allocated yet. 4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t Size(); 4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Determines whether or not this array is growable or of fixed size. 4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun bool growable() { return growable_; } 4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t SetFilledLength(int32_t filled_length); 4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Gets the byte from the given index. 4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index the index into the byte array 4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the byte or -1 if reading beyond the bounds of the data 5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t Get(int32_t index); 5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Gets the bytes from the given index and fill the buffer with them. As many 5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // bytes as will fit into the buffer are read unless that would go past the 5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // end of the array. 5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index the index into the byte array 5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param b the buffer to put the bytes read into 5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes read from the buffer 5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t Get(int32_t index, ByteVector* b); 5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Gets the bytes from the given index and fill the buffer with them starting 6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // at the offset given. As many bytes as the specified length are read unless 6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // that would go past the end of the array. 6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index the index into the byte array 6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param b the buffer to put the bytes read into 6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param offset the location in the buffer to start putting the bytes 6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the number of bytes to put into the buffer 6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes read from the buffer 6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t Get(int32_t index, 6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun byte_t* b, 7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t offset, 7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t length); 7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Puts the specified byte into the array at the given index unless that would 7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // be beyond the length of the array and it isn't growable. 7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual void Put(int32_t index, byte_t b); 7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Puts the specified bytes into the array at the given index. The entire 7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // buffer is put into the array unless that would extend beyond the length and 7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // the array isn't growable. 8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t Put(int32_t index, ByteVector* b); 8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Puts the specified bytes into the array at the given index. All of the bytes 8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // specified are put into the array unless that would extend beyond the length 8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // and the array isn't growable. The bytes to be put into the array are those 8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // in the buffer from the given offset and for the given length. 8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index the index into the ByteArray 8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param b the bytes to put into the array 8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param offset the offset in the bytes to start copying from 8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the number of bytes to copy into the array 9030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written 9130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t Put(int32_t index, 9230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun byte_t* b, 9330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t offset, 9430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t length); 9530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 9630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Fully copies this ByteArray to another ByteArray to the extent that the 9730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // destination array has storage for the data copied. 9830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t CopyTo(ByteArray* array); 9930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 10030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Copies a segment of this ByteArray to another ByteArray. 10130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param array the destination 10230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param offset the offset in this ByteArray to start copying from 10330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the maximum length in bytes to copy 10430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes copied 10530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t CopyTo(ByteArray* array, int32_t offset, int32_t length); 10630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 10730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Copies this ByteArray to another ByteArray. 10830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param dstOffset the offset in the destination array to start copying to 10930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param array the destination 11030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param srcOffset the offset in this ByteArray to start copying from 11130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the maximum length in bytes to copy 11230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes copied 11330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t CopyTo(int32_t dst_offset, 11430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ByteArray* array, 11530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t src_offset, 11630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t length); 11730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 11830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Copies this ByteArray to an OutputStream. 11930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param os the destination 12030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes copied 12130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t CopyTo(OutputStream* os); 12230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 12330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Copies this ByteArray to an OutputStream. 12430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param os the destination 12530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param offset 12630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length 12730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes copied 12830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t CopyTo(OutputStream* os, int32_t offset, int32_t length); 12930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 13030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Copies from the InputStream into this ByteArray. 13130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param is the source 13230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the number of bytes to copy 13330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual bool CopyFrom(InputStream* is, int32_t length); 13430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 13530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Copies everything from the InputStream into this ByteArray. 13630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param is the source 13730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual bool CopyFrom(InputStream* is); 13830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 13930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun protected: 14030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // filledLength the length that is "filled" and readable counting from offset. 14130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // storageLength the maximum storage size of the underlying data. 14230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // growable is the storage growable - storageLength is the max growable size. 14330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ByteArray(int32_t filled_length, int32_t storage_length, bool growable); 14430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ByteArray(int32_t filled_length, int32_t storage_length); 14530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun void Init(int32_t filled_length, int32_t storage_length, bool growable); 14630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 14730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Internal subclass API 14830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 14930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Stores the byte at the index given. 15030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index the location to store at 15130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param b the byte to store 15230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual void InternalPut(int32_t index, byte_t b) = 0; 15330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 15430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Stores the array of bytes at the given index. 15530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index the location to store at 15630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param b the bytes to store 15730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param offset the offset to start from in the byte array 15830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the length of the byte array to store from the offset 15930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually stored 16030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t InternalPut(int32_t index, 16130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun byte_t* b, 16230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t offset, 16330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t length) = 0; 16430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 16530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Gets the byte at the index given. 16630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index the location to get from 16730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the byte stored at the index 16830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual byte_t InternalGet(int32_t index) = 0; 16930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 17030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Gets the bytes at the index given of the given length. 17130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index the location to start getting from 17230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param b the array to put the bytes into 17330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param offset the offset in the array to put the bytes into 17430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the length of bytes to read 17530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually ready 17630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t InternalGet(int32_t index, 17730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun byte_t* b, 17830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t offset, 17930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t length) = 0; 18030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Close this instance of the ByteArray. 18230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual void Close() = 0; 18330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // C++ port only, raw pointer to the first element of storage. 18530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual byte_t* Begin() = 0; 18630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Java toString() not ported. 18830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static const int32_t COPY_BUFFER_SIZE; 19030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 19130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun private: 19230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun //bool bound_; // unused, comment out 19330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t filled_length_; 19430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t storage_length_; 19530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun bool growable_; 19630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}; 19730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Guruntypedef Ptr<ByteArray> ByteArrayPtr; 19830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 19930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} // namespace sfntly 20030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 20130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif // SFNTLY_CPP_SRC_SFNTLY_DATA_BYTE_ARRAY_H_ 202