12e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala/*
22e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * Copyright 2012, The Android Open Source Project
32e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala *
42e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
52e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * you may not use this file except in compliance with the License.
62e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * You may obtain a copy of the License at
72e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala *
82e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala *     http://www.apache.org/licenses/LICENSE-2.0
92e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala *
102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * See the License for the specific language governing permissions and
142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * limitations under the License.
152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala */
162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala
174bb8118816874c696d9f1adab48490df1da365f7Eino-Ville Talvala#include <sys/stat.h>
182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include <stdlib.h>
190b88a62d4d5ac1e515721e587cdf9bcec191812bIgor Murashkin
202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include "bcinfo/Wrap/in_memory_wrapper_input.h"
21da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala
22da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville TalvalaInMemoryWrapperInput::InMemoryWrapperInput(const char* buffer, size_t size) :
23af3d28870f7890370d6acb21d20cf1ccab4b9e08Igor Murashkin    _buffer(buffer), _pos(0), _size(size) {
24af3d28870f7890370d6acb21d20cf1ccab4b9e08Igor Murashkin}
25da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala
262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville TalvalaInMemoryWrapperInput::~InMemoryWrapperInput() {
272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}
28b075252349a4b40ddda791f2e1221ae0ce7e4cd1Eino-Ville Talvala
292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalasize_t InMemoryWrapperInput::Read(uint8_t* buffer, size_t wanted) {
302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala  size_t found = 0;
312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala
32cd8fce8fbe0f515e53a0ea0f50b739cf42ee57a4Yin-Chia Yeh  if (!buffer) {
33d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    return 0;
340cbfbf3624c67cf40a18d5405a46d002aa12a048Zhijun He  }
350cbfbf3624c67cf40a18d5405a46d002aa12a048Zhijun He
362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala  while (found < wanted) {
372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala    if (_pos >= _size) {
382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala      return found;
392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala    }
402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala    buffer[found++] = _buffer[_pos++];
412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala  }
422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala  return found;
432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}
442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala
452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalabool InMemoryWrapperInput::AtEof() {
462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala  return (_pos >= _size);
472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}
482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala
492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaoff_t InMemoryWrapperInput::Size() {
50cd8fce8fbe0f515e53a0ea0f50b739cf42ee57a4Yin-Chia Yeh  return _size;
512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}
522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala
532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalabool InMemoryWrapperInput::Seek(uint32_t pos) {
542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala  if (pos < _size) {
552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala    _pos = pos;
562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala    return true;
572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala  } else {
58cd8fce8fbe0f515e53a0ea0f50b739cf42ee57a4Yin-Chia Yeh    return false;
592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala  }
602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}
612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala