f122c6dfbb
- LevelDB patch for FreeBSD. This resolves Issue 22. Contributed by dforsythe (thanks!). - Removing Chromium-specific files. They are now going to live in the Chromium repository. - Adding a benchmark page comparing LevelDB performance to SQLite and Kyoto Cabinet's TreeDB, along with code to generate the benchmarks. Thanks to Kevin Tseng for compiling the benchmarks, and Scott Hess and Mikio Hirabayashi for their help and advice. git-svn-id: https://leveldb.googlecode.com/svn/trunk@40 62dab493-f737-651d-591e-8d6aee1b9529
122 lines
2.6 KiB
C++
122 lines
2.6 KiB
C++
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
|
//
|
|
// See port_example.h for documentation for the following types/functions.
|
|
|
|
#ifndef STORAGE_LEVELDB_PORT_PORT_POSIX_H_
|
|
#define STORAGE_LEVELDB_PORT_PORT_POSIX_H_
|
|
|
|
#if defined(OS_MACOSX) || defined(OS_FREEBSD)
|
|
#include <machine/endian.h>
|
|
#elif defined(OS_SOLARIS)
|
|
#include <sys/isa_defs.h>
|
|
#ifdef _LITTLE_ENDIAN
|
|
#define LITTLE_ENDIAN
|
|
#else
|
|
#define BIG_ENDIAN
|
|
#endif
|
|
#else
|
|
#include <endian.h>
|
|
#endif
|
|
#include <pthread.h>
|
|
#ifdef SNAPPY
|
|
#include <snappy.h>
|
|
#endif
|
|
#include <stdint.h>
|
|
#include <string>
|
|
#include "port/atomic_pointer.h"
|
|
|
|
#ifdef LITTLE_ENDIAN
|
|
#define IS_LITTLE_ENDIAN true
|
|
#else
|
|
#define IS_LITTLE_ENDIAN (__BYTE_ORDER == __LITTLE_ENDIAN)
|
|
#endif
|
|
|
|
#if defined(OS_MACOSX) || defined(OS_SOLARIS) || defined(OS_FREEBSD)
|
|
#define fread_unlocked fread
|
|
#define fwrite_unlocked fwrite
|
|
#define fflush_unlocked fflush
|
|
#endif
|
|
|
|
#if defined(OS_MACOSX) || defined(OS_FREEBSD)
|
|
#define fdatasync fsync
|
|
#endif
|
|
|
|
namespace leveldb {
|
|
namespace port {
|
|
|
|
static const bool kLittleEndian = IS_LITTLE_ENDIAN;
|
|
|
|
class CondVar;
|
|
|
|
class Mutex {
|
|
public:
|
|
Mutex();
|
|
~Mutex();
|
|
|
|
void Lock();
|
|
void Unlock();
|
|
void AssertHeld() { }
|
|
|
|
private:
|
|
friend class CondVar;
|
|
pthread_mutex_t mu_;
|
|
|
|
// No copying
|
|
Mutex(const Mutex&);
|
|
void operator=(const Mutex&);
|
|
};
|
|
|
|
class CondVar {
|
|
public:
|
|
explicit CondVar(Mutex* mu);
|
|
~CondVar();
|
|
void Wait();
|
|
void Signal();
|
|
void SignalAll();
|
|
private:
|
|
pthread_cond_t cv_;
|
|
Mutex* mu_;
|
|
};
|
|
|
|
inline bool Snappy_Compress(const char* input, size_t length,
|
|
::std::string* output) {
|
|
#ifdef SNAPPY
|
|
output->resize(snappy::MaxCompressedLength(length));
|
|
size_t outlen;
|
|
snappy::RawCompress(input, length, &(*output)[0], &outlen);
|
|
output->resize(outlen);
|
|
return true;
|
|
#endif
|
|
|
|
return false;
|
|
}
|
|
|
|
inline bool Snappy_GetUncompressedLength(const char* input, size_t length,
|
|
size_t* result) {
|
|
#ifdef SNAPPY
|
|
return snappy::GetUncompressedLength(input, length, result);
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
inline bool Snappy_Uncompress(const char* input, size_t length,
|
|
char* output) {
|
|
#ifdef SNAPPY
|
|
return snappy::RawUncompress(input, length, output);
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
inline bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg) {
|
|
return false;
|
|
}
|
|
|
|
} // namespace port
|
|
} // namespace leveldb
|
|
|
|
#endif // STORAGE_LEVELDB_PORT_PORT_POSIX_H_
|