130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun/* 230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun * Copyright 2011 Google Inc. All Rights Reserved. 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_WRITABLE_FONT_DATA_H_ 1830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#define SFNTLY_CPP_SRC_SFNTLY_DATA_WRITABLE_FONT_DATA_H_ 1930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#include "sfntly/data/readable_font_data.h" 2130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunnamespace sfntly { 2330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 2430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// Writable font data wrapper. Supports writing of data primitives in the 2530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun// TrueType / OpenType spec. 2630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurunclass WritableFontData : public ReadableFontData { 2730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun public: 2830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun explicit WritableFontData(ByteArray* ba); 2930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual ~WritableFontData(); 3030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 3130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Constructs a writable font data object. If the length is specified as 3230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // positive then a fixed size font data object will be created. If the length 3330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // is zero or less then a growable font data object will be created and the 3430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // size will be used as an estimate to help in allocating the original space. 3530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length if length > 0 create a fixed length font data; otherwise 3630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // create a growable font data 3730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return a new writable font data 3830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static CALLER_ATTACH WritableFontData* CreateWritableFontData(int32_t length); 3930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Constructs a writable font data object. The new font data object will wrap 4130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // the bytes passed in to the factory and it will take make a copy of those 4230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // bytes. 4330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param b the byte vector to wrap 4430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return a new writable font data 4530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun static CALLER_ATTACH WritableFontData* CreateWritableFontData(ByteVector* b); 4630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 4730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write a byte at the given index. 4830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 4930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param b the byte to write 5030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes written 5130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteByte(int32_t index, byte_t b); 5230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 5330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the bytes from the array. 5430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 5530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param b the source for the bytes to be written 5630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param offset offset in the byte array 5730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the length of the bytes to be written 5830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written; -1 if the index is outside 5930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // the FontData's range 6030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteBytes(int32_t index, 6130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun byte_t* b, 6230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t offset, 6330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t length); 6430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 6530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the bytes from the array. 6630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 6730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param b the source for the bytes to be written 6830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written; -1 if the index is outside 6930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // the FontData's range 7030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteBytes(int32_t index, ByteVector* b); 7130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 7230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the bytes from the array and pad if necessary. 7330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write to the length given using the byte array provided and if there are 7430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // not enough bytes in the array then pad to the requested length using the 7530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // pad byte specified. 7630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 7730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param b the source for the bytes to be written 7830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param offset offset in the byte array 7930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the length of the bytes to be written 8030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param pad the padding byte to be used if necessary 8130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written 8230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteBytesPad(int32_t index, 8330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun ByteVector* b, 8430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t offset, 8530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun int32_t length, 8630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun byte_t pad); 8730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 8830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Writes padding to the FontData. The padding byte written is 0x00. 8930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 9030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param count the number of pad bytes to write 9130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of pad bytes written 9230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WritePadding(int32_t index, int32_t count); 9330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 9430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Writes padding to the FontData. 9530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 9630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param count the number of pad bytes to write 9730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param pad the byte value to use as padding 9830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of pad bytes written 9930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WritePadding(int32_t index, int32_t count, byte_t pad); 10030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 10130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the CHAR at the given index. 10230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 10330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param c the CHAR 10430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written 10530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @throws IndexOutOfBoundsException if index is outside the FontData's range 10630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteChar(int32_t index, byte_t c); 10730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 10830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the USHORT at the given index. 10930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 11030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param us the USHORT 11130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written 11230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @throws IndexOutOfBoundsException if index is outside the FontData's range 11330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteUShort(int32_t index, int32_t us); 11430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 11530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the USHORT at the given index in little endian format. 11630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 11730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param us the USHORT 11830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written 11930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @throws IndexOutOfBoundsException if index is outside the FontData's range 12030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteUShortLE(int32_t index, int32_t us); 12130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 12230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the SHORT at the given index. 12330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 12430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param s the SHORT 12530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written 12630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @throws IndexOutOfBoundsException if index is outside the FontData's range 12730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteShort(int32_t index, int32_t s); 12830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 12930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the UINT24 at the given index. 13030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 13130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param ui the UINT24 13230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written 13330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @throws IndexOutOfBoundsException if index is outside the FontData's range 13430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteUInt24(int32_t index, int32_t ui); 13530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 13630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the ULONG at the given index. 13730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 13830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param ul the ULONG 13930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written 14030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @throws IndexOutOfBoundsException if index is outside the FontData's range 14130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteULong(int32_t index, int64_t ul); 14230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 14330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the ULONG at the given index in little endian format. 14430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 14530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param ul the ULONG 14630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written 14730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @throws IndexOutOfBoundsException if index is outside the FontData's range 14830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteULongLE(int32_t index, int64_t ul); 14930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 15030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the LONG at the given index. 15130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 15230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param l the LONG 15330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written 15430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @throws IndexOutOfBoundsException if index is outside the FontData's range 15530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteLong(int32_t index, int64_t l); 15630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 15730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the Fixed at the given index. 15830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 15930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param f the Fixed 16030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written 16130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @throws IndexOutOfBoundsException if index is outside the FontData's range 16230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteFixed(int32_t index, int32_t f); 16330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 16430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Write the LONGDATETIME at the given index. 16530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param index index into the font data 16630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param date the LONGDATETIME 16730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return the number of bytes actually written 16830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @throws IndexOutOfBoundsException if index is outside the FontData's range 16930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual int32_t WriteDateTime(int32_t index, int64_t date); 17030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 17130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Copy from the InputStream into this FontData. 17230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param is the source 17330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the number of bytes to copy 17430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @throws IOException 17530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual void CopyFrom(InputStream* is, int32_t length); 17630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 17730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Copy everything from the InputStream into this FontData. 17830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param is the source 17930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @throws IOException 18030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual void CopyFrom(InputStream* is); 18130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Makes a slice of this FontData. The returned slice will share the data with 18330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // the original FontData. 18430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param offset the start of the slice 18530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length the number of bytes in the slice 18630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return a slice of the original FontData 18730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual CALLER_ATTACH FontData* Slice(int32_t offset, int32_t length); 18830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 18930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Makes a bottom bound only slice of this array. The returned slice will 19030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // share the data with the original FontData. 19130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param offset the start of the slice 19230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @return a slice of the original FontData 19330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun virtual CALLER_ATTACH FontData* Slice(int32_t offset); 19430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 19530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun private: 19630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Constructor with a lower bound. 19730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param data other WritableFontData object to share data with 19830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param offset offset from the other WritableFontData's data 19930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WritableFontData(WritableFontData* data, int32_t offset); 20030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 20130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // Constructor with lower bound and a length bound. 20230d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param data other WritableFontData object to share data with 20330d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param offset offset from the other WritableFontData's data 20430d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun // @param length length of other WritableFontData's data to use 20530d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun WritableFontData(WritableFontData* data, int32_t offset, int32_t length); 20630d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun}; 20730d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Guruntypedef Ptr<WritableFontData> WritableFontDataPtr; 20830d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 20930d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun} // namespace sfntly 21030d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun 21130d4e1f3d81ad9f7a1aa14ce6d2ceb5df56c15cdSelim Gurun#endif // SFNTLY_CPP_SRC_SFNTLY_DATA_WRITABLE_FONT_DATA_H_ 212