diff options
author | dfilimon@google.com <dfilimon@google.com@672e30a5-4c29-85ac-ac6d-611c735e0a51> | 2011-08-29 17:13:42 +0000 |
---|---|---|
committer | dfilimon@google.com <dfilimon@google.com@672e30a5-4c29-85ac-ac6d-611c735e0a51> | 2011-08-29 17:13:42 +0000 |
commit | 6c4f92bcc799598f6fcba4b3c7d4d549da9a8491 (patch) | |
tree | d09e057e85bea39026b29b868a54cfa2590af3f7 | |
parent | 5af34fd773f8cfee82321393504f558ddf67c628 (diff) | |
download | src-6c4f92bcc799598f6fcba4b3c7d4d549da9a8491.tar.gz |
Modified NewTableBuilder so it would no longer require CALLER_ATTACH.
git-svn-id: http://sfntly.googlecode.com/svn/trunk/cpp/src@60 672e30a5-4c29-85ac-ac6d-611c735e0a51
-rw-r--r-- | sfntly/font.cc | 32 | ||||
-rw-r--r-- | sfntly/font.h | 6 | ||||
-rw-r--r-- | sfntly/tools/subsetter/glyph_table_subsetter.cc | 12 | ||||
-rw-r--r-- | sfntly/tools/subsetter/subsetter.cc | 7 | ||||
-rw-r--r-- | test/subsetter_impl.cc | 17 |
5 files changed, 37 insertions, 37 deletions
diff --git a/sfntly/font.cc b/sfntly/font.cc index 14f1505..d66c9f6 100644 --- a/sfntly/font.cc +++ b/sfntly/font.cc @@ -16,9 +16,12 @@ #include "sfntly/font.h" +#include <stdio.h> + #include <functional> #include <algorithm> #include <map> +#include <string> #include <typeinfo> #include "sfntly/data/font_input_stream.h" @@ -280,19 +283,21 @@ Table::Builder* Font::Builder::GetTableBuilder(int32_t tag) { return NULL; } -CALLER_ATTACH Table::Builder* Font::Builder::NewTableBuilder(int32_t tag) { +Table::Builder* Font::Builder::NewTableBuilder(int32_t tag) { TableHeaderPtr header = new Table::Header(tag); - TableBuilderPtr builder = Table::Builder::GetBuilder(this, header, NULL); + TableBuilderPtr builder; + builder.Attach(Table::Builder::GetBuilder(this, header, NULL)); table_builders_.insert(TableBuilderEntry(header->tag(), builder)); return builder; } -CALLER_ATTACH Table::Builder* - Font::Builder::NewTableBuilder(int32_t tag, ReadableFontData* src_data) { +Table::Builder* Font::Builder::NewTableBuilder(int32_t tag, + ReadableFontData* src_data) { WritableFontDataPtr data; data.Attach(GetNewGrowableData(src_data)); TableHeaderPtr header = new Table::Header(tag); - TableBuilderPtr builder = Table::Builder::GetBuilder(this, header, data); + TableBuilderPtr builder; + builder.Attach(Table::Builder::GetBuilder(this, header, data)); table_builders_.insert(TableBuilderEntry(tag, builder)); return builder; } @@ -369,7 +374,7 @@ void Font::Builder::BuildTablesFromBuilders(TableBuilderMap* builder_map, // Now build all the tables. for (TableBuilderMap::iterator builder = builder_map->begin(), builder_end = builder_map->end(); - builder != builder_end; ++builder) { + builder != builder_end; ++builder) { TablePtr table; if (builder->second && builder->second->ReadyToBuild()) { #if !defined (SFNTLY_NO_EXCEPTION) @@ -379,19 +384,26 @@ void Font::Builder::BuildTablesFromBuilders(TableBuilderMap* builder_map, #if !defined (SFNTLY_NO_EXCEPTION) } catch(IOException& e) { std::string builder_string = "Unable to build table - "; - builder_string += typeid(builder->second).name(); - builder_string += e.what(); + char *table_name = TagToString(builder->first); + builder_string += table_name; + delete[] table_name; throw RuntimeException(builder_string.c_str()); } #endif } if (table == NULL) { + std::string builder_string = "Unable to build table - "; + char *table_name = TagToString(builder->first); + builder_string += table_name; + delete[] table_name; #if defined (SFNTLY_NO_EXCEPTION) +#if defined (SFNTLY_DEBUG) + fprintf(stderr, "Aborting table construction: %s\n", + builder_string.c_str()); +#endif table_map->clear(); return; #else - std::string builder_string = "Unable to build table - "; - builder_string += typeid(builder->second).name(); throw RuntimeException(builder_string.c_str()); #endif } diff --git a/sfntly/font.h b/sfntly/font.h index 72b10ac..2badece 100644 --- a/sfntly/font.h +++ b/sfntly/font.h @@ -150,9 +150,9 @@ class Font : public RefCounted<Font> { // builder for that table. // @return new empty table of the type specified by tag; if tag is not known // then a generic OpenTypeTable is returned - virtual CALLER_ATTACH Table::Builder* NewTableBuilder(int32_t tag); - virtual CALLER_ATTACH Table::Builder* - NewTableBuilder(int32_t tag, ReadableFontData* src_data); + virtual Table::Builder* NewTableBuilder(int32_t tag); + virtual Table::Builder* NewTableBuilder(int32_t tag, + ReadableFontData* src_data); virtual TableBuilderMap* table_builders() { return &table_builders_; } virtual void TableBuilderTags(IntegerSet* key_set); // Note: different from Java: we don't return object in removeTableBuilder diff --git a/sfntly/tools/subsetter/glyph_table_subsetter.cc b/sfntly/tools/subsetter/glyph_table_subsetter.cc index 76f8624..644e137 100644 --- a/sfntly/tools/subsetter/glyph_table_subsetter.cc +++ b/sfntly/tools/subsetter/glyph_table_subsetter.cc @@ -53,12 +53,12 @@ bool GlyphTableSubsetter::Subset(Subsetter* subsetter, #endif } - GlyphTableBuilderPtr glyph_table_builder; - glyph_table_builder.Attach(down_cast<GlyphTable::Builder*>( - font_builder->NewTableBuilder(Tag::glyf))); - LocaTableBuilderPtr loca_table_builder; - loca_table_builder.Attach(down_cast<LocaTable::Builder*>( - font_builder->NewTableBuilder(Tag::loca))); + GlyphTableBuilderPtr glyph_table_builder = + down_cast<GlyphTable::Builder*> + (font_builder->NewTableBuilder(Tag::glyf)); + LocaTableBuilderPtr loca_table_builder = + down_cast<LocaTable::Builder*> + (font_builder->NewTableBuilder(Tag::loca)); if (glyph_table_builder == NULL || loca_table_builder == NULL) { #if defined (SFNTLY_NO_EXCEPTION) return false; diff --git a/sfntly/tools/subsetter/subsetter.cc b/sfntly/tools/subsetter/subsetter.cc index c234a1e..d1b64d9 100644 --- a/sfntly/tools/subsetter/subsetter.cc +++ b/sfntly/tools/subsetter/subsetter.cc @@ -85,12 +85,7 @@ CALLER_ATTACH Font::Builder* Subsetter::Subset() { tag_end = table_tags.end(); tag != tag_end; ++tag) { Table* table = font_->GetTable(*tag); if (table) { - // The NewTableBuilder() call will alter internal state of font_builder - // AND the reference count of returned object. Therefore we need to - // dereference it. - TableBuilderPtr dereference; - dereference.Attach( - font_builder->NewTableBuilder(*tag, table->ReadFontData())); + font_builder->NewTableBuilder(*tag, table->ReadFontData()); } } return font_builder.Detach(); diff --git a/test/subsetter_impl.cc b/test/subsetter_impl.cc index ea886c0..572f00e 100644 --- a/test/subsetter_impl.cc +++ b/test/subsetter_impl.cc @@ -274,12 +274,10 @@ CALLER_ATTACH Font* SubsetterImpl::Subset(const IntegerSet& glyph_ids) { FontBuilderPtr font_builder; font_builder.Attach(factory_->NewFontBuilder()); - GlyphTableBuilderPtr glyph_table_builder; - glyph_table_builder.Attach(down_cast<GlyphTable::Builder*>( - font_builder->NewTableBuilder(Tag::glyf))); - LocaTableBuilderPtr loca_table_builder; - loca_table_builder.Attach(down_cast<LocaTable::Builder*>( - font_builder->NewTableBuilder(Tag::loca))); + GlyphTableBuilderPtr glyph_table_builder = + down_cast<GlyphTable::Builder*>(font_builder->NewTableBuilder(Tag::glyf)); + LocaTableBuilderPtr loca_table_builder = + down_cast<LocaTable::Builder*>(font_builder->NewTableBuilder(Tag::loca)); if (glyph_table_builder == NULL || loca_table_builder == NULL) { // Out of memory. return NULL; @@ -328,12 +326,7 @@ CALLER_ATTACH Font* SubsetterImpl::Subset(const IntegerSet& glyph_ids) { e = font_->Tables()->end(); i != e; ++i) { // We already build the builder for glyph and loca. if (i->first != Tag::glyf && i->first != Tag::loca) { - // The newTableBuilder() call will alter internal state of font_builder - // AND the reference count of returned object. Therefore we need to - // dereference it. - TableBuilderPtr dereference; - dereference.Attach( - font_builder->NewTableBuilder(i->first, i->second->ReadFontData())); + font_builder->NewTableBuilder(i->first, i->second->ReadFontData()); } } |