Fuse.Problem
problemShared.hpp
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* */
3 /* Copyright (c) 2017 - Matteo Ragni, University of Trento */
4 /* */
5 /* Permission is hereby granted, free of charge, to any person */
6 /* obtaining a copy of this software and associated documentation */
7 /* files (the "Software"), to deal in the Software without */
8 /* restriction, including without limitation the rights to use, */
9 /* copy, modify, merge, publish, distribute, sublicense, and/or sell */
10 /* copies of the Software, and to permit persons to whom the */
11 /* Software is furnished to do so, subject to the following */
12 /* conditions: */
13 /* */
14 /* The above copyright notice and this permission notice shall be */
15 /* included in all copies or substantial portions of the Software. */
16 /* */
17 /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
18 /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES */
19 /* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND */
20 /* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT */
21 /* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, */
22 /* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING */
23 /* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR */
24 /* OTHER DEALINGS IN THE SOFTWARE. */
25 /* */
26 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
27 
38 #ifndef _FUSE_PROBLEM_DEFINE_HPP_
39 #define _FUSE_PROBLEM_DEFINE_HPP_
40 
41 #include <vector>
42 #include <cmath>
43 #include <cstddef>
44 
45 #ifndef PROBLEM_PRECISION
46 
51 #define PROBLEM_PRECISION double
52 #endif
53 
57 typedef void(*Function)(void*, void*, void*);
63 #define X() (*xPtr)
64 #define Y() (*yPtr)
65 #define P() (*pPtr)
66 
72 #define FUNCTION_DEFINE(name, content) \
73 extern "C" void name(void* _y, void *_x, void *_p) { \
74  std::vector<PROBLEM_PRECISION> *yPtr = reinterpret_cast< std::vector<PROBLEM_PRECISION>* >(_y); \
75  std::vector<PROBLEM_PRECISION> *pPtr = reinterpret_cast< std::vector<PROBLEM_PRECISION>* >(_p); \
76  std::vector<PROBLEM_PRECISION> *xPtr = reinterpret_cast< std::vector<PROBLEM_PRECISION>* >(_x); \
77  content; \
78 }
79 
87 #define FUNCTION_EXPORT(size_f, size_x, size_p, ...) \
88 extern "C" { \
89  size_t FunctionSizeF() { return size_f; }; \
90  size_t FunctionSizeX() { return size_x; }; \
91  size_t FunctionSizeP() { return size_p; }; \
92  Function FunctionArray[] = { __VA_ARGS__ }; \
93 }
94 
95 #endif /* _FUSE_PROBLEM_DEFINE_HPP_ */
void(* Function)(void *, void *, void *)
Definition: problemShared.hpp:57