Mercurial > hg > bitcoin
annotate src/leveldb/port/port_win.h @ 3635:af349b425472 draft
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
author | justmoon <justmoon@members.fsf.org> |
---|---|
date | Sat, 21 Jul 2012 14:54:55 +0200 |
parents | |
children | e5033c157bc8 |
rev | line source |
---|---|
3635
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
1 // LevelDB Copyright (c) 2011 The LevelDB Authors. All rights reserved. |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
2 // Use of this source code is governed by a BSD-style license that can be |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
3 // found in the LICENSE file. See the AUTHORS file for names of contributors. |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
4 // |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
5 // See port_example.h for documentation for the following types/functions. |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
6 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
7 // Redistribution and use in source and binary forms, with or without |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
8 // modification, are permitted provided that the following conditions are met: |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
9 // |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
10 // * Redistributions of source code must retain the above copyright |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
11 // notice, this list of conditions and the following disclaimer. |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
12 // * Redistributions in binary form must reproduce the above copyright |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
13 // notice, this list of conditions and the following disclaimer in the |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
14 // documentation and/or other materials provided with the distribution. |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
15 // * Neither the name of the University of California, Berkeley nor the |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
16 // names of its contributors may be used to endorse or promote products |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
17 // derived from this software without specific prior written permission. |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
18 // |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
19 // THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
20 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
21 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
22 // DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
23 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
24 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
25 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
26 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
28 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
29 // |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
30 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
31 #ifndef STORAGE_LEVELDB_PORT_PORT_WIN_H_ |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
32 #define STORAGE_LEVELDB_PORT_PORT_WIN_H_ |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
33 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
34 #ifdef _MSC_VER |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
35 #define snprintf _snprintf |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
36 #define close _close |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
37 #define fread_unlocked _fread_nolock |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
38 #endif |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
39 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
40 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
41 #ifdef SNAPPY |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
42 #include <snappy/snappy.h> |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
43 #endif |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
44 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
45 #include <string> |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
46 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
47 #include <stdint.h> |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
48 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
49 namespace leveldb { |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
50 namespace port { |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
51 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
52 // Windows is little endian (for now :p) |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
53 static const bool kLittleEndian = true; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
54 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
55 class CondVar; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
56 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
57 class Mutex { |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
58 public: |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
59 Mutex(); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
60 ~Mutex(); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
61 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
62 void Lock(); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
63 void Unlock(); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
64 void AssertHeld(); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
65 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
66 private: |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
67 friend class CondVar; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
68 // critical sections are more efficient than mutexes |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
69 // but they are not recursive and can only be used to synchronize threads within the same process |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
70 // additionnaly they cannot be used with SignalObjectAndWait that we use for CondVar |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
71 // we use opaque void * to avoid including windows.h in port_win.h |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
72 void * mutex_; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
73 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
74 // No copying |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
75 Mutex(const Mutex&); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
76 void operator=(const Mutex&); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
77 }; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
78 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
79 // the Win32 API offers a dependable condition variable mechanism, but only starting with |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
80 // Windows 2008 and Vista |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
81 // no matter what we will implement our own condition variable with a semaphore |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
82 // implementation as described in a paper written by Douglas C. Schmidt and Irfan Pyarali |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
83 class CondVar { |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
84 public: |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
85 explicit CondVar(Mutex* mu); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
86 ~CondVar(); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
87 void Wait(); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
88 void Signal(); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
89 void SignalAll(); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
90 private: |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
91 Mutex* mu_; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
92 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
93 Mutex wait_mtx_; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
94 long waiting_; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
95 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
96 void * sema_; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
97 void * event_; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
98 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
99 bool broadcasted_; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
100 }; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
101 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
102 // Storage for a lock-free pointer |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
103 class AtomicPointer { |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
104 private: |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
105 void * rep_; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
106 public: |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
107 AtomicPointer() : rep_(nullptr) { } |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
108 explicit AtomicPointer(void* v); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
109 void* Acquire_Load() const; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
110 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
111 void Release_Store(void* v); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
112 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
113 void* NoBarrier_Load() const; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
114 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
115 void NoBarrier_Store(void* v); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
116 }; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
117 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
118 typedef volatile long OnceType; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
119 #define LEVELDB_ONCE_INIT (0) |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
120 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
121 extern void InitOnce(OnceType* once, void (*initializer)()); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
122 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
123 inline bool Snappy_Compress(const char* input, size_t length, |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
124 ::std::string* output) { |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
125 #ifdef SNAPPY |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
126 output->resize(snappy::MaxCompressedLength(length)); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
127 size_t outlen; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
128 snappy::RawCompress(input, length, &(*output)[0], &outlen); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
129 output->resize(outlen); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
130 return true; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
131 #endif |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
132 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
133 return false; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
134 } |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
135 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
136 inline bool Snappy_GetUncompressedLength(const char* input, size_t length, |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
137 size_t* result) { |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
138 #ifdef SNAPPY |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
139 return snappy::GetUncompressedLength(input, length, result); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
140 #else |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
141 return false; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
142 #endif |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
143 } |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
144 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
145 inline bool Snappy_Uncompress(const char* input, size_t length, |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
146 char* output) { |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
147 #ifdef SNAPPY |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
148 return snappy::RawUncompress(input, length, output); |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
149 #else |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
150 return false; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
151 #endif |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
152 } |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
153 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
154 inline bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg) { |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
155 return false; |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
156 } |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
157 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
158 } |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
159 } |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
160 |
af349b425472
Leveldb Windows port by Edouard Alligand, adapted for MingW by me.
justmoon <justmoon@members.fsf.org>
parents:
diff
changeset
|
161 #endif // STORAGE_LEVELDB_PORT_PORT_WIN_H_ |