Added CreateWritableFontData factory methods to WritableFontData.
git-svn-id: http://sfntly.googlecode.com/svn/trunk/cpp/src@46 672e30a5-4c29-85ac-ac6d-611c735e0a51
diff --git a/sfntly/data/writable_font_data.cc b/sfntly/data/writable_font_data.cc
index 586acc1..bf03516 100644
--- a/sfntly/data/writable_font_data.cc
+++ b/sfntly/data/writable_font_data.cc
@@ -16,6 +16,9 @@
#include "sfntly/data/writable_font_data.h"
+#include "sfntly/data/memory_byte_array.h"
+#include "sfntly/data/growable_memory_byte_array.h"
+
namespace sfntly {
WritableFontData::WritableFontData(ByteArray* ba) : ReadableFontData(ba) {
@@ -23,6 +26,29 @@
WritableFontData::~WritableFontData() {}
+// static
+CALLER_ATTACH
+WritableFontData* WritableFontData::CreateWritableFontData(int32_t length) {
+ ByteArrayPtr ba;
+ if (length > 0) {
+ ba = new MemoryByteArray(length);
+ ba->SetFilledLength(length);
+ } else {
+ ba = new GrowableMemoryByteArray();
+ }
+ WritableFontDataPtr wfd = new WritableFontData(ba);
+ return wfd.Detach();
+}
+
+// static
+CALLER_ATTACH
+WritableFontData* WritableFontData::CreateWritableFontData(ByteVector* b) {
+ ByteArrayPtr ba = new GrowableMemoryByteArray();
+ ba->Put(0, b);
+ WritableFontDataPtr wfd = new WritableFontData(ba);
+ return wfd.Detach();
+}
+
int32_t WritableFontData::WriteByte(int32_t index, byte_t b) {
array_->Put(BoundOffset(index), b);
return 1;
diff --git a/sfntly/data/writable_font_data.h b/sfntly/data/writable_font_data.h
index 98c9204..ec74da7 100644
--- a/sfntly/data/writable_font_data.h
+++ b/sfntly/data/writable_font_data.h
@@ -26,6 +26,24 @@
explicit WritableFontData(ByteArray* ba);
virtual ~WritableFontData();
+ // Constructs a writable font data object. If the length is specified as
+ // positive then a fixed size font data object will be created. If the length
+ // is zero or less then a growable font data object will be created and the
+ // size will be used as an estimate to help in allocating the original space.
+ //
+ // @param length if length > 0 create a fixed length font data; otherwise
+ // create a growable font data
+ // @return a new writable font data
+ static CALLER_ATTACH WritableFontData* CreateWritableFontData(int32_t length);
+
+ // Constructs a writable font data object. The new font data object will wrap
+ // the bytes passed in to the factory and it will take make a copy of those
+ // bytes.
+ //
+ // @param b the byte vector to wrap
+ // @return a new writable font data
+ static CALLER_ATTACH WritableFontData* CreateWritableFontData(ByteVector* b);
+
virtual int32_t WriteByte(int32_t index, byte_t b);
virtual int32_t WriteBytes(int32_t offset,
ByteVector* b,