Primitive Types
System of primitive types in Jancy is a lot like the one in C/C++ with one exception: there is native support for integers with reversed byte-order (aka bigendians).
Bigendians are widely used throughout most network protocol stacks and everyone who was ever involved in network programming knows two things: number one, it kind of clutters the programs to constantly reverse byte order manually with all these ntohs/htons/ntohl/htonl calls. Even more importantly, number two – it’s sooo easy to forget to reverse byte order, thus getting a program which compiles just fine but has a logical bug in it! Since bigendians are so abundant in networking, and Jancy is intended for low-level IO programmers, bigendians got native support in Jancy.
Below is a list of all primitive types in Jancy.
void
bool
char
(int8_t
)unsigned char
(uint8_t
,uchar_t
,byte_t
)short
(int16_t
)unsigned short
(uint16_t
,ushort_t
,word_t
)int
(int32_t
)unsigned int
(uint32_t
,uint_t
,dword_t
)long
(int64_t
)unsigned long
(uint64_t
,ulong_t
,qword_t
)bigendian short
bigendian unsigned short
bigendian int
bigendian unsigned int
bigendian long
bigendian unsigned long
intptr
(aliases toint32_t
orint64_t
depending on platform)unsigned intptr
(aliases touint32_t
oruint64_t
depending on platform)float
double
POD- vs non-POD-types
In Jancy POD-type (plain-old-data) is a type of data which contains only user data bytes. Virtual method tables, safe data pointer validators, GC-box headers etc – all that is classified as meta-data. Any type containing meta-data – is a non-POD-type.
Primitive types and all their aggregations via arrays, structs or unions – are POD’s. Anything else – non-POD. You can memcpy
POD-types or modify them byte-by-byte – and that wouldn’t cause problems other than logical one (but not a crash!)