| /* |
| * Copyright 2014 The Android Open Source Project |
| * |
| * 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 <img_utils/EndianUtils.h> |
| |
| namespace android { |
| namespace img_utils { |
| |
| EndianOutput::EndianOutput(Output* out, Endianness end) |
| : mOffset(0), mOutput(out), mEndian(end) {} |
| |
| EndianOutput::~EndianOutput() {} |
| |
| status_t EndianOutput::open() { |
| mOffset = 0; |
| return mOutput->open(); |
| } |
| |
| status_t EndianOutput::close() { |
| return mOutput->close(); |
| } |
| |
| void EndianOutput::setEndianness(Endianness end) { |
| mEndian = end; |
| } |
| |
| uint32_t EndianOutput::getCurrentOffset() const { |
| return mOffset; |
| } |
| |
| Endianness EndianOutput::getEndianness() const { |
| return mEndian; |
| } |
| |
| status_t EndianOutput::write(const uint8_t* buf, size_t offset, size_t count) { |
| status_t res = OK; |
| if((res = mOutput->write(buf, offset, count)) == OK) { |
| mOffset += count; |
| } |
| return res; |
| } |
| |
| status_t EndianOutput::write(const int8_t* buf, size_t offset, size_t count) { |
| return write(reinterpret_cast<const uint8_t*>(buf), offset, count); |
| } |
| |
| #define DEFINE_WRITE(_type_) \ |
| status_t EndianOutput::write(const _type_* buf, size_t offset, size_t count) { \ |
| return writeHelper<_type_>(buf, offset, count); \ |
| } |
| |
| DEFINE_WRITE(uint16_t) |
| DEFINE_WRITE(int16_t) |
| DEFINE_WRITE(uint32_t) |
| DEFINE_WRITE(int32_t) |
| DEFINE_WRITE(uint64_t) |
| DEFINE_WRITE(int64_t) |
| |
| status_t EndianOutput::write(const float* buf, size_t offset, size_t count) { |
| assert(sizeof(float) == sizeof(uint32_t)); |
| return writeHelper<uint32_t>(reinterpret_cast<const uint32_t*>(buf), offset, count); |
| } |
| |
| status_t EndianOutput::write(const double* buf, size_t offset, size_t count) { |
| assert(sizeof(double) == sizeof(uint64_t)); |
| return writeHelper<uint64_t>(reinterpret_cast<const uint64_t*>(buf), offset, count); |
| } |
| |
| } /*namespace img_utils*/ |
| } /*namespace android*/ |