PMDK C++ bindings  1.8.2
This is the C++ bindings documentation for PMDK's libpmemobj.
allocation_flag.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2019, Intel Corporation
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in
13  * the documentation and/or other materials provided with the
14  * distribution.
15  *
16  * * Neither the name of the copyright holder nor the names of its
17  * contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
38 #ifndef LIBPMEMOBJ_CPP_ALLOCATION_FLAG_HPP
39 #define LIBPMEMOBJ_CPP_ALLOCATION_FLAG_HPP
40 
41 #include <libpmemobj/base.h>
42 
43 namespace pmem
44 {
45 
46 namespace obj
47 {
48 
64  explicit allocation_flag(uint64_t val) : value(val)
65  {
66  }
67 
71  static allocation_flag
72  class_id(uint64_t id)
73  {
74  return allocation_flag(POBJ_CLASS_ID(id));
75  }
76 
80  static allocation_flag
82  {
83  return allocation_flag(POBJ_XALLOC_NO_FLUSH);
84  }
85 
89  static allocation_flag
90  none()
91  {
92  return allocation_flag(0);
93  }
94 
98  bool
99  is_set(const allocation_flag &rhs)
100  {
101  return (value & rhs.value) != 0;
102  }
103 
105  operator|(const allocation_flag &rhs)
106  {
107  return allocation_flag(value | rhs.value);
108  }
109 
110  uint64_t value;
111 };
112 
127  explicit allocation_flag_atomic(uint64_t val) : value(val)
128  {
129  }
130 
135  class_id(uint64_t id)
136  {
137  return allocation_flag_atomic(POBJ_CLASS_ID(id));
138  }
139 
145  {
146  return allocation_flag_atomic(0);
147  }
148 
152  bool
154  {
155  return (value & rhs.value) != 0;
156  }
157 
159  operator|(const allocation_flag_atomic &rhs)
160  {
161  return allocation_flag_atomic(value | rhs.value);
162  }
163 
164  uint64_t value;
165 };
166 
167 } /* namespace obj */
168 
169 } /* namespace pmem */
170 
171 #endif /* LIBPMEMOBJ_CPP_ALLOCATION_FLAG_HPP */
static allocation_flag_atomic class_id(uint64_t id)
Allocate the object from the allocation class with id equal to id.
Definition: allocation_flag.hpp:135
Type of flag which can be passed to make_persistent_atomic.
Definition: allocation_flag.hpp:123
allocation_flag_atomic(uint64_t val)
Emplace constructor.
Definition: allocation_flag.hpp:127
bool is_set(const allocation_flag_atomic &rhs)
Check if flag is set.
Definition: allocation_flag.hpp:153
Type of flag which can be passed to make_persistent.
Definition: allocation_flag.hpp:60
static allocation_flag_atomic none()
Do not change allocator behaviour.
Definition: allocation_flag.hpp:144
static allocation_flag class_id(uint64_t id)
Allocate the object from the allocation class with id equal to id.
Definition: allocation_flag.hpp:72
bool is_set(const allocation_flag &rhs)
Check if flag is set.
Definition: allocation_flag.hpp:99
static allocation_flag no_flush()
Skip flush on commit.
Definition: allocation_flag.hpp:81
allocation_flag(uint64_t val)
Emplace constructor.
Definition: allocation_flag.hpp:64
A persistent version of concurrent hash map implementation Ref: https://arxiv.org/abs/1509....
Definition: allocation_flag.hpp:43
static allocation_flag none()
Do not change allocator behaviour.
Definition: allocation_flag.hpp:90