benchmarks compiles with clang
[c11concurrency-benchmarks.git] / mabain / src / mmap_file.h
1 /**
2  * Copyright (C) 2017 Cisco Inc.
3  *
4  * This program is free software: you can redistribute it and/or  modify
5  * it under the terms of the GNU General Public License, version 2,
6  * as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15  */
16
17 // @author Changxue Deng <chadeng@cisco.com>
18
19 #ifndef __MMAP_FILE__
20 #define __MMAP_FILE__
21
22 #include <iostream>
23 #include <string>
24 #include <stdint.h>
25
26 #include <sys/stat.h>
27 #include <fcntl.h>
28 #include <sys/types.h>
29
30 #include "file_io.h"
31 #include "logger.h"
32
33 namespace mabain {
34
35 // Memory mapped file class
36 class MmapFileIO : public FileIO
37 {
38 public:
39     MmapFileIO(const std::string &fpath, int mode, off_t filesize, bool sync=false);
40     ~MmapFileIO();
41
42     uint8_t* MapFile(size_t size, off_t offset, bool sliding=false);
43     bool     IsMapped() const;
44     size_t   SeqWrite(const void *data, size_t size);
45     size_t   RandomWrite(const void *data, size_t size, off_t offset);
46     size_t   SeqRead(void *buff, size_t size);
47     size_t   RandomRead(void *buff, size_t size, off_t offset);
48     void     UnMapFile();
49     uint8_t* GetMapAddr() const;
50     void     Flush();
51
52 private:
53     bool mmap_file;
54     size_t mmap_size;
55     off_t mmap_start;
56     off_t mmap_end;
57     unsigned char *addr;
58     // The maximal offset where data have been written
59     size_t max_offset;
60     // Current offset for sequential reading of writing only
61     off_t curr_offset;
62 };
63
64 }
65
66 #endif