diff options
Diffstat (limited to 'port/port_posix.h')
-rw-r--r-- | port/port_posix.h | 63 |
1 files changed, 34 insertions, 29 deletions
diff --git a/port/port_posix.h b/port/port_posix.h index d0b0615..3f329f0 100644 --- a/port/port_posix.h +++ b/port/port_posix.h @@ -7,20 +7,46 @@ #ifndef STORAGE_LEVELDB_PORT_PORT_POSIX_H_ #define STORAGE_LEVELDB_PORT_PORT_POSIX_H_ -#include <endian.h> +#if defined(OS_MACOSX) + #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 <cstdatomic> -#include <cstring> +#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) +#define fread_unlocked fread +#define fwrite_unlocked fwrite +#define fflush_unlocked fflush +#endif + +#if defined(OS_MACOSX) +#define fdatasync fsync +#endif namespace leveldb { namespace port { -static const bool kLittleEndian = (__BYTE_ORDER == __LITTLE_ENDIAN); +static const bool kLittleEndian = IS_LITTLE_ENDIAN; class CondVar; @@ -54,29 +80,8 @@ class CondVar { Mutex* mu_; }; -// Storage for a lock-free pointer -class AtomicPointer { - private: - std::atomic<void*> rep_; - public: - AtomicPointer() { } - explicit AtomicPointer(void* v) : rep_(v) { } - inline void* Acquire_Load() const { - return rep_.load(std::memory_order_acquire); - } - inline void Release_Store(void* v) { - rep_.store(v, std::memory_order_release); - } - inline void* NoBarrier_Load() const { - return rep_.load(std::memory_order_relaxed); - } - inline void NoBarrier_Store(void* v) { - rep_.store(v, std::memory_order_relaxed); - } -}; - inline bool Snappy_Compress(const char* input, size_t input_length, - std::string* output) { + ::std::string* output) { #ifdef SNAPPY output->resize(snappy::MaxCompressedLength(input_length)); size_t outlen; @@ -89,7 +94,7 @@ inline bool Snappy_Compress(const char* input, size_t input_length, } inline bool Snappy_Uncompress(const char* input_data, size_t input_length, - std::string* output) { + ::std::string* output) { #ifdef SNAPPY size_t ulength; if (!snappy::GetUncompressedLength(input_data, ulength, &ulength)) { @@ -106,7 +111,7 @@ inline bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg) { return false; } -} -} +} // namespace port +} // namespace leveldb #endif // STORAGE_LEVELDB_PORT_PORT_POSIX_H_ |