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