Using the Variant (Setting it's memory location)
Era Scarecrow
rtcvb32 at yahoo.com
Wed Feb 8 00:46:22 PST 2012
On Tuesday, 7 February 2012 at 17:51:42 UTC, Pedro Lacerda wrote:
> You can roll your own tagged union instead. The S struct can
> store long and
> byte[], S.ptr is a pointer to the data.
Yep, a bit like my code, except with switch cases covering all
major types; That and trying to do comparison and setting
functions, which seems a bit much. Testing it using templates and
testing all the types seems like a nightmare. I've decided I need
to pass it a ubyte array so I could do bounds checking before
binding the memory to the union. One fewer things to worry about.
Let's see... not that I expect you to use this, but I sorta have
this as my enum set for types.
enum ValueType {
raw = 0x00000000, ///default upon unknown
mask_types = 0xfff00000, ///Upper 4k defines general types, or
12 flag types
mask_size = 0x000fffff, ///lower gives 1Million for size.
i_types = 0x00100000, ///integars types
i_8 = i_types + byte.sizeof,
i_16 = i_types + short.sizeof,
i_32 = i_types + int.sizeof,
i_64 = i_types + long.sizeof,
u_types = 0x00200000, ///unsigned numbers
u_8 = u_types + ubyte.sizeof,
u_16 = u_types + ushort.sizeof,
u_32 = u_types + uint.sizeof,
u_64 = u_types + ulong.sizeof,
floating_types = 0x00400000,
float_32 = floating_types + float.sizeof, fl = float_32,
double_64 = floating_types + double.sizeof, doub = double_64,
flags_types = 0x00800000,
flags_8 = flags_types + ubyte.sizeof,
flags_16 = flags_types + ushort.sizeof,
flags_32 = flags_types + uint.sizeof,
flags_64 = flags_types + ulong.sizeof,
ranged_types = 0x01000000,
ranged_8 = ranged_types + ubyte.sizeof,
ranged_16 = ranged_types + ushort.sizeof,
ranged_32 = ranged_types + uint.sizeof,
ranged_64 = ranged_types + ulong.sizeof,
voidp = 0x02000000, pointer_types = voidp, ///pointers
i_8p, u_8p,
i_16p, u_16p,
i_32p, u_32p,
i_64p, u_64p,
float_32p, double_64p,
var_str = 0x04000000,
fixed_str = 0x08000000,
var_ustr = 0x10000000,
fixed_ustr = 0x20000000
}
More information about the Digitalmars-d-learn
mailing list