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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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_