-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathrb_val.h
More file actions
105 lines (88 loc) · 2.4 KB
/
rb_val.h
File metadata and controls
105 lines (88 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/* -HEADER----------------------------------------------------------------------
RapidBATCH
Copyright (C) 2008, 2009 by Phorward Software Technologies, Jan Max Meyer
http://www.phorward-software.com ++ mail@phorward-software.com
File: rb_val.h
Author: Jan Max Meyer
Usage: Universal value structure
----------------------------------------------------------------------------- */
#ifndef RB_VAL_H
#define RB_VAL_H
/*
* Includes
*/
/*
* Defines
*/
#define VAL_UNDEFINED 0
#define VAL_LONG 1
#define VAL_ADDR 2
#define VAL_DBL 4
#define VAL_STR 8
#define VAL_CSTR 8+16
/*
* Macros
*/
#define RB_VAL_TYPE( val ) ( (val)->type )
#define RB_VAL_FREE( val ) rb_vm_free_val( val )
#define RB_VAL_GET_ADDR( val ) rb_vm_get_addr_val( ( val ), TRUE )
#define RB_VAL_GET_LONG( val ) rb_vm_get_long_val( ( val ), TRUE )
#define RB_VAL_GET_DBL( val ) rb_vm_get_dbl_val( ( val ), TRUE )
#define RB_VAL_GET_STR( val ) rb_vm_get_str_val( ( val ), TRUE )
#define RB_VAL_SET_ADDR( val, v ) \
( val )->value.vaddr = (v), \
( val )->type = VAL_ADDR
#define RB_VAL_SET_LONG( val, v ) \
( val )->value.vlong = (v), \
( val )->type = VAL_LONG
#define RB_VAL_SET_DBL( val, v ) \
( val )->value.vdbl = (v), \
( val )->type = VAL_DBL
#define RB_VAL_SET_CSTR( val, v ) \
( val )->value.vcstr = (v), \
( val )->type = VAL_CSTR
#define RB_VAL_SET_STR( val, v ) \
( val )->value.vstr.str = (v), \
( val )->value.vstr.len = pstrlen( \
( val )->value.vstr.str ), \
( val )->type = VAL_STR
/* Internal, old-style macro names */
#define VAL_GET_ADDR RB_VAL_GET_ADDR
#define VAL_GET_LONG RB_VAL_GET_LONG
#define VAL_GET_DBL RB_VAL_GET_DBL
#define VAL_GET_STR RB_VAL_GET_STR
#define VAL_SET_ADDR RB_VAL_SET_ADDR
#define VAL_SET_LONG RB_VAL_SET_LONG
#define VAL_SET_DBL RB_VAL_SET_DBL
#define VAL_SET_CSTR RB_VAL_SET_CSTR
#define VAL_SET_STR RB_VAL_SET_STR
#define VAL_TYPE RB_VAL_TYPE
#define VAL_FREE RB_VAL_FREE
/*
* Typedefs
*/
typedef struct _vm_val vm_val;
#define VM_VAL vm_val
/*
* Enumerators
*/
/*
* Structs & Unions
*/
struct _vm_val
{
char type;
union
{
long vlong; /* long */
vm_addr vaddr; /* adress */
double vdbl; /* double */
char* vcstr; /* constant string */
struct
{
char* str;
int len;
} vstr; /* dynamic string */
} value;
};
#endif