5 #ifndef HOBBES_DB_FILE_HPP_INCLUDED 6 #define HOBBES_DB_FILE_HPP_INCLUDED 26 this->index = x.
index;
30 fileref(uint64_t index = 0) : index(index) {
34 template <
typename T,
bool InStruct>
51 dbseq(
const T& x, link_t xs) : data(cons_t(x, xs)) { }
53 bool empty()
const {
return get<unit>(this->data) != 0; }
54 const cons_t*
head()
const {
return get<cons_t>(this->data); }
57 template <
typename T,
bool InStruct>
105 template <
typename T>
127 reader(
const std::string&);
130 const std::string& file()
const;
137 template <
typename T>
143 template <
typename T>
149 template <
typename T>
155 template <
typename T>
157 unsafeUnload(x,
sizeof(T));
160 template <
typename T>
162 unsafeUnloadArray(xs);
174 unsigned int r = (
unsigned int)this->storedOffsets.size();
175 this->storedOffsets.push_back(offset);
176 this->storedOffSizes.push_back(is<Array>(ty) ? 0 :
storageSizeOf(ty));
181 if (this->storedOffSizes[o] > 0) {
182 return unsafeLoad(this->storedOffsets[o], this->storedOffSizes[o]);
184 return unsafeLoadArray(this->storedOffsets[o]);
189 *offset = this->storedOffsets[o];
190 *sz = this->storedOffSizes[o];
194 void showFileSummary(std::ostream&)
const;
195 void showEnvironment(std::ostream&)
const;
196 void showMappings(std::ostream&,
size_t)
const;
197 void showPageTable(std::ostream&,
size_t)
const;
198 void show(std::ostream&)
const;
201 void* unsafeLookup(
const std::string&,
const MonoTypePtr&)
const;
202 uint64_t unsafeLookupOffset(
const std::string&,
const MonoTypePtr&)
const;
203 uint64_t unsafeOffsetOf(
const MonoTypePtr&,
void*)
const;
204 uint64_t unsafeOffsetOfVal(
bool,
void*)
const;
205 void* unsafeLoad(
const MonoTypePtr&, uint64_t)
const;
206 void* unsafeLoad(uint64_t,
size_t)
const;
207 void* unsafeLoadArray(uint64_t)
const;
208 void unsafeUnload(
void*,
size_t);
209 void unsafeUnloadArray(
void*);
211 uint64_t unsafeArrayCapacity(uint64_t)
const;
213 int unsafeGetFD()
const;
227 writer(
const std::string&);
230 template <
typename T>
235 template <
typename T>
241 template <
typename T>
246 template <
typename T>
257 template <
typename TIter>
259 typedef typename std::iterator_traits<TIter>::value_type T;
262 for (
size_t i = 0; i < len; ++i) {
267 auto result = offsetOf(r);
273 void* unsafeDefine(
const std::string&,
const MonoTypePtr&);
274 void* unsafeDefine(
const std::string&,
const MonoTypePtr&,
size_t);
279 void* unsafeStore(
size_t sz,
size_t align);
280 uint64_t unsafeStoreToOffset(
size_t sz,
size_t align);
282 void* unsafeStoreArray(
size_t,
size_t);
283 uint64_t unsafeStoreArrayToOffset(
size_t,
size_t);
287 void* allocNamed(
const std::string&,
const MonoTypePtr&,
size_t);
288 void* allocAnon(
size_t sz,
size_t align);
295 std::string
uniqueFilename(
const std::string& prefix,
const std::string& suffix);
298 std::string
moveToUniqueFilename(
const std::string& oldpath,
const std::string& fprefix,
const std::string& fsuffix);
306 for (
const auto&
m : fdefs) {
319 for (
const auto&
m : fdefs) {
frefty< T >::ptr lookup(const std::string &vn) const
Definition: file.H:138
nulltypedb nulltdb
Definition: type.C:2239
T align(T x, T m)
Definition: ptr.H:98
static MonoTypePtr make(const std::string &, const MonoTypePtr &t=MonoTypePtr())
Definition: type.C:613
const cons_t * head() const
Definition: file.H:54
MonoTypeSubst signature() const
Definition: file.C:921
dbseq< T > * type
Definition: file.H:95
array< T > * store(size_t len)
Definition: file.H:247
bool storedAsArray(const MonoTypePtr &)
Definition: file.C:973
StoredOffsetSizes storedOffSizes
Definition: file.H:169
void unmap(array< T > *xs)
Definition: file.H:161
void * unsafeLoadStoredOffset(unsigned int o) const
Definition: file.H:180
bool isDBFile(const std::string &)
Definition: file.C:859
static MonoTypePtr type(typedb &tenv)
Definition: file.H:36
dbseq< T > * ptr
Definition: file.H:96
MonoTypePtr primty(const char *x)
Definition: type.H:1008
std::vector< uint64_t > StoredOffsets
Definition: file.H:165
variant< unit, cons_t > rep_t
Definition: file.H:46
array< PageEntry > PageEntries
Definition: file.H:217
static MonoTypePtr type(typedb &tenv, reader *r)
Definition: file.H:303
recursive< T > * type
Definition: file.H:101
long size
Definition: tylift.H:84
array< T > * define(const std::string &vn, size_t len)
Definition: file.H:236
llvm::Value * offset(llvm::IRBuilder<> *b, llvm::Value *p, llvm::Value *o0)
Definition: llvm.H:419
array< T > * type
Definition: file.H:77
imagefile * fdata
Definition: file.H:221
static MonoTypePtr make(const std::string &, const MonoTypePtr &)
Definition: type.C:1431
MonoType::ptr MonoTypePtr
Definition: type.H:71
fileref(uint64_t index=0)
Definition: file.H:30
dbseq()
Definition: file.H:50
dbseq(const T &x, link_t xs)
Definition: file.H:51
T * store()
Definition: file.H:242
recursive< T > * ptr
Definition: file.H:102
array< T > * type
Definition: file.H:83
static MonoTypePtr make(const MonoTypePtr &, const MonoTypes &)
Definition: type.C:701
static MonoTypePtr type(typedb &tenv, writer *w)
Definition: file.H:316
T type
Definition: file.H:71
MonoTypePtr tlong(long x)
Definition: type.H:1137
std::pair< T, link_t > cons_t
Definition: file.H:45
static MonoTypePtr type(typedb &tenv)
Definition: file.H:59
fileref< T > & operator=(const fileref< T > &x)
Definition: file.H:25
std::pair< uint8_t, short > PageEntry
Definition: file.H:216
unsigned int pushOffset(uint64_t offset, const MonoTypePtr &ty)
Definition: file.H:173
std::string show(const Expr &e)
Definition: expr.C:19
dbseq< T > * type
Definition: file.H:89
fileref< array< typename std::iterator_traits< TIter >::value_type > * > store(TIter b, TIter e)
Definition: file.H:258
std::vector< T > list()
Definition: array.H:25
MonoTypePtr tvar(const std::string &vn)
Definition: type.H:1060
void unmap(T *x)
Definition: file.H:156
size_t r(const reader::MetaData &md, size_t o, T *t)
Definition: storage.H:1730
void w(const T &x, bytes *out)
Definition: net.H:282
Definition: variant.H:165
uint64_t index
Definition: file.H:23
rep_t data
Definition: file.H:48
frefty< T >::ptr load(const fileref< T > &x)
Definition: file.H:150
std::string moveToUniqueFilename(const std::string &oldpath, const std::string &fprefix, const std::string &fsuffix)
Definition: file.C:1266
bool empty() const
Definition: file.H:53
static MonoTypePtr make(const Members &ms)
Definition: type.C:1037
fileref< dbseq< T > * > link_t
Definition: file.H:44
recursive< T > * ptr
Definition: file.H:108
array< T > * ptr
Definition: file.H:84
static MonoTypePtr make(const Members &)
Definition: type.C:760
uint32_t result
Definition: regex.C:376
T data[1]
Definition: tylift.H:85
void ensureDirExists(const std::string &)
Definition: file.C:1222
std::vector< Member > Members
Definition: type.H:435
array< T > * ptr
Definition: file.H:78
StoredOffsets storedOffsets
Definition: file.H:168
fileref< array< char > * > strref
Definition: file.H:112
T * ptr
Definition: file.H:72
T * define(const std::string &vn)
Definition: file.H:231
MonoTypePtr tuple(const MonoTypes &mtys=MonoTypes())
Definition: type.H:1068
recursive< T > * type
Definition: file.H:107
void storedOffsetDetails(unsigned int o, uint64_t *offset, size_t *sz) const
Definition: file.H:188
dbseq< T > * ptr
Definition: file.H:90
fileref< typename frefty< T >::type > offsetOf(const T *x) const
Definition: file.H:144
LexicalAnnotation m(const YYLTYPE &p)
Definition: hexpr.parse.C:127
std::map< TVName, MonoTypePtr > MonoTypeSubst
Definition: type.H:143
size_t storageSizeOf(const MonoTypePtr &)
Definition: file.C:890
uint64_t unsafeLookupOffset(const std::string &, const MonoTypePtr &) const
Definition: file.C:942
std::string uniqueFilename(const std::string &prefix, const std::string &suffix)
Definition: file.C:1251
reader::PageEntries * pageEntries(reader *r)
Definition: bindings.C:1065
MonoTypePtr tapp(const MonoTypePtr &f, const MonoTypes &args)
Definition: type.H:1133
std::vector< size_t > StoredOffsetSizes
Definition: file.H:166