Summary:
This reverts commit 54d94e9c2c
.
The pull request was landed by mistake.
Closes https://github.com/facebook/rocksdb/pull/1755
Differential Revision: D4391678
Pulled By: maysamyabandeh
fbshipit-source-id: 36d5149
main
parent
54d94e9c2c
commit
d0ba8ec8f9
@ -1,73 +0,0 @@ |
|||||||
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
|
||||||
// This source code is licensed under the BSD-style license found in the
|
|
||||||
// LICENSE file in the root directory of this source tree. An additional grant
|
|
||||||
// of patent rights can be found in the PATENTS file in the same directory.
|
|
||||||
// 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.
|
|
||||||
//
|
|
||||||
// An iterator yields a sequence of key/value pairs from a source.
|
|
||||||
// The following class defines the interface. Multiple implementations
|
|
||||||
// are provided by this library. In particular, iterators are provided
|
|
||||||
// to access the contents of a Table or a DB.
|
|
||||||
//
|
|
||||||
// Multiple threads can invoke const methods on an Iterator without
|
|
||||||
// external synchronization, but if any of the threads may call a
|
|
||||||
// non-const method, all threads accessing the same Iterator must use
|
|
||||||
// external synchronization.
|
|
||||||
|
|
||||||
#ifndef INCLUDE_ROCKSDB_CLEANABLE_H_ |
|
||||||
#define INCLUDE_ROCKSDB_CLEANABLE_H_ |
|
||||||
|
|
||||||
namespace rocksdb { |
|
||||||
|
|
||||||
class Cleanable { |
|
||||||
public: |
|
||||||
Cleanable(); |
|
||||||
~Cleanable(); |
|
||||||
// Clients are allowed to register function/arg1/arg2 triples that
|
|
||||||
// will be invoked when this iterator is destroyed.
|
|
||||||
//
|
|
||||||
// Note that unlike all of the preceding methods, this method is
|
|
||||||
// not abstract and therefore clients should not override it.
|
|
||||||
typedef void (*CleanupFunction)(void* arg1, void* arg2); |
|
||||||
void RegisterCleanup(CleanupFunction function, void* arg1, void* arg2); |
|
||||||
void DelegateCleanupsTo(Cleanable* other); |
|
||||||
// DoCkeanup and also resets the pointers for reuse
|
|
||||||
inline void Reset() { |
|
||||||
DoCleanup(); |
|
||||||
cleanup_.function = nullptr; |
|
||||||
cleanup_.next = nullptr; |
|
||||||
} |
|
||||||
|
|
||||||
protected: |
|
||||||
struct Cleanup { |
|
||||||
CleanupFunction function; |
|
||||||
void* arg1; |
|
||||||
void* arg2; |
|
||||||
Cleanup* next; |
|
||||||
}; |
|
||||||
Cleanup cleanup_; |
|
||||||
// It also becomes the owner of c
|
|
||||||
void RegisterCleanup(Cleanup* c); |
|
||||||
|
|
||||||
private: |
|
||||||
// Performs all the cleanups. It does not reset the pointers. Making it
|
|
||||||
// private
|
|
||||||
// to prevent misuse
|
|
||||||
inline void DoCleanup() { |
|
||||||
if (cleanup_.function != nullptr) { |
|
||||||
(*cleanup_.function)(cleanup_.arg1, cleanup_.arg2); |
|
||||||
for (Cleanup* c = cleanup_.next; c != nullptr;) { |
|
||||||
(*c->function)(c->arg1, c->arg2); |
|
||||||
Cleanup* next = c->next; |
|
||||||
delete c; |
|
||||||
c = next; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
} // namespace rocksdb
|
|
||||||
|
|
||||||
#endif // INCLUDE_ROCKSDB_CLEANABLE_H_
|
|
Loading…
Reference in new issue