36 #ifndef RIEGL_RDB_POINTCLOUD_TRANSACTIONS_HPP
37 #define RIEGL_RDB_POINTCLOUD_TRANSACTIONS_HPP
55 namespace pointcloud {
76 explicit Transactions(riegl::rdb::PointcloudData* pointcloud);
107 const std::string &title,
108 const std::string &agent,
109 const std::string &comments =
"",
110 const std::string &settings =
""
121 void *userdata =
nullptr,
122 const std::uint32_t signature = 0,
123 const std::uint32_t key_size = 0,
124 const void*
const key_data =
nullptr
132 template<
typename Callable>
135 const std::uint32_t signature = 0,
136 const std::uint32_t key_size = 0,
137 const void*
const key_data =
nullptr
140 typedef typename std::decay<Callable>::type CallableType;
142 &progress_proxy_callable<CallableType>,
143 const_cast<CallableType*>(&progress),
144 signature, key_size, key_data
153 template<
typename Receiver>
155 void (Receiver::*progress)(std::uint8_t), Receiver &receiver,
156 const std::uint32_t signature = 0,
157 const std::uint32_t key_size = 0,
158 const void*
const key_data =
nullptr
161 auto userdata = std::make_pair(progress, &receiver);
163 &progress_proxy_receiver<Receiver>, &userdata,
164 signature, key_size, key_data
174 template<
typename Receiver>
176 void (Receiver::*progress)(std::uint8_t)
const,
const Receiver &receiver,
177 const std::uint32_t signature = 0,
178 const std::uint32_t key_size = 0,
179 const void*
const key_data =
nullptr
182 auto userdata = std::make_pair(progress, &receiver);
184 &progress_proxy_receiver<Receiver>, &userdata,
185 signature, key_size, key_data
203 std::vector<Transaction::ID>
list()
const;
267 const std::vector<Transaction::ID> &transactions
291 const std::vector<Transaction::ID> &transactions
295 riegl::rdb::PointcloudData *data;
297 template<
typename Callable>
298 static void progress_proxy_callable(std::uint8_t progress,
void *userdata)
302 Callable &callback = *
reinterpret_cast<Callable*
>(userdata);
311 template<
typename Receiver>
312 static void progress_proxy_receiver(std::uint8_t progress,
void *userdata)
316 typedef void (Receiver::*Function)(std::uint8_t);
317 auto data(
reinterpret_cast<std::pair<Function, Receiver*>*
>(userdata));
318 (*data->second.*data->first)(progress);
329 #endif // RIEGL_RDB_POINTCLOUD_TRANSACTIONS_HPP
Manage point cloud transactions.
Operation progress feedback tools.
void commit(Progress progress=nullptr, void *userdata=nullptr, const std::uint32_t signature=0, const std::uint32_t key_size=0, const void *const key_data=nullptr)
Commit current transaction.
void commit(Callable &&progress, const std::uint32_t signature=0, const std::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.
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)(std::uint8_t) const, const Receiver &receiver, const std::uint32_t signature=0, const std::uint32_t key_size=0, const void *const key_data=nullptr)
Commit current transaction.
void commit(void(Receiver::*progress)(std::uint8_t), Receiver &receiver, const std::uint32_t signature=0, const std::uint32_t key_size=0, const void *const key_data=nullptr)
Commit current transaction.
void(* Progress)(std::uint8_t progress, void *userdata)
Progress callback function type.
Pointcloud class implementation details.
std::uint64_t size(const Transaction::ID transaction) const
Estimate database size.
void discard(const Transaction::ID transaction)
Discard transaction data.