1/*
2 * Copyright 2011 Google Inc. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "sfntly/port/memory_output_stream.h"
18
19namespace sfntly {
20
21MemoryOutputStream::MemoryOutputStream() {
22}
23
24MemoryOutputStream::~MemoryOutputStream() {
25}
26
27void MemoryOutputStream::Write(ByteVector* buffer) {
28  store_.insert(store_.end(), buffer->begin(), buffer->end());
29}
30
31void MemoryOutputStream::Write(ByteVector* buffer,
32                               int32_t offset,
33                               int32_t length) {
34  assert(buffer);
35  if (offset >= 0 && length > 0) {
36    store_.insert(store_.end(),
37                  buffer->begin() + offset,
38                  buffer->begin() + offset + length);
39  } else {
40#if !defined(SFNTLY_NO_EXCEPTION)
41    throw IndexOutOfBoundException();
42#endif
43  }
44}
45
46void MemoryOutputStream::Write(byte_t* buffer, int32_t offset, int32_t length) {
47  assert(buffer);
48  if (offset >= 0 && length > 0) {
49    store_.insert(store_.end(), buffer + offset, buffer + offset + length);
50  } else {
51#if !defined(SFNTLY_NO_EXCEPTION)
52    throw IndexOutOfBoundException();
53#endif
54  }
55}
56
57void MemoryOutputStream::Write(byte_t b) {
58  store_.push_back(b);
59}
60
61byte_t* MemoryOutputStream::Get() {
62  if (store_.empty()) {
63    return NULL;
64  }
65  return &(store_[0]);
66}
67
68size_t MemoryOutputStream::Size() {
69  return store_.size();
70}
71
72}  // namespace sfntly
73