1*c42dbd0eSchristos /* Copyright (C) 2021 Free Software Foundation, Inc. 2*c42dbd0eSchristos Contributed by Oracle. 3*c42dbd0eSchristos 4*c42dbd0eSchristos This file is part of GNU Binutils. 5*c42dbd0eSchristos 6*c42dbd0eSchristos This program is free software; you can redistribute it and/or modify 7*c42dbd0eSchristos it under the terms of the GNU General Public License as published by 8*c42dbd0eSchristos the Free Software Foundation; either version 3, or (at your option) 9*c42dbd0eSchristos any later version. 10*c42dbd0eSchristos 11*c42dbd0eSchristos This program is distributed in the hope that it will be useful, 12*c42dbd0eSchristos but WITHOUT ANY WARRANTY; without even the implied warranty of 13*c42dbd0eSchristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*c42dbd0eSchristos GNU General Public License for more details. 15*c42dbd0eSchristos 16*c42dbd0eSchristos You should have received a copy of the GNU General Public License 17*c42dbd0eSchristos along with this program; if not, write to the Free Software 18*c42dbd0eSchristos Foundation, 51 Franklin Street - Fifth Floor, Boston, 19*c42dbd0eSchristos MA 02110-1301, USA. */ 20*c42dbd0eSchristos 21*c42dbd0eSchristos #ifndef _DATASTREAM_H 22*c42dbd0eSchristos #define _DATASTREAM_H 23*c42dbd0eSchristos 24*c42dbd0eSchristos #include "Data_window.h" 25*c42dbd0eSchristos 26*c42dbd0eSchristos // sequential access to the file 27*c42dbd0eSchristos class DataStream : public Data_window 28*c42dbd0eSchristos { 29*c42dbd0eSchristos public: 30*c42dbd0eSchristos // Create an empty data window. 31*c42dbd0eSchristos DataStream (char *file_name); 32*c42dbd0eSchristos ~DataStream (); 33*c42dbd0eSchristos void set_span (int64_t f_offset, int64_t sz); 34*c42dbd0eSchristos int64_t read (void *buf, int64_t len); 35*c42dbd0eSchristos 36*c42dbd0eSchristos template <typename Key_t> inline int64_t read(Key_t & val)37*c42dbd0eSchristos read (Key_t &val) 38*c42dbd0eSchristos { 39*c42dbd0eSchristos int64_t sz = read (&val, sizeof (val)); 40*c42dbd0eSchristos if (need_swap_endian && sz == sizeof (val)) 41*c42dbd0eSchristos swapByteOrder (&val, sizeof (val)); 42*c42dbd0eSchristos return sz; 43*c42dbd0eSchristos } 44*c42dbd0eSchristos 45*c42dbd0eSchristos private: 46*c42dbd0eSchristos int64_t span_offset; 47*c42dbd0eSchristos int64_t span_size; // the window size 48*c42dbd0eSchristos int64_t span_fileoffset; // the window begin on the file 49*c42dbd0eSchristos }; 50*c42dbd0eSchristos 51*c42dbd0eSchristos #endif /* _DATASTREAM_H */ 52