]>
Commit | Line | Data |
---|---|---|
7c673cae | 1 | // Copyright (c) 2011-present, Facebook, Inc. All rights reserved. |
11fdf7f2 TL |
2 | // This source code is licensed under both the GPLv2 (found in the |
3 | // COPYING file in the root directory) and Apache 2.0 License | |
4 | // (found in the LICENSE.Apache file in the root directory). | |
7c673cae FG |
5 | // Copyright (c) 2011 The LevelDB Authors. All rights reserved. |
6 | // Use of this source code is governed by a BSD-style license that can be | |
7 | // found in the LICENSE file. See the AUTHORS file for names of contributors. | |
8 | #pragma once | |
9 | ||
10 | #include "table/internal_iterator.h" | |
11 | #include "port/port.h" | |
12 | ||
13 | namespace rocksdb { | |
14 | class ScopedArenaIterator { | |
15 | ||
16 | void reset(InternalIterator* iter) ROCKSDB_NOEXCEPT { | |
17 | if (iter_ != nullptr) { | |
18 | iter_->~InternalIterator(); | |
19 | } | |
20 | iter_ = iter; | |
21 | } | |
22 | ||
23 | public: | |
24 | ||
25 | explicit ScopedArenaIterator(InternalIterator* iter = nullptr) | |
26 | : iter_(iter) {} | |
27 | ||
28 | ScopedArenaIterator(const ScopedArenaIterator&) = delete; | |
29 | ScopedArenaIterator& operator=(const ScopedArenaIterator&) = delete; | |
30 | ||
31 | ScopedArenaIterator(ScopedArenaIterator&& o) ROCKSDB_NOEXCEPT { | |
32 | iter_ = o.iter_; | |
33 | o.iter_ = nullptr; | |
34 | } | |
35 | ||
36 | ScopedArenaIterator& operator=(ScopedArenaIterator&& o) ROCKSDB_NOEXCEPT { | |
37 | reset(o.iter_); | |
38 | o.iter_ = nullptr; | |
39 | return *this; | |
40 | } | |
41 | ||
42 | InternalIterator* operator->() { return iter_; } | |
43 | InternalIterator* get() { return iter_; } | |
44 | ||
45 | void set(InternalIterator* iter) { reset(iter); } | |
46 | ||
47 | InternalIterator* release() { | |
48 | assert(iter_ != nullptr); | |
49 | auto* res = iter_; | |
50 | iter_ = nullptr; | |
51 | return res; | |
52 | } | |
53 | ||
54 | ~ScopedArenaIterator() { | |
55 | reset(nullptr); | |
56 | } | |
57 | ||
58 | private: | |
59 | InternalIterator* iter_; | |
60 | }; | |
61 | } // namespace rocksdb |