trick/trick_source/sim_services/MemoryManager/include/reference.h

78 lines
2.1 KiB
C
Raw Normal View History

2015-02-26 15:02:31 +00:00
/*
PURPOSE:
(Data structure typedef for parameter attributes used by executive IO
routines and filled by the interface code generator.)
PROGRAMMERS:
((Robert W. Bailey) (LinCom Corp) (September 1990) (Initial Release.))
*/
#ifndef REFERENCE_H
#define REFERENCE_H
2015-02-26 15:02:31 +00:00
#include "sim_services/MemoryManager/include/attributes.h"
#include "sim_services/MemoryManager/include/value.h"
#include "trick_utils/trick_adt/include/dllist.h"
// FIXME These ERROR CODES
#define TRICK_NO_ERROR 0
#define TRICK_PARAMETER_ARRAY_SIZE 6
#define TRICK_PARAMETER_ADDRESS_NULL 7
#define TRICK_UNITS_CONVERSION_ERROR 8
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
REF_ADDRESS = 0,
REF_VALUE = 1,
REF_INVALID = 99
} REF_TYPE;
typedef enum {
AO_ADDRESS ,
AO_OFFSET ,
AO_DEREFERENCE
} ADDRESS_OPERATOR ;
typedef union {
void * address ;
long offset ;
} ADDRESS_OPERAND ;
typedef struct {
ADDRESS_OPERATOR operator_ ;
ADDRESS_OPERAND operand ;
} ADDRESS_NODE ;
/**
* The REF2 data structure represents a value or a reference to a value.
*/
typedef struct {
char* reference; /**< -- Main buffer for variable reference */
int num_index; /**< -- num index for last level of reference */
char* units; /**< -- Units as specified in input runstream */
int num_index_left; /**< -- FIXME OBSOLETE Number of remaining indicies to specify */
int pointer_present; /**< -- 0 = no , 1 = yes (address could change) */
int ref_type; /**< -- 0 = address, 1 = value. */
void* address; /**< ** Address of the specified reference */
V_DATA v_data; /**< ** Value */
ATTRIBUTES* attr; /**< -- Parameter attributes */
int create_add_path ; /**< ** bool to shortcut to resolve address */
DLLIST * address_path ; /**< ** shortcut to resolve address */
} REF2;
/**
* Get the value of the variable referenced by R.
* @param R variable reference.
* @param V pointer to V_DATA object into which the value is to be assigned.
* @todo isn't this obsolete?
*/
int ref_to_value( REF2* R, V_DATA* V);
#ifdef __cplusplus
}
#endif
#endif