MotionLib  1.0.0
SamBuCa motion library
Promise.hpp
1 /*
2 ** Copyright (C) 2020 Sylvain Fargier
3 **
4 ** This software is provided 'as-is', without any express or implied
5 ** warranty. In no event will the authors be held liable for any damages
6 ** arising from the use of this software.
7 **
8 ** Permission is granted to anyone to use this software for any purpose,
9 ** including commercial applications, and to alter it and redistribute it
10 ** freely, subject to the following restrictions:
11 **
12 ** 1. The origin of this software must not be misrepresented; you must not
13 ** claim that you wrote the original software. If you use this software
14 ** in a product, an acknowledgment in the product documentation would be
15 ** appreciated but is not required.
16 ** 2. Altered source versions must be plainly marked as such, and must not be
17 ** misrepresented as being the original software.
18 ** 3. This notice may not be removed or altered from any source distribution.
19 **
20 ** Created on: 2022-02-19T10:08:28+01:00
21 ** Author: Sylvain Fargier <fargie_s> <fargier.sylvain@gmail.com>
22 **
23 */
24 
25 #ifndef PROMISE_HPP__
26 #define PROMISE_HPP__
27 
28 #include <future>
29 
30 #include "../Exception.hpp"
31 
32 namespace smc {
33 namespace internal {
44 {
45  virtual ~PromiseBase() {}
46  virtual void set_exception(const Exception &ex) = 0;
47 
48  template<typename T>
49  std::promise<T> &get();
50 };
51 
55 template<typename T>
56 struct Promise : public PromiseBase
57 {
58  void set_exception(const Exception &ex) override
59  {
60  prom.set_exception(std::make_exception_ptr(ex));
61  }
62 
63  std::promise<T> prom;
64 };
65 
66 template<typename T>
67 std::promise<T> &PromiseBase::get()
68 {
69  return static_cast<Promise<T> &>(*this).prom;
70 }
71 
74 } // namespace internal
75 } // namespace smc
76 
77 #endif
Exception thrown by MotionController in case of issues with command.
Definition: Exception.hpp:61
main motion-lib namespace
Definition: Client.cpp:30
base structure for promise handline
Definition: Promise.hpp:44
a typed promise
Definition: Promise.hpp:57