34 #ifndef RIEGL_RDB_POINTCLOUD_TRANSACTIONS_HPP
35 #define RIEGL_RDB_POINTCLOUD_TRANSACTIONS_HPP
51 namespace pointcloud {
72 explicit Transactions(riegl::rdb::PointcloudData* pointcloud);
103 const std::string &title,
104 const std::string &agent,
105 const std::string &comments =
"",
106 const std::string &settings =
""
117 void *userdata =
nullptr,
118 const uint32_t signature = 0,
119 const uint32_t key_size = 0,
120 const void*
const key_data =
nullptr
128 template<
typename Callable>
131 const uint32_t signature = 0,
132 const uint32_t key_size = 0,
133 const void*
const key_data =
nullptr
136 typedef typename std::decay<Callable>::type CallableType;
138 &progress_proxy_callable<CallableType>,
139 const_cast<CallableType*>(&progress),
140 signature, key_size, key_data
149 template<
typename Receiver>
151 void (Receiver::*progress)(uint8_t), Receiver &receiver,
152 const uint32_t signature = 0,
153 const uint32_t key_size = 0,
154 const void*
const key_data =
nullptr
157 auto userdata = std::make_pair(progress, &receiver);
159 &progress_proxy_receiver<Receiver>, &userdata,
160 signature, key_size, key_data
170 template<
typename Receiver>
172 void (Receiver::*progress)(uint8_t)
const,
const Receiver &receiver,
173 const uint32_t signature = 0,
174 const uint32_t key_size = 0,
175 const void*
const key_data =
nullptr
178 auto userdata = std::make_pair(progress, &receiver);
180 &progress_proxy_receiver<Receiver>, &userdata,
181 signature, key_size, key_data
199 std::vector<Transaction::ID>
list()
const;
243 riegl::rdb::PointcloudData *data;
245 template<
typename Callable>
246 static void progress_proxy_callable(uint8_t progress,
void *userdata)
250 Callable &callback = *
reinterpret_cast<Callable*
>(userdata);
259 template<
typename Receiver>
260 static void progress_proxy_receiver(uint8_t progress,
void *userdata)
264 typedef void (Receiver::*Function)(uint8_t);
265 auto data(
reinterpret_cast<std::pair<Function, Receiver*>*
>(userdata));
266 (*data->second.*data->first)(progress);
277 #endif // RIEGL_RDB_POINTCLOUD_TRANSACTIONS_HPP
Manage point cloud transactions.
Operation progress feedback tools.
void commit(Callable &&progress, const uint32_t signature=0, const uint32_t key_size=0, const void *const key_data=nullptr)
Commit current transaction.
std::vector< Transaction::ID > list() const
Get list of transactions.
void restore(const Transaction::ID transaction)
Restore database state.
void commit(void(Receiver::*progress)(uint8_t), Receiver &receiver, const uint32_t signature=0, const uint32_t key_size=0, const void *const key_data=nullptr)
Commit current transaction.
Transaction::ID current() const
ID of current transaction.
Transaction::ID begin(const std::string &title, const std::string &agent, const std::string &comments="", const std::string &settings="")
Create new transaction.
Transaction details(const Transaction::ID transaction) const
Query transaction details.
bool pending() const
Check if transaction is pending.
void rollback()
Abort current transaction.
Transactions(riegl::rdb::PointcloudData *pointcloud)
Constructor.
void commit(void(Receiver::*progress)(uint8_t) const, const Receiver &receiver, const uint32_t signature=0, const uint32_t key_size=0, const void *const key_data=nullptr)
Commit current transaction.
void commit(Progress progress=nullptr, void *userdata=nullptr, const uint32_t signature=0, const uint32_t key_size=0, const void *const key_data=nullptr)
Commit current transaction.
void(* Progress)(uint8_t progress, void *userdata)
Progress callback function type.
Pointcloud class implementation details.