structs/source/structs/package.d

91 lines
1.7 KiB
D

module structs;
private
{
import std.array;
import std.bitmanip;
import std.system;
/++
+ Supported format types
+/
enum FORMAT_TYPE
{
INT_8, /// Signed integer 8 bit
INT_16, /// Signed integer 16 bit
INT_32, /// Signed integer 32 bit
INT_64, /// Signed integer 64 bit
UINT_8, /// Unsigned integer 8 bit
UINT_16, /// Unsigned integer 16 bit
UINT_32, /// Unsigned integer 32 bit
UINT_64, /// Unsigned integer 64 bit
STRING /// C-String
}
/++
+ A element of a package
+/
struct Element
{
Endian endian; /// The endian to use
bool isArray; /// If it's an array
size_t arraySize; /// Array size
FORMAT_TYPE formatType; /// The formated type
/++
+ Calculate the size of the element
+ Returns: Size in bytes
+/
size_t packSize() const
{
// Base format type size
size_t base_size = 0;
final switch(this.formatType)
{
case FORMAT_TYPE.STRING:
case FORMAT_TYPE.INT_8:
case FORMAT_TYPE.UINT_8:
base_size = 1;
break;
case FORMAT_TYPE.INT_16:
case FORMAT_TYPE.UINT_16:
base_size = 2;
break;
case FORMAT_TYPE.INT_32:
case FORMAT_TYPE.UINT_32:
base_size = 4;
break;
case FORMAT_TYPE.INT_64:
case FORMAT_TYPE.UINT_64:
base_size = 8;
break;
}
// Add array size
return base_size * this.arraySize;
}
}
/++
+ Removes the whitespaces of the string.
+ Params:
+ source = The source string to format
+ Returns: String without whitespaces
+/
pure string remove_whitespaces(string source)
{
return source.replace(" ", "");
}
// Test remove whitespaces.
unittest
{
assert(remove_whitespaces(" a b c ") == "abc");
}
}
public
{
}