/* * Copyright 2011 Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef SFNTLY_CPP_SRC_SFNTLY_TABLE_TABLE_H_ #define SFNTLY_CPP_SRC_SFNTLY_TABLE_TABLE_H_ #include #include #include #include #include "sfntly/port/type.h" #include "sfntly/table/font_data_table.h" #include "sfntly/table/header.h" namespace sfntly { class Font; // A concrete implementation of a root level table in the font. This is the base // class used for all specific table implementations and is used as the generic // table for all tables which have no specific implementations. class Table : public FontDataTable { public: // Note: original version is Builder // C++ template is not designed that way so plain old inheritance is // chosen. class Builder : public FontDataTable::Builder { public: virtual ~Builder(); virtual Header* header() { return header_; } virtual void NotifyPostTableBuild(FontDataTable* table); // Get a builder for the table type specified by the data in the header. // @param header the header for the table // @param tableData the data to be used to build the table from // @return builder for the table specified static CALLER_ATTACH Builder* GetBuilder(Header* header, WritableFontData* table_data); // UNIMPLEMENTED: toString() protected: Builder(Header* header, WritableFontData* data); Builder(Header* header, ReadableFontData* data); Builder(Header* header); private: Ptr
header_; }; // Note: GenericTableBuilder moved to table_based_table_builder.h to avoid // circular inclusion. virtual ~Table(); // Get the calculated checksum for the data in the table. virtual int64_t CalculatedChecksum(); // Get the header for the table. virtual Header* header() { return header_; } // Get the tag for the table from the record header. virtual int32_t header_tag() { return header_->tag(); } // Get the offset for the table from the record header. virtual int32_t header_offset() { return header_->offset(); } // Get the length of the table from the record header. virtual int32_t header_length() { return header_->length(); } // Get the checksum for the table from the record header. virtual int64_t header_checksum() { return header_->checksum(); } // UNIMPLEMENTED: toString() virtual void SetFont(Font* font); protected: Table(Header* header, ReadableFontData* data); private: Ptr
header_; Ptr font_; }; // C++ port only class GenericTable : public Table, public RefCounted { public: GenericTable(Header* header, ReadableFontData* data) : Table(header, data) {} virtual ~GenericTable() {} }; typedef Ptr TablePtr; typedef std::vector TableHeaderList; typedef Ptr TableBuilderPtr; typedef std::map TableMap; typedef std::pair TableMapEntry; typedef std::map DataBlockMap; typedef std::pair DataBlockEntry; typedef std::map TableBuilderMap; typedef std::pair TableBuilderEntry; } // namespace sfntly #endif // SFNTLY_CPP_SRC_SFNTLY_TABLE_TABLE_H_