Project
Loading...
Searching...
No Matches
BinFileOp.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12// @brief Polymorphic class to access either local or grid files with fixed sed ot methods
13#ifndef _BIN_FILE_OP_H_
14#define _BIN_FILE_OP_H_
15
16#include <TFile.h>
17#include <boost/filesystem.hpp>
18#include <boost/iostreams/device/mapped_file.hpp>
19#include <string>
20#include <algorithm>
21
22namespace o2::rawdd
23{
24
26{
27 public:
28 static constexpr size_t KBYTE = 1024;
29 static constexpr size_t MBYTE = 1024 * KBYTE;
30 static constexpr size_t MaxBuffSize = 20 * MBYTE;
31 virtual ~BinFileOp() = default;
32
33 virtual bool read_advance(void* ptr, size_t len) = 0;
34 virtual void set_position(size_t pos) = 0;
35 virtual bool ignore_nbytes(size_t pLen) = 0;
36 virtual bool isGood() const = 0;
37 virtual unsigned char* bufferize(size_t& s) = 0;
38 virtual size_t bufferized_size() const = 0;
39 size_t bufferized_pos() const { return mBufferizedPos; }
40 size_t size() const { return mFileSize; }
41 size_t position() const { return mFileOffset; }
42 size_t distance_to_eof() const { return mFileSize - mFileOffset; }
43 bool eof() const { return mFileOffset == mFileSize; }
44
45 static BinFileOp* open(const std::string& name);
46
47 protected:
48 BinFileOp(const std::string& name) : mFileName(name) {}
49
50 std::string mFileName = {};
51 size_t mFileOffset = 0;
52 size_t mFileSize = 0;
53 size_t mBufferizedPos = -1UL;
54};
55
56//========================================================================
58{
59 public:
60 BinFileOpLocal(const std::string& name);
61 ~BinFileOpLocal() override;
62
63 bool read_advance(void* ptr, size_t len) override;
64 void set_position(size_t pos) override
65 {
66 assert(pos <= mFileSize);
67 mFileOffset = std::min(pos, mFileSize);
68 }
69 unsigned char* bufferize(size_t& s) override;
70 size_t bufferized_size() const override { return mFileSize - mBufferizedPos; }
71
72 bool ignore_nbytes(size_t len) override;
73 bool isGood() const override { return mFileMap.is_open(); }
74
75 size_t size() const { return mFileSize; }
76 size_t position() const { return mFileOffset; }
77 bool eof() const { return mFileOffset == mFileSize; }
78
79 protected:
80 boost::iostreams::mapped_file_source mFileMap;
81};
82
83//========================================================================
85{
86 public:
87 BinFileOpGrid(const std::string& name);
88 ~BinFileOpGrid() override = default;
89
90 bool read_advance(void* ptr, size_t len) override;
91 unsigned char* bufferize(size_t& s) override;
92 size_t bufferized_size() const override { return mBuffer.size(); }
93 void set_position(size_t pos) override;
94 bool ignore_nbytes(size_t len) override;
95 bool isGood() const override { return mFile && !mFile->IsZombie(); }
96
97 size_t size() const { return mFileSize; }
98 size_t position() const { return mFileOffset; }
99 bool eof() const { return mFileOffset == mFileSize; }
100
101 protected:
102 std::unique_ptr<TFile> mFile;
103 std::vector<unsigned char> mBuffer;
104};
105
106} // namespace o2::rawdd
107
108#endif
uint16_t pos
Definition RawData.h:3
TBranch * ptr
~BinFileOpGrid() override=default
size_t bufferized_size() const override
Definition BinFileOp.h:92
size_t size() const
Definition BinFileOp.h:97
bool ignore_nbytes(size_t len) override
std::vector< unsigned char > mBuffer
Definition BinFileOp.h:103
size_t position() const
Definition BinFileOp.h:98
unsigned char * bufferize(size_t &s) override
std::unique_ptr< TFile > mFile
Definition BinFileOp.h:102
bool isGood() const override
Definition BinFileOp.h:95
bool read_advance(void *ptr, size_t len) override
void set_position(size_t pos) override
size_t size() const
Definition BinFileOp.h:75
size_t bufferized_size() const override
Definition BinFileOp.h:70
void set_position(size_t pos) override
Definition BinFileOp.h:64
bool read_advance(void *ptr, size_t len) override
Definition BinFileOp.cxx:56
bool ignore_nbytes(size_t len) override
Definition BinFileOp.cxx:85
size_t position() const
Definition BinFileOp.h:76
boost::iostreams::mapped_file_source mFileMap
Definition BinFileOp.h:80
bool isGood() const override
Definition BinFileOp.h:73
unsigned char * bufferize(size_t &s) override
Definition BinFileOp.cxx:75
static constexpr size_t MaxBuffSize
Definition BinFileOp.h:30
static constexpr size_t KBYTE
Definition BinFileOp.h:28
size_t position() const
Definition BinFileOp.h:41
static constexpr size_t MBYTE
Definition BinFileOp.h:29
virtual ~BinFileOp()=default
size_t distance_to_eof() const
Definition BinFileOp.h:42
virtual bool read_advance(void *ptr, size_t len)=0
bool eof() const
Definition BinFileOp.h:43
virtual size_t bufferized_size() const =0
virtual void set_position(size_t pos)=0
std::string mFileName
Definition BinFileOp.h:50
size_t bufferized_pos() const
Definition BinFileOp.h:39
virtual bool ignore_nbytes(size_t pLen)=0
virtual unsigned char * bufferize(size_t &s)=0
BinFileOp(const std::string &name)
Definition BinFileOp.h:48
static BinFileOp * open(const std::string &name)
Definition BinFileOp.cxx:24
virtual bool isGood() const =0
size_t size() const
Definition BinFileOp.h:40
GLuint const GLchar * name
Definition glcorearb.h:781
GLenum GLenum GLsizei len
Definition glcorearb.h:4232