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