1a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. 2a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain 3a4bbacf14882f60525947c1b543b0ad250c793dbRohan JainLicensed under the Apache License, Version 2.0 (the "License"); 4a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jainyou may not use this file except in compliance with the License. 5a4bbacf14882f60525947c1b543b0ad250c793dbRohan JainYou may obtain a copy of the License at 6a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain 7a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain http://www.apache.org/licenses/LICENSE-2.0 8a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain 9a4bbacf14882f60525947c1b543b0ad250c793dbRohan JainUnless required by applicable law or agreed to in writing, software 10a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jaindistributed under the License is distributed on an "AS IS" BASIS, 11a4bbacf14882f60525947c1b543b0ad250c793dbRohan JainWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12a4bbacf14882f60525947c1b543b0ad250c793dbRohan JainSee the License for the specific language governing permissions and 13a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jainlimitations under the License. 14a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain==============================================================================*/ 15a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain 16a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain#ifndef TENSORFLOW_LIB_IO_RANDOM_INPUTSTREAM_H_ 17a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain#define TENSORFLOW_LIB_IO_RANDOM_INPUTSTREAM_H_ 18a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain 19a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain#include "tensorflow/core/lib/io/inputstream_interface.h" 20a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain#include "tensorflow/core/platform/file_system.h" 21a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain 22a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jainnamespace tensorflow { 23a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jainnamespace io { 24a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain 25a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain// Wraps a RandomAccessFile in an InputStreamInterface. A given instance of 26a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain// RandomAccessInputStream is NOT safe for concurrent use by multiple threads. 27a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jainclass RandomAccessInputStream : public InputStreamInterface { 28a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain public: 290f605abad3b30594416dc627860102e3382d6deaRohan Jain // Does not take ownership of 'file' unless owns_file is set to true. 'file' 300f605abad3b30594416dc627860102e3382d6deaRohan Jain // must outlive *this. 310f605abad3b30594416dc627860102e3382d6deaRohan Jain RandomAccessInputStream(RandomAccessFile* file, bool owns_file = false); 320f605abad3b30594416dc627860102e3382d6deaRohan Jain 330f605abad3b30594416dc627860102e3382d6deaRohan Jain ~RandomAccessInputStream(); 34a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain 35a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain Status ReadNBytes(int64 bytes_to_read, string* result) override; 36a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain 37ee8b13791a921964cad1fc699e72ff1f738b704fYong Tang Status SkipNBytes(int64 bytes_to_skip) override; 38ee8b13791a921964cad1fc699e72ff1f738b704fYong Tang 39b65a2957ba433b0ed0e529696991af4cc818f1c1Rohan Jain int64 Tell() const override; 40a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain 4163a7a30e6bd091f87be1de2305c6d882d68ba6a8Vijay Vasudevan Status Seek(int64 position) { 4263a7a30e6bd091f87be1de2305c6d882d68ba6a8Vijay Vasudevan pos_ = position; 4363a7a30e6bd091f87be1de2305c6d882d68ba6a8Vijay Vasudevan return Status::OK(); 4463a7a30e6bd091f87be1de2305c6d882d68ba6a8Vijay Vasudevan } 4563a7a30e6bd091f87be1de2305c6d882d68ba6a8Vijay Vasudevan 4663a7a30e6bd091f87be1de2305c6d882d68ba6a8Vijay Vasudevan Status Reset() override { return Seek(0); } 4763a7a30e6bd091f87be1de2305c6d882d68ba6a8Vijay Vasudevan 48a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain private: 49a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain RandomAccessFile* file_; // Not owned. 50a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain int64 pos_ = 0; // Tracks where we are in the file. 510f605abad3b30594416dc627860102e3382d6deaRohan Jain bool owns_file_ = false; 52a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain}; 53a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain 54a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain} // namespace io 55a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain} // namespace tensorflow 56a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain 57a4bbacf14882f60525947c1b543b0ad250c793dbRohan Jain#endif // TENSORFLOW_LIB_IO_RANDOM_INPUTSTREAM_H_ 58