7#ifndef RIME_MAPPED_FILE_H_
8#define RIME_MAPPED_FILE_H_
21template <
class T =
char,
class Offset =
int32_t>
29 offset_ = to_offset(ptr.
get());
33 offset_ = to_offset(ptr);
36 operator bool()
const {
return !!offset_; }
43 return reinterpret_cast<T*
>((
char*)&offset_ + offset_);
47 Offset to_offset(
const T* ptr)
const {
48 return ptr ? (
char*)ptr - (
char*)(&offset_) : 0;
60template <
class T,
class Size = u
int32_t>
70template <
class T,
class Size = u
int32_t>
119 T*
Find(
size_t offset);
132#define RIME_ALIGNED(size, T) ((size + alignof(T) - 1) & ~(alignof(T) - 1))
140 size_t required_space =
sizeof(T) * count;
142 if (used_space + required_space >
file_size) {
144 size_t new_size = (std::max)(used_space + required_space,
file_size * 2);
148 T* ptr =
reinterpret_cast<T*
>(
address() + used_space);
149 std::memset((
void*)ptr, 0, required_space);
150 size_ = used_space + required_space;
156 if (!
IsOpen() || offset > size_)
158 return reinterpret_cast<T*
>(
address() + offset);
163 size_t num_bytes =
sizeof(
Array<T>) +
sizeof(T) * (array_size - 1);
167 ret->
size = array_size;
#define RIME_DLL
Definition rime_api.h:33
#define RIME_ALIGNED(size, T)
Definition mapped_file.h:132
std::unique_ptr< T > the
Definition common.h:58
Definition mapped_file.h:22
OffsetPtr(const OffsetPtr< T > &ptr)
Definition mapped_file.h:27
OffsetPtr< T > & operator=(const OffsetPtr< T > &ptr)
Definition mapped_file.h:28
T * operator->() const
Definition mapped_file.h:37
T * get() const
Definition mapped_file.h:40
OffsetPtr(const T *ptr)
Definition mapped_file.h:26
T & operator[](size_t index) const
Definition mapped_file.h:39
OffsetPtr< T > & operator=(const T *ptr)
Definition mapped_file.h:32
T & operator*() const
Definition mapped_file.h:38
OffsetPtr(Offset offset)
Definition mapped_file.h:25
Definition mapped_file.h:53
const char * c_str() const
Definition mapped_file.h:55
size_t length() const
Definition mapped_file.h:56
bool empty() const
Definition mapped_file.h:57
OffsetPtr< char > data
Definition mapped_file.h:54
Definition mapped_file.h:61
uint32_t size
Definition mapped_file.h:62
const T * begin() const
Definition mapped_file.h:66
const T * end() const
Definition mapped_file.h:67
SpellingMapItem at[1]
Definition mapped_file.h:63
T * end()
Definition mapped_file.h:65
T * begin()
Definition mapped_file.h:64
Definition mapped_file.h:71
OffsetPtr< SpellingDescriptor > at
Definition mapped_file.h:73
uint32_t size
Definition mapped_file.h:72
T * begin()
Definition mapped_file.h:74
const T * end() const
Definition mapped_file.h:77
const T * begin() const
Definition mapped_file.h:76
T * end()
Definition mapped_file.h:75
bool Resize(size_t capacity)
Definition mapped_file.cc:128
const path & file_path() const
Definition mapped_file.h:121
size_t capacity() const
Definition mapped_file.cc:160
T * Allocate(size_t count=1)
Definition mapped_file.h:135
void Close()
Definition mapped_file.cc:96
size_t file_size() const
Definition mapped_file.h:122
String * CreateString(const string &str)
Definition mapped_file.cc:140
MappedFile & operator=(const MappedFile &)=delete
Array< T > * CreateArray(size_t array_size)
Definition mapped_file.h:162
char * address() const
Definition mapped_file.cc:164
bool Remove()
Definition mapped_file.cc:122
bool Exists() const
Definition mapped_file.cc:103
bool ShrinkToFit()
Definition mapped_file.cc:117
bool CopyString(const string &src, String *dest)
Definition mapped_file.cc:148
bool OpenReadWrite()
Definition mapped_file.cc:86
bool OpenReadOnly()
Definition mapped_file.cc:76
bool Create(size_t capacity)
Definition mapped_file.cc:54
MappedFile(const path &file_path)
Definition mapped_file.cc:46
bool IsOpen() const
Definition mapped_file.cc:107
bool Flush()
Definition mapped_file.cc:111
MappedFile(const MappedFile &)=delete
T * Find(size_t offset)
Definition mapped_file.h:155