From 464987db923362e596195f9eebd34fc508c9a412 Mon Sep 17 00:00:00 2001 From: "arthurhsu@google.com" Date: Thu, 23 Jun 2011 17:20:41 +0000 Subject: Initial release git-svn-id: http://sfntly.googlecode.com/svn/trunk/cpp/src@2 672e30a5-4c29-85ac-ac6d-611c735e0a51 --- sfntly/data/growable_memory_byte_array.cc | 67 +++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 sfntly/data/growable_memory_byte_array.cc (limited to 'sfntly/data/growable_memory_byte_array.cc') diff --git a/sfntly/data/growable_memory_byte_array.cc b/sfntly/data/growable_memory_byte_array.cc new file mode 100644 index 0000000..0821321 --- /dev/null +++ b/sfntly/data/growable_memory_byte_array.cc @@ -0,0 +1,67 @@ +/* + * 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. + */ + +#include +#include + +#include "sfntly/data/growable_memory_byte_array.h" + +namespace sfntly { + +GrowableMemoryByteArray::GrowableMemoryByteArray() + : ByteArray(0, INT_MAX, true) { +} + +GrowableMemoryByteArray::~GrowableMemoryByteArray() {} + +bool GrowableMemoryByteArray::internalPut(int32_t index, byte_t b) { + if ((size_t)index >= b_.capacity()) { + b_.resize((size_t)(index + 1) << 2); // grow exponentially + } + b_[index] = b; + return true; +} + +int32_t GrowableMemoryByteArray::internalPut(int32_t index, ByteVector* b, + int32_t offset, int32_t length) { + if ((size_t)index + length >= b_.capacity()) { + b_.resize((size_t)(index + length + 1) << 2); + } + std::copy(b->begin() + offset, b->begin() + (offset + length), + b_.begin() + index); + return length; +} + +byte_t GrowableMemoryByteArray::internalGet(int32_t index) { + return b_[index]; +} + +int32_t GrowableMemoryByteArray::internalGet(int32_t index, ByteVector* b, + int32_t offset, int32_t length) { + std::copy(b_.begin() + index, b_.begin() + (index + length), + b->begin() + offset); + return length; +} + +void GrowableMemoryByteArray::close() { + b_.clear(); +} + +byte_t* GrowableMemoryByteArray::begin() { + return &(b_[0]); +} + +} // namespace sfntly -- cgit v1.2.3 From 246300f7fab1f2539c3207ce5ec28cc355465be8 Mon Sep 17 00:00:00 2001 From: "arthurhsu@google.com" Date: Mon, 1 Aug 2011 17:26:13 +0000 Subject: Readability clean up. The code conforms to Google C++ Coding Style. git-svn-id: http://sfntly.googlecode.com/svn/trunk/cpp/src@30 672e30a5-4c29-85ac-ac6d-611c735e0a51 --- sfntly/data/growable_memory_byte_array.cc | 33 +++++++++++++++++++------------ 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'sfntly/data/growable_memory_byte_array.cc') diff --git a/sfntly/data/growable_memory_byte_array.cc b/sfntly/data/growable_memory_byte_array.cc index 0821321..9e1a043 100644 --- a/sfntly/data/growable_memory_byte_array.cc +++ b/sfntly/data/growable_memory_byte_array.cc @@ -14,10 +14,11 @@ * limitations under the License. */ +#include "sfntly/data/growable_memory_byte_array.h" + #include -#include -#include "sfntly/data/growable_memory_byte_array.h" +#include namespace sfntly { @@ -27,40 +28,46 @@ GrowableMemoryByteArray::GrowableMemoryByteArray() GrowableMemoryByteArray::~GrowableMemoryByteArray() {} -bool GrowableMemoryByteArray::internalPut(int32_t index, byte_t b) { +bool GrowableMemoryByteArray::InternalPut(int32_t index, byte_t b) { if ((size_t)index >= b_.capacity()) { - b_.resize((size_t)(index + 1) << 2); // grow exponentially + b_.resize((size_t)(index + 1) << 2); // Grow exponentially. } b_[index] = b; return true; } -int32_t GrowableMemoryByteArray::internalPut(int32_t index, ByteVector* b, - int32_t offset, int32_t length) { +int32_t GrowableMemoryByteArray::InternalPut(int32_t index, + ByteVector* b, + int32_t offset, + int32_t length) { if ((size_t)index + length >= b_.capacity()) { b_.resize((size_t)(index + length + 1) << 2); } - std::copy(b->begin() + offset, b->begin() + (offset + length), + std::copy(b->begin() + offset, + b->begin() + (offset + length), b_.begin() + index); return length; } -byte_t GrowableMemoryByteArray::internalGet(int32_t index) { +byte_t GrowableMemoryByteArray::InternalGet(int32_t index) { return b_[index]; } -int32_t GrowableMemoryByteArray::internalGet(int32_t index, ByteVector* b, - int32_t offset, int32_t length) { - std::copy(b_.begin() + index, b_.begin() + (index + length), +int32_t GrowableMemoryByteArray::InternalGet(int32_t index, + ByteVector* b, + int32_t offset, + int32_t length) { + std::copy(b_.begin() + index, + b_.begin() + (index + length), b->begin() + offset); return length; } -void GrowableMemoryByteArray::close() { +void GrowableMemoryByteArray::Close() { b_.clear(); } -byte_t* GrowableMemoryByteArray::begin() { +byte_t* GrowableMemoryByteArray::Begin() { return &(b_[0]); } -- cgit v1.2.3 From 32a01c7c6e7be46dda9bfc78de9ce32d99e4c8b7 Mon Sep 17 00:00:00 2001 From: "arthurhsu@google.com" Date: Fri, 19 Aug 2011 22:05:08 +0000 Subject: Port files under /data to Aug 11 version. ReadableFontData.Search*() not ported since they're already in another CL under review. git-svn-id: http://sfntly.googlecode.com/svn/trunk/cpp/src@55 672e30a5-4c29-85ac-ac6d-611c735e0a51 --- sfntly/data/growable_memory_byte_array.cc | 36 +++++++++++++++++++------------ 1 file changed, 22 insertions(+), 14 deletions(-) (limited to 'sfntly/data/growable_memory_byte_array.cc') diff --git a/sfntly/data/growable_memory_byte_array.cc b/sfntly/data/growable_memory_byte_array.cc index 9e1a043..c335614 100644 --- a/sfntly/data/growable_memory_byte_array.cc +++ b/sfntly/data/growable_memory_byte_array.cc @@ -17,6 +17,7 @@ #include "sfntly/data/growable_memory_byte_array.h" #include +#include #include @@ -24,28 +25,37 @@ namespace sfntly { GrowableMemoryByteArray::GrowableMemoryByteArray() : ByteArray(0, INT_MAX, true) { + // Note: We did not set an initial size of array like Java because STL + // implementation will determine the best strategy. } GrowableMemoryByteArray::~GrowableMemoryByteArray() {} -bool GrowableMemoryByteArray::InternalPut(int32_t index, byte_t b) { - if ((size_t)index >= b_.capacity()) { - b_.resize((size_t)(index + 1) << 2); // Grow exponentially. +int32_t GrowableMemoryByteArray::CopyTo(OutputStream* os, + int32_t offset, + int32_t length) { + assert(os); + os->Write(&b_, offset, length); + return length; +} + +void GrowableMemoryByteArray::InternalPut(int32_t index, byte_t b) { + if ((size_t)index >= b_.size()) { + b_.resize((size_t)(index + 1)); } b_[index] = b; - return true; } int32_t GrowableMemoryByteArray::InternalPut(int32_t index, - ByteVector* b, + byte_t* b, int32_t offset, int32_t length) { - if ((size_t)index + length >= b_.capacity()) { - b_.resize((size_t)(index + length + 1) << 2); + if ((size_t)index + length >= b_.size()) { + // Note: We grow one byte more than Java version. VC debuggers shows + // data better this way. + b_.resize((size_t)(index + length + 1)); } - std::copy(b->begin() + offset, - b->begin() + (offset + length), - b_.begin() + index); + std::copy(b + offset, b + offset + length, b_.begin() + index); return length; } @@ -54,12 +64,10 @@ byte_t GrowableMemoryByteArray::InternalGet(int32_t index) { } int32_t GrowableMemoryByteArray::InternalGet(int32_t index, - ByteVector* b, + byte_t* b, int32_t offset, int32_t length) { - std::copy(b_.begin() + index, - b_.begin() + (index + length), - b->begin() + offset); + memcpy(b + offset, &(b_[0]) + index, length); return length; } -- cgit v1.2.3