mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Remove all remaining uses of cpp_offset.
parent
7845434270
commit
84636fc2af
|
@ -79,12 +79,14 @@ enum NIType {
|
||||||
NIT_CARGO, ///< The property is a cargo
|
NIT_CARGO, ///< The property is a cargo
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef const void *NIOffsetProc(const void *b);
|
||||||
|
|
||||||
/** Representation of the data from a NewGRF property. */
|
/** Representation of the data from a NewGRF property. */
|
||||||
struct NIProperty {
|
struct NIProperty {
|
||||||
const char *name; ///< A (human readable) name for the property
|
const char *name; ///< A (human readable) name for the property
|
||||||
ptrdiff_t offset; ///< Offset of the variable in the class
|
NIOffsetProc *offset_proc; ///< Callback proc to get the actual variable address in memory
|
||||||
byte read_size; ///< Number of bytes (i.e. byte, word, dword etc)
|
byte read_size; ///< Number of bytes (i.e. byte, word, dword etc)
|
||||||
byte prop; ///< The number of the property
|
byte prop; ///< The number of the property
|
||||||
byte type;
|
byte type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -94,11 +96,11 @@ struct NIProperty {
|
||||||
* information on when they actually apply.
|
* information on when they actually apply.
|
||||||
*/
|
*/
|
||||||
struct NICallback {
|
struct NICallback {
|
||||||
const char *name; ///< The human readable name of the callback
|
const char *name; ///< The human readable name of the callback
|
||||||
ptrdiff_t offset; ///< Offset of the variable in the class
|
NIOffsetProc *offset_proc; ///< Callback proc to get the actual variable address in memory
|
||||||
byte read_size; ///< The number of bytes (i.e. byte, word, dword etc) to read
|
byte read_size; ///< The number of bytes (i.e. byte, word, dword etc) to read
|
||||||
byte cb_bit; ///< The bit that needs to be set for this callback to be enabled
|
byte cb_bit; ///< The bit that needs to be set for this callback to be enabled
|
||||||
uint16 cb_id; ///< The number of the callback
|
uint16 cb_id; ///< The number of the callback
|
||||||
};
|
};
|
||||||
/** Mask to show no bit needs to be enabled for the callback. */
|
/** Mask to show no bit needs to be enabled for the callback. */
|
||||||
static const int CBM_NO_BIT = UINT8_MAX;
|
static const int CBM_NO_BIT = UINT8_MAX;
|
||||||
|
@ -491,7 +493,7 @@ struct NewGRFInspectWindow : Window {
|
||||||
if (nif->properties != nullptr) {
|
if (nif->properties != nullptr) {
|
||||||
this->DrawString(r, i++, "Properties:");
|
this->DrawString(r, i++, "Properties:");
|
||||||
for (const NIProperty *nip = nif->properties; nip->name != nullptr; nip++) {
|
for (const NIProperty *nip = nif->properties; nip->name != nullptr; nip++) {
|
||||||
const void *ptr = (const byte *)base + nip->offset;
|
const void *ptr = nip->offset_proc(base);
|
||||||
uint value;
|
uint value;
|
||||||
switch (nip->read_size) {
|
switch (nip->read_size) {
|
||||||
case 1: value = *(const uint8 *)ptr; break;
|
case 1: value = *(const uint8 *)ptr; break;
|
||||||
|
@ -525,7 +527,7 @@ struct NewGRFInspectWindow : Window {
|
||||||
this->DrawString(r, i++, "Callbacks:");
|
this->DrawString(r, i++, "Callbacks:");
|
||||||
for (const NICallback *nic = nif->callbacks; nic->name != nullptr; nic++) {
|
for (const NICallback *nic = nif->callbacks; nic->name != nullptr; nic++) {
|
||||||
if (nic->cb_bit != CBM_NO_BIT) {
|
if (nic->cb_bit != CBM_NO_BIT) {
|
||||||
const void *ptr = (const byte *)base_spec + nic->offset;
|
const void *ptr = nic->offset_proc(base_spec);
|
||||||
uint value;
|
uint value;
|
||||||
switch (nic->read_size) {
|
switch (nic->read_size) {
|
||||||
case 1: value = *(const uint8 *)ptr; break;
|
case 1: value = *(const uint8 *)ptr; break;
|
||||||
|
|
|
@ -392,18 +392,13 @@ static_assert(SIZE_MAX >= UINT32_MAX);
|
||||||
*/
|
*/
|
||||||
#define lastof(x) (&x[lengthof(x) - 1])
|
#define lastof(x) (&x[lengthof(x) - 1])
|
||||||
|
|
||||||
#define cpp_offsetof(s, m) (((size_t)&reinterpret_cast<const volatile char&>((((s*)(char*)8)->m))) - 8)
|
|
||||||
#if !defined(offsetof)
|
|
||||||
# define offsetof(s, m) cpp_offsetof(s, m)
|
|
||||||
#endif /* offsetof */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the size of a variable within a class.
|
* Gets the size of a variable within a class.
|
||||||
* @param base The class the variable is in.
|
* @param base The class the variable is in.
|
||||||
* @param variable The variable to get the size of.
|
* @param variable The variable to get the size of.
|
||||||
* @return the size of the variable
|
* @return the size of the variable
|
||||||
*/
|
*/
|
||||||
#define cpp_sizeof(base, variable) (sizeof(((base*)8)->variable))
|
#define cpp_sizeof(base, variable) (sizeof(std::declval<base>().variable))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the length of an array variable within a class.
|
* Gets the length of an array variable within a class.
|
||||||
|
|
|
@ -12,11 +12,11 @@
|
||||||
#include "../newgrf_roadtype.h"
|
#include "../newgrf_roadtype.h"
|
||||||
|
|
||||||
/* Helper for filling property tables */
|
/* Helper for filling property tables */
|
||||||
#define NIP(prop, base, variable, type, name) { name, (ptrdiff_t)cpp_offsetof(base, variable), cpp_sizeof(base, variable), prop, type }
|
#define NIP(prop, base, variable, type, name) { name, [] (const void *b) -> const void * { return std::addressof(static_cast<const base *>(b)->variable); }, cpp_sizeof(base, variable), prop, type }
|
||||||
#define NIP_END() { nullptr, 0, 0, 0, 0 }
|
#define NIP_END() { nullptr, 0, 0, 0, 0 }
|
||||||
|
|
||||||
/* Helper for filling callback tables */
|
/* Helper for filling callback tables */
|
||||||
#define NIC(cb_id, base, variable, bit) { #cb_id, (ptrdiff_t)cpp_offsetof(base, variable), cpp_sizeof(base, variable), bit, cb_id }
|
#define NIC(cb_id, base, variable, bit) { #cb_id, [] (const void *b) -> const void * { return std::addressof(static_cast<const base *>(b)->variable); }, cpp_sizeof(base, variable), bit, cb_id }
|
||||||
#define NIC_END() { nullptr, 0, 0, 0, 0 }
|
#define NIC_END() { nullptr, 0, 0, 0, 0 }
|
||||||
|
|
||||||
/* Helper for filling variable tables */
|
/* Helper for filling variable tables */
|
||||||
|
|
Loading…
Reference in New Issue