github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/database/leveldb.chai2010/src/env.cc (about)

     1  // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style license that can be
     3  // found in the LICENSE file. See the AUTHORS file for names of contributors.
     4  
     5  #include "leveldb/env.h"
     6  
     7  namespace leveldb {
     8  
     9  Env::~Env() {
    10  }
    11  
    12  SequentialFile::~SequentialFile() {
    13  }
    14  
    15  RandomAccessFile::~RandomAccessFile() {
    16  }
    17  
    18  WritableFile::~WritableFile() {
    19  }
    20  
    21  Logger::~Logger() {
    22  }
    23  
    24  FileLock::~FileLock() {
    25  }
    26  
    27  void Log(Logger* info_log, const char* format, ...) {
    28    if (info_log != NULL) {
    29      va_list ap;
    30      va_start(ap, format);
    31      info_log->Logv(format, ap);
    32      va_end(ap);
    33    }
    34  }
    35  
    36  static Status DoWriteStringToFile(Env* env, const Slice& data,
    37                                    const std::string& fname,
    38                                    bool should_sync) {
    39    WritableFile* file;
    40    Status s = env->NewWritableFile(fname, &file);
    41    if (!s.ok()) {
    42      return s;
    43    }
    44    s = file->Append(data);
    45    if (s.ok() && should_sync) {
    46      s = file->Sync();
    47    }
    48    if (s.ok()) {
    49      s = file->Close();
    50    }
    51    delete file;  // Will auto-close if we did not close above
    52    if (!s.ok()) {
    53      env->DeleteFile(fname);
    54    }
    55    return s;
    56  }
    57  
    58  Status WriteStringToFile(Env* env, const Slice& data,
    59                           const std::string& fname) {
    60    return DoWriteStringToFile(env, data, fname, false);
    61  }
    62  
    63  Status WriteStringToFileSync(Env* env, const Slice& data,
    64                               const std::string& fname) {
    65    return DoWriteStringToFile(env, data, fname, true);
    66  }
    67  
    68  Status ReadFileToString(Env* env, const std::string& fname, std::string* data) {
    69    data->clear();
    70    SequentialFile* file;
    71    Status s = env->NewSequentialFile(fname, &file);
    72    if (!s.ok()) {
    73      return s;
    74    }
    75    static const int kBufferSize = 8192;
    76    char* space = new char[kBufferSize];
    77    while (true) {
    78      Slice fragment;
    79      s = file->Read(kBufferSize, &fragment, space);
    80      if (!s.ok()) {
    81        break;
    82      }
    83      data->append(fragment.data(), fragment.size());
    84      if (fragment.empty()) {
    85        break;
    86      }
    87    }
    88    delete[] space;
    89    delete file;
    90    return s;
    91  }
    92  
    93  EnvWrapper::~EnvWrapper() {
    94  }
    95  
    96  }  // namespace leveldb