From f67e15e50f392625b4097caf22e8be1b0fe96013 Mon Sep 17 00:00:00 2001 From: "jorlow@chromium.org" Date: Fri, 18 Mar 2011 22:37:00 +0000 Subject: Initial checkin. git-svn-id: https://leveldb.googlecode.com/svn/trunk@2 62dab493-f737-651d-591e-8d6aee1b9529 --- port/port_posix.h | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 port/port_posix.h (limited to 'port/port_posix.h') diff --git a/port/port_posix.h b/port/port_posix.h new file mode 100644 index 0000000..e7bc5b8 --- /dev/null +++ b/port/port_posix.h @@ -0,0 +1,108 @@ +// 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_ + +#include +#include +#include +#include +#include +#include +#include "port/sha1_portable.h" + +namespace leveldb { +namespace port { + +static const bool kLittleEndian = (__BYTE_ORDER == __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_; +}; + +// Storage for a lock-free pointer +class AtomicPointer { + private: + std::atomic 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 void SHA1_Hash(const char* data, size_t len, char* hash_array) { + SHA1_Hash_Portable(data, len, hash_array); +} + +/** + * TODO(gabor): Implement actual compress + * This is a hack - it just copies input to output. + * No actual compression occurs. + */ +inline void Lightweight_Compress(const char* input, size_t input_length, + std::string* output) { + output->assign(input, input_length); +} + +/** + * TODO(gabor): Implement actual uncompress + * This is a hack - it just copies input to output. + * No actual uncompression occurs. + */ +inline bool Lightweight_Uncompress(const char* input_data, size_t input_length, + std::string* output) { + output->assign(input_data, input_length); + return true; +} + +inline bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg) { + return false; +} + +} +} + +#endif // STORAGE_LEVELDB_PORT_PORT_POSIX_H_ -- cgit v1.2.1