Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef ROSBAG_CHUNKED_FILE_H
00036 #define ROSBAG_CHUNKED_FILE_H
00037
00038 #include <ios>
00039 #include <stdint.h>
00040 #include <string>
00041 #include "macros.h"
00042 #include <boost/shared_ptr.hpp>
00043
00044 #include <bzlib.h>
00045
00046 #include "rosbag/stream.h"
00047
00048 namespace rosbag {
00049
00051 class ROSBAG_DECL ChunkedFile
00052 {
00053 friend class Stream;
00054
00055 public:
00056 ChunkedFile();
00057 ~ChunkedFile();
00058
00059 void openWrite (std::string const& filename);
00060 void openRead (std::string const& filename);
00061 void openReadWrite(std::string const& filename);
00062
00063 void close();
00064
00065 std::string getFileName() const;
00066 uint64_t getOffset() const;
00067 uint32_t getCompressedBytesIn() const;
00068 bool isOpen() const;
00069 bool good() const;
00070
00071 void setReadMode(CompressionType type);
00072 void setWriteMode(CompressionType type);
00073
00074
00075 void write(std::string const& s);
00076 void write(void* ptr, size_t size);
00077 void read(void* ptr, size_t size);
00078 std::string getline();
00079 bool truncate(uint64_t length);
00080 void seek(uint64_t offset, int origin = std::ios_base::beg);
00081 void decompress(CompressionType compression, uint8_t* dest, unsigned int dest_len, uint8_t* source, unsigned int source_len);
00082
00083 private:
00084 void open(std::string const& filename, std::string const& mode);
00085 void clearUnused();
00086
00087 private:
00088 std::string filename_;
00089 FILE* file_;
00090 uint64_t offset_;
00091 uint64_t compressed_in_;
00092 char* unused_;
00093 int nUnused_;
00094
00095 boost::shared_ptr<StreamFactory> stream_factory_;
00096
00097 boost::shared_ptr<Stream> read_stream_;
00098 boost::shared_ptr<Stream> write_stream_;
00099 };
00100
00101 }
00102
00103 #endif