summaryrefslogtreecommitdiff
path: root/sfntly/data/memory_byte_array.cc
diff options
context:
space:
mode:
authorAndroid Chromium Automerger <chromium-automerger@android>2013-11-22 00:22:29 +0000
committerAndroid Chromium Automerger <chromium-automerger@android>2013-11-22 00:22:29 +0000
commit4a8c3597eb72a7042ead9632e4c3e4fddb5ac695 (patch)
tree3409a319b231317c63b0b3477c161c76822bcb92 /sfntly/data/memory_byte_array.cc
parent0232d0f400400568410e1f85e7aba28bcd2ac183 (diff)
parent8f090032dd4f8f8908f338cc73bb840b788377f2 (diff)
downloadsrc-4a8c3597eb72a7042ead9632e4c3e4fddb5ac695.tar.gz
Merge third_party/sfntly/cpp/src from https://chromium.googlesource.com/external/sfntly/cpp/src.git at 8f090032dd4f8f8908f338cc73bb840b788377f2
This commit was generated by merge_from_chromium.py. Change-Id: I6bab7aea653201e125014f7b81504acf7b846300
Diffstat (limited to 'sfntly/data/memory_byte_array.cc')
-rw-r--r--sfntly/data/memory_byte_array.cc93
1 files changed, 93 insertions, 0 deletions
diff --git a/sfntly/data/memory_byte_array.cc b/sfntly/data/memory_byte_array.cc
new file mode 100644
index 0000000..d6c9c48
--- /dev/null
+++ b/sfntly/data/memory_byte_array.cc
@@ -0,0 +1,93 @@
+/*
+ * 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 "sfntly/data/memory_byte_array.h"
+
+#include <string.h>
+
+namespace sfntly {
+
+MemoryByteArray::MemoryByteArray(int32_t length)
+ : ByteArray(0, length), b_(NULL), allocated_(true) {
+}
+
+MemoryByteArray::MemoryByteArray(byte_t* b, int32_t filled_length)
+ : ByteArray(filled_length, filled_length), b_(b), allocated_(false) {
+ assert(b);
+}
+
+MemoryByteArray::~MemoryByteArray() {
+ Close();
+}
+
+int32_t MemoryByteArray::CopyTo(OutputStream* os,
+ int32_t offset,
+ int32_t length) {
+ assert(os);
+ os->Write(b_, offset, length);
+ return length;
+}
+
+void MemoryByteArray::Init() {
+ if (allocated_ && b_ == NULL) {
+ b_ = new byte_t[Size()];
+ memset(b_, 0, Size());
+ }
+}
+
+void MemoryByteArray::InternalPut(int32_t index, byte_t b) {
+ Init();
+ b_[index] = b;
+}
+
+int32_t MemoryByteArray::InternalPut(int32_t index,
+ byte_t* b,
+ int32_t offset,
+ int32_t length) {
+ assert(b);
+ Init();
+ memcpy(b_ + index, b + offset, length);
+ return length;
+}
+
+byte_t MemoryByteArray::InternalGet(int32_t index) {
+ Init();
+ return b_[index];
+}
+
+int32_t MemoryByteArray::InternalGet(int32_t index,
+ byte_t* b,
+ int32_t offset,
+ int32_t length) {
+ assert(b);
+ Init();
+ memcpy(b + offset, b_ + index, length);
+ return length;
+}
+
+void MemoryByteArray::Close() {
+ if (allocated_ && b_) {
+ delete[] b_;
+ }
+ b_ = NULL;
+}
+
+byte_t* MemoryByteArray::Begin() {
+ Init();
+ return b_;
+}
+
+} // namespace sfntly