OpenPose  1.0.0rc2
OpenPose: A Real-Time Multi-Person Key-Point Detection And Multi-Threading C++ Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
macros.hpp
Go to the documentation of this file.
1 #ifndef OPENPOSE_CORE_MACROS_HPP
2 #define OPENPOSE_CORE_MACROS_HPP
3 
4 #include <memory> // std::shared_ptr
5 #include <ostream>
6 #include <string>
7 #include <vector>
8 
9 // OpenPose name and version
13 
14 #ifndef _WIN32
15  #define OP_API
16 #elif defined OP_EXPORTS
17  #define OP_API __declspec(dllexport)
18 #else
19  #define OP_API __declspec(dllimport)
20 #endif
21 
22 //Disable some Windows Warnings
23 #ifdef _WIN32
24  #pragma warning ( disable : 4251 ) // XXX needs to have dll-interface to be used by clients of class YYY
25  #pragma warning( disable: 4275 ) // non dll-interface structXXX used as base
26 #endif
27 
28 #define UNUSED(unusedVariable) (void)(unusedVariable)
29 
30 #define DELETE_COPY(className) \
31  className(const className&) = delete; \
32  className& operator=(const className&) = delete
33 
34 // Instantiate a class with all the basic types
35 #define COMPILE_TEMPLATE_BASIC_TYPES_CLASS(className) COMPILE_TEMPLATE_BASIC_TYPES(className, class)
36 #define COMPILE_TEMPLATE_BASIC_TYPES_STRUCT(className) COMPILE_TEMPLATE_BASIC_TYPES(className, struct)
37 #define COMPILE_TEMPLATE_BASIC_TYPES(className, classType) \
38  template classType OP_API className<char>; \
39  template classType OP_API className<signed char>; \
40  template classType OP_API className<short>; \
41  template classType OP_API className<int>; \
42  template classType OP_API className<long>; \
43  template classType OP_API className<long long>; \
44  template classType OP_API className<unsigned char>; \
45  template classType OP_API className<unsigned short>; \
46  template classType OP_API className<unsigned int>; \
47  template classType OP_API className<unsigned long>; \
48  template classType OP_API className<unsigned long long>; \
49  template classType OP_API className<float>; \
50  template classType OP_API className<double>; \
51  template classType OP_API className<long double>
52 
57 #define OVERLOAD_C_OUT(className) \
58  template<typename T> std::ostream &operator<<(std::ostream& ostream, const op::className<T>& obj) \
59  { \
60  ostream << obj.toString(); \
61  return ostream; \
62  }
63 
64 // Instantiate a class with float and double specifications
65 #define COMPILE_TEMPLATE_FLOATING_TYPES_CLASS(className) COMPILE_TEMPLATE_FLOATING_TYPES(className, class)
66 #define COMPILE_TEMPLATE_FLOATING_TYPES_STRUCT(className) COMPILE_TEMPLATE_FLOATING_TYPES(className, struct)
67 #define COMPILE_TEMPLATE_FLOATING_TYPES(className, classType) \
68  char gInstantiationGuard##className; \
69  template classType OP_API className<float>; \
70  template classType OP_API className<double>
71 
72 // PIMPL does not work if function arguments need the 3rd-party class. Alternative:
73 // stackoverflow.com/questions/13978775/how-to-avoid-include-dependency-to-external-library?answertab=active#tab-top
74 struct dim3;
75 namespace caffe
76 {
77  template <typename T> class Blob;
78 }
79 namespace boost
80 {
81  template <typename T> class shared_ptr; // E.g., boost::shared_ptr<caffe::Blob<float>>
82 }
83 
84 #endif // OPENPOSE_CORE_MACROS_HPP
const std::string OPEN_POSE_VERSION_STRING
Definition: macros.hpp:11
const std::string OPEN_POSE_NAME_AND_VERSION
Definition: macros.hpp:12
Definition: macros.hpp:81
const std::string OPEN_POSE_NAME_STRING
Definition: macros.hpp:10
Definition: macros.hpp:77
std::string string
Definition: cl2.hpp:574