summaryrefslogtreecommitdiff
path: root/ZAPD/ZScalar.h
blob: 8f98f261d73f8be112d36a52d515ec95799a190d (plain)
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
#pragma once

#include <cstdint>
#include <string>
#include <vector>
#include "ZResource.h"
#include "tinyxml2.h"

enum class ZScalarType
{
	ZSCALAR_NONE,
	ZSCALAR_S8,
	ZSCALAR_U8,
	ZSCALAR_X8,
	ZSCALAR_S16,
	ZSCALAR_U16,
	ZSCALAR_X16,
	ZSCALAR_S32,
	ZSCALAR_U32,
	ZSCALAR_X32,
	ZSCALAR_S64,
	ZSCALAR_U64,
	ZSCALAR_X64,
	ZSCALAR_F32,
	ZSCALAR_F64
};

typedef union ZScalarData
{
	uint8_t u8;
	int8_t s8;
	uint16_t u16;
	int16_t s16;
	uint32_t u32;
	int32_t s32;
	uint64_t u64;
	int64_t s64;
	float f32;
	double f64;
} ZScalarData;

class ZScalar : public ZResource
{
	friend class ZVector;

public:
	ZScalarData scalarData;
	ZScalarType scalarType;

	ZScalar(ZFile* nParent);

	void ExtractFromBinary(uint32_t nRawDataIndex, ZScalarType nScalarType);

	void ParseRawData() override;
	void ParseXML(tinyxml2::XMLElement* reader) override;
	std::string GetBodySourceCode() const override;

	bool DoesSupportArray() const override;
	std::string GetSourceTypeName() const override;
	ZResourceType GetResourceType() const override;

	size_t GetRawDataSize() const override;
	DeclarationAlignment GetDeclarationAlignment() const override;

	static size_t MapTypeToSize(const ZScalarType scalarType);
	static ZScalarType MapOutputTypeToScalarType(const std::string& type);
	static std::string MapScalarTypeToOutputType(const ZScalarType scalarType);
};