diff options
Diffstat (limited to 'sfntly/table/table.h')
-rw-r--r-- | sfntly/table/table.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/sfntly/table/table.h b/sfntly/table/table.h new file mode 100644 index 0000000..6ebc22d --- /dev/null +++ b/sfntly/table/table.h @@ -0,0 +1,119 @@ +/* + * 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 <set> +#include <map> +#include <vector> +#include <utility> + +#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<T extends Table> + // 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> 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> header_; + Ptr<Font> font_; +}; + +// C++ port only +class GenericTable : public Table, public RefCounted<GenericTable> { + public: + GenericTable(Header* header, ReadableFontData* data) : Table(header, data) {} + virtual ~GenericTable() {} +}; + +typedef Ptr<Table> TablePtr; +typedef std::vector<HeaderPtr> TableHeaderList; +typedef Ptr<Table::Builder> TableBuilderPtr; +typedef std::map<int32_t, TablePtr> TableMap; +typedef std::pair<int32_t, TablePtr> TableMapEntry; + +typedef std::map<HeaderPtr, WritableFontDataPtr> DataBlockMap; +typedef std::pair<HeaderPtr, WritableFontDataPtr> DataBlockEntry; +typedef std::map<int32_t, TableBuilderPtr> TableBuilderMap; +typedef std::pair<int32_t, TableBuilderPtr> TableBuilderEntry; + +} // namespace sfntly + +#endif // SFNTLY_CPP_SRC_SFNTLY_TABLE_TABLE_H_ |