29 #ifndef COFFI_UTILS_HPP
30 #define COFFI_UTILS_HPP
35 #define STRINGIFY(NAME) #NAME
51 #define COFFI_GET_ACCESS_DECL(TYPE, NAME) virtual TYPE get_##NAME() const = 0
54 #define COFFI_SET_ACCESS_DECL(TYPE, NAME) \
55 virtual void set_##NAME(TYPE value) = 0
58 #define COFFI_GET_SET_ACCESS_DECL(TYPE, NAME) \
59 virtual TYPE get_##NAME() const = 0; \
60 virtual void set_##NAME(TYPE value) = 0
63 #define COFFI_GET_ACCESS(TYPE, NAME) \
64 TYPE get_##NAME() const { return header.NAME; }
67 #define COFFI_SET_ACCESS(TYPE, NAME) \
68 void set_##NAME(TYPE value) { header.NAME = value; }
71 #define COFFI_GET_SET_ACCESS(TYPE, NAME) \
72 TYPE get_##NAME() const { return header.NAME; } \
73 void set_##NAME(TYPE value) { header.NAME = value; }
76 #define COFFI_GET_ACCESS_NONE(TYPE, NAME) \
77 TYPE get_##NAME() const \
79 throw std::runtime_error("The header field '" STRINGIFY( \
80 NAME) "' is not applicable to this COFF version"); \
84 #define COFFI_SET_ACCESS_NONE(TYPE, NAME) \
85 void set_##NAME(TYPE value) \
87 throw std::runtime_error("The header field '" STRINGIFY( \
88 NAME) "' is not applicable to this COFF version"); \
92 #define COFFI_GET_SET_ACCESS_NONE(TYPE, NAME) \
93 TYPE get_##NAME() const \
95 throw std::runtime_error("The header field '" STRINGIFY( \
96 NAME) "' is not applicable to this COFF version"); \
98 void set_##NAME(TYPE) \
100 throw std::runtime_error("The header field '" STRINGIFY( \
101 NAME) "' is not applicable to this COFF version"); \
105 #define COFFI_GET_SIZEOF_DECL() virtual size_t get_sizeof() const = 0
108 #define COFFI_GET_SIZEOF() \
109 size_t get_sizeof() const { return sizeof(header); }
COFFI library basic structures and types.