leveldb
Public Member Functions | Private Types | Private Attributes | List of all members
leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv Class Reference
Inheritance diagram for leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv:
Inheritance graph
[legend]
Collaboration diagram for leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv:
Collaboration graph
[legend]

Public Member Functions

 InMemoryEnv (Env *base_env)
 
virtual ~InMemoryEnv ()
 
virtual Status NewSequentialFile (const std::string &fname, SequentialFile **result)
 
virtual Status NewRandomAccessFile (const std::string &fname, RandomAccessFile **result)
 
virtual Status NewWritableFile (const std::string &fname, WritableFile **result)
 
virtual Status NewAppendableFile (const std::string &fname, WritableFile **result)
 
virtual bool FileExists (const std::string &fname)
 
virtual Status GetChildren (const std::string &dir, std::vector< std::string > *result)
 
void DeleteFileInternal (const std::string &fname)
 
virtual Status DeleteFile (const std::string &fname)
 
virtual Status CreateDir (const std::string &dirname)
 
virtual Status DeleteDir (const std::string &dirname)
 
virtual Status GetFileSize (const std::string &fname, uint64_t *file_size)
 
virtual Status RenameFile (const std::string &src, const std::string &target)
 
virtual Status LockFile (const std::string &fname, FileLock **lock)
 
virtual Status UnlockFile (FileLock *lock)
 
virtual Status GetTestDirectory (std::string *path)
 
virtual Status NewLogger (const std::string &fname, Logger **result)
 
- Public Member Functions inherited from leveldb::EnvWrapper
 EnvWrapper (Env *t)
 
virtual ~EnvWrapper ()
 
Envtarget () const
 
Status NewSequentialFile (const std::string &f, SequentialFile **r)
 
Status NewRandomAccessFile (const std::string &f, RandomAccessFile **r)
 
Status NewWritableFile (const std::string &f, WritableFile **r)
 
Status NewAppendableFile (const std::string &f, WritableFile **r)
 
bool FileExists (const std::string &f)
 
Status GetChildren (const std::string &dir, std::vector< std::string > *r)
 
Status DeleteFile (const std::string &f)
 
Status CreateDir (const std::string &d)
 
Status DeleteDir (const std::string &d)
 
Status GetFileSize (const std::string &f, uint64_t *s)
 
Status RenameFile (const std::string &s, const std::string &t)
 
Status LockFile (const std::string &f, FileLock **l)
 
Status UnlockFile (FileLock *l)
 
void Schedule (void(*f)(void *), void *a)
 
void StartThread (void(*f)(void *), void *a)
 
uint64_t NowMicros ()
 
void SleepForMicroseconds (int micros)
 
- Public Member Functions inherited from leveldb::Env
 Env ()
 
virtual ~Env ()
 
virtual void Schedule (void(*function)(void *arg), void *arg)=0
 
virtual void StartThread (void(*function)(void *arg), void *arg)=0
 

Private Types

typedef std::map< std::string, FileState * > FileSystem
 

Private Attributes

port::Mutex mutex_
 
FileSystem file_map_
 

Additional Inherited Members

- Static Public Member Functions inherited from leveldb::Env
static EnvDefault ()
 

Detailed Description

Definition at line 230 of file memenv.cc.

Member Typedef Documentation

§ FileSystem

typedef std::map<std::string, FileState*> leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::FileSystem
private

Definition at line 387 of file memenv.cc.

Constructor & Destructor Documentation

§ InMemoryEnv()

leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::InMemoryEnv ( Env base_env)
inlineexplicit

Definition at line 232 of file memenv.cc.

232 : EnvWrapper(base_env) { }
EnvWrapper(Env *t)
Definition: env.h:291

§ ~InMemoryEnv()

virtual leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::~InMemoryEnv ( )
inlinevirtual

Definition at line 234 of file memenv.cc.

234  {
235  for (FileSystem::iterator i = file_map_.begin(); i != file_map_.end(); ++i){
236  i->second->Unref();
237  }
238  }

Member Function Documentation

§ CreateDir()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::CreateDir ( const std::string &  dirname)
inlinevirtual

Implements leveldb::Env.

Definition at line 334 of file memenv.cc.

334  {
335  return Status::OK();
336  }
static Status OK()
Definition: status.h:32
Here is the call graph for this function:

§ DeleteDir()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::DeleteDir ( const std::string &  dirname)
inlinevirtual

Implements leveldb::Env.

Definition at line 338 of file memenv.cc.

338  {
339  return Status::OK();
340  }
static Status OK()
Definition: status.h:32
Here is the call graph for this function:

§ DeleteFile()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::DeleteFile ( const std::string &  fname)
inlinevirtual

Implements leveldb::Env.

Definition at line 324 of file memenv.cc.

324  {
325  MutexLock lock(&mutex_);
326  if (file_map_.find(fname) == file_map_.end()) {
327  return Status::IOError(fname, "File not found");
328  }
329 
330  DeleteFileInternal(fname);
331  return Status::OK();
332  }
void DeleteFileInternal(const std::string &fname)
Definition: memenv.cc:315
static Status OK()
Definition: status.h:32
static Status IOError(const Slice &msg, const Slice &msg2=Slice())
Definition: status.h:47
Here is the call graph for this function:

§ DeleteFileInternal()

void leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::DeleteFileInternal ( const std::string &  fname)
inline

Definition at line 315 of file memenv.cc.

315  {
316  if (file_map_.find(fname) == file_map_.end()) {
317  return;
318  }
319 
320  file_map_[fname]->Unref();
321  file_map_.erase(fname);
322  }

§ FileExists()

virtual bool leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::FileExists ( const std::string &  fname)
inlinevirtual

Implements leveldb::Env.

Definition at line 293 of file memenv.cc.

293  {
294  MutexLock lock(&mutex_);
295  return file_map_.find(fname) != file_map_.end();
296  }

§ GetChildren()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::GetChildren ( const std::string &  dir,
std::vector< std::string > *  result 
)
inlinevirtual

Implements leveldb::Env.

Definition at line 298 of file memenv.cc.

299  {
300  MutexLock lock(&mutex_);
301  result->clear();
302 
303  for (FileSystem::iterator i = file_map_.begin(); i != file_map_.end(); ++i){
304  const std::string& filename = i->first;
305 
306  if (filename.size() >= dir.size() + 1 && filename[dir.size()] == '/' &&
307  Slice(filename).starts_with(Slice(dir))) {
308  result->push_back(filename.substr(dir.size() + 1));
309  }
310  }
311 
312  return Status::OK();
313  }
static Status OK()
Definition: status.h:32
Here is the call graph for this function:

§ GetFileSize()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::GetFileSize ( const std::string &  fname,
uint64_t *  file_size 
)
inlinevirtual

Implements leveldb::Env.

Definition at line 342 of file memenv.cc.

342  {
343  MutexLock lock(&mutex_);
344  if (file_map_.find(fname) == file_map_.end()) {
345  return Status::IOError(fname, "File not found");
346  }
347 
348  *file_size = file_map_[fname]->Size();
349  return Status::OK();
350  }
static Status OK()
Definition: status.h:32
static Status IOError(const Slice &msg, const Slice &msg2=Slice())
Definition: status.h:47
Here is the call graph for this function:

§ GetTestDirectory()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::GetTestDirectory ( std::string *  path)
inlinevirtual

Reimplemented from leveldb::EnvWrapper.

Definition at line 375 of file memenv.cc.

375  {
376  *path = "/test";
377  return Status::OK();
378  }
static Status OK()
Definition: status.h:32
Here is the call graph for this function:

§ LockFile()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::LockFile ( const std::string &  fname,
FileLock **  lock 
)
inlinevirtual

Implements leveldb::Env.

Definition at line 365 of file memenv.cc.

365  {
366  *lock = new FileLock;
367  return Status::OK();
368  }
static Status OK()
Definition: status.h:32
Here is the call graph for this function:

§ NewAppendableFile()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::NewAppendableFile ( const std::string &  fname,
WritableFile **  result 
)
inlinevirtual

Reimplemented from leveldb::Env.

Definition at line 280 of file memenv.cc.

281  {
282  MutexLock lock(&mutex_);
283  FileState** sptr = &file_map_[fname];
284  FileState* file = *sptr;
285  if (file == NULL) {
286  file = new FileState();
287  file->Ref();
288  }
289  *result = new WritableFileImpl(file);
290  return Status::OK();
291  }
static Status OK()
Definition: status.h:32
Here is the call graph for this function:

§ NewLogger()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::NewLogger ( const std::string &  fname,
Logger **  result 
)
inlinevirtual

Reimplemented from leveldb::EnvWrapper.

Definition at line 380 of file memenv.cc.

380  {
381  *result = new NoOpLogger;
382  return Status::OK();
383  }
static Status OK()
Definition: status.h:32
Here is the call graph for this function:

§ NewRandomAccessFile()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::NewRandomAccessFile ( const std::string &  fname,
RandomAccessFile **  result 
)
inlinevirtual

Implements leveldb::Env.

Definition at line 253 of file memenv.cc.

254  {
255  MutexLock lock(&mutex_);
256  if (file_map_.find(fname) == file_map_.end()) {
257  *result = NULL;
258  return Status::IOError(fname, "File not found");
259  }
260 
261  *result = new RandomAccessFileImpl(file_map_[fname]);
262  return Status::OK();
263  }
static Status OK()
Definition: status.h:32
static Status IOError(const Slice &msg, const Slice &msg2=Slice())
Definition: status.h:47
Here is the call graph for this function:

§ NewSequentialFile()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::NewSequentialFile ( const std::string &  fname,
SequentialFile **  result 
)
inlinevirtual

Implements leveldb::Env.

Definition at line 241 of file memenv.cc.

242  {
243  MutexLock lock(&mutex_);
244  if (file_map_.find(fname) == file_map_.end()) {
245  *result = NULL;
246  return Status::IOError(fname, "File not found");
247  }
248 
249  *result = new SequentialFileImpl(file_map_[fname]);
250  return Status::OK();
251  }
static Status OK()
Definition: status.h:32
static Status IOError(const Slice &msg, const Slice &msg2=Slice())
Definition: status.h:47
Here is the call graph for this function:

§ NewWritableFile()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::NewWritableFile ( const std::string &  fname,
WritableFile **  result 
)
inlinevirtual

Implements leveldb::Env.

Definition at line 265 of file memenv.cc.

266  {
267  MutexLock lock(&mutex_);
268  if (file_map_.find(fname) != file_map_.end()) {
269  DeleteFileInternal(fname);
270  }
271 
272  FileState* file = new FileState();
273  file->Ref();
274  file_map_[fname] = file;
275 
276  *result = new WritableFileImpl(file);
277  return Status::OK();
278  }
void DeleteFileInternal(const std::string &fname)
Definition: memenv.cc:315
static Status OK()
Definition: status.h:32
Here is the call graph for this function:

§ RenameFile()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::RenameFile ( const std::string &  src,
const std::string &  target 
)
inlinevirtual

Implements leveldb::Env.

Definition at line 352 of file memenv.cc.

353  {
354  MutexLock lock(&mutex_);
355  if (file_map_.find(src) == file_map_.end()) {
356  return Status::IOError(src, "File not found");
357  }
358 
360  file_map_[target] = file_map_[src];
361  file_map_.erase(src);
362  return Status::OK();
363  }
void DeleteFileInternal(const std::string &fname)
Definition: memenv.cc:315
static Status OK()
Definition: status.h:32
static Status IOError(const Slice &msg, const Slice &msg2=Slice())
Definition: status.h:47
Env * target() const
Definition: env.h:295
Here is the call graph for this function:

§ UnlockFile()

virtual Status leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::UnlockFile ( FileLock lock)
inlinevirtual

Implements leveldb::Env.

Definition at line 370 of file memenv.cc.

370  {
371  delete lock;
372  return Status::OK();
373  }
static Status OK()
Definition: status.h:32
Here is the call graph for this function:

Member Data Documentation

§ file_map_

FileSystem leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::file_map_
private

Definition at line 389 of file memenv.cc.

§ mutex_

port::Mutex leveldb::anonymous_namespace{memenv.cc}::InMemoryEnv::mutex_
private

Definition at line 388 of file memenv.cc.


The documentation for this class was generated from the following file: