Data types: Difference between revisions
(→dict) |
m (Bilka moved page Data Types to Data types: Downcasing to style guide compliance.) |
Revision as of 09:34, 27 August 2017
This page describes common binary data types used by Factorio, and most modern day computer applications, internally.
Properties
Endianness
All data stored in computers are stored in single, small unit of data called a "byte". Larger units of data are split into multiple bytes. The order in which sequential bytes are assembled together to form a larger unit of data is referred to as it's "endianess". All data saved locally by Factorio is stored in "little"-endian format (because Intel favored little endian processors in the ancient times). All data transferred over the network by Factorio is done in "big"-endian format (the standard for network stuffs, so much so that it's often refered to as "network"-endian). (Please correct any of this if I'm wrong!!) For more information about endianness, please see the Wikipedia entry.
Signedness
Another property of multi-byte data types is it's signedness. Please see the wikipedia entry. Data types without a u- prefix are signed, and those marked with a u- prefixed are unsigned. I'm not certain which type of signedness Factorio uses - perhaps it is machine dependant, but for me it always appears to be two's complement.
Data Types
bool
A 1 byte value. Considered True iff value equals 1, otherwise it is considered False.
byte
1 byte long integer.
short
2 byte long integer.
int
4 byte long integer.
long
8 byte long integer.
float
An 4 byte (32 bit) long floating point number stored in a special format with two fields - the number's exponent, and it's mantissa. This format is described by the 32-bit data type in IEEE 754.
double
An 8 byte (64 bit) long floating point number stored in a special format with two fields - the number's exponent, and it's mantissa. This format is described by the 64-bit data type in IEEE 754.
string
Strings in Factorio are stored Pascal-style - they're a variable length data type with two fields: an int describing how many bytes long the string data is, and then the string data itself.
array
array<element type>
Arrays are a container type. Like a string, they're prefixed with an int describing how many elements are in the array, followed by that many elements of the specified element type back to back.
dict
dict<key type, value type>
Dictionaries (or "dict"s for short) are like arrays, but their elements consist of (key, value) pairs that map their key (usually a string, or a number) to their value. Just like arrays, they're prefixed with an int describing how many (key, value) pairs are in the dict, followed by that many (key, value) pairs. Each key should be unique and only appear once. In a few esoteric languages, if a key is provided multiple times then only the last value is used - but in Factorio, assume any dict with multiple identical keys is malformed and error.