diff options
author | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-04-15 12:17:53 +0200 |
---|---|---|
committer | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-04-15 12:17:53 +0200 |
commit | 2ee0f834487cfe4b6bd9424ca2715685a8db16e4 (patch) | |
tree | 6867718d6bfcd42f6a82c86dd8f149d6ea6cab68 /FieldParser.cpp | |
download | AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.tar AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.tar.gz AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.tar.bz2 AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.tar.lz AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.tar.xz AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.tar.zst AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.zip |
Diffstat (limited to 'FieldParser.cpp')
-rw-r--r-- | FieldParser.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/FieldParser.cpp b/FieldParser.cpp new file mode 100644 index 0000000..10148e3 --- /dev/null +++ b/FieldParser.cpp @@ -0,0 +1,106 @@ +#include "FieldParser.hpp" + +Field FieldParser::Parse(FieldType type, byte *data, size_t len) { + switch (type) { + case VarInt: + return ParseVarInt(data, len); + case Boolean: + return ParseBool(data, len); + case String: + return ParseString(data, len); + case Long: + return ParseLong(data, len); + case Int: + return ParseInt(data, len); + case UnsignedByte: + return ParseUByte(data, len); + case Byte: + return ParseByte(data, len); + case Float: + return ParseFloat(data, len); + case Position: + return ParsePosition(data, len); + case Double: + return ParseDouble(data, len); + case ByteArray: + return ParseByteArray(data, len); + default: + throw 105; + } +} + +Field FieldParser::ParseString(byte *data, size_t len) { + Field fLen = ParseVarInt(data, 0); + Field f; + f.SetRaw(data, fLen.GetLength() + fLen.GetVarInt(), String); + return f; +} + +Field FieldParser::ParseBool(byte *data, size_t len) { + Field f; + f.SetRaw(data,1,Boolean); + return f; +} + +Field FieldParser::ParseVarInt(byte *data, size_t len) { + if (len != 0) { + Field f; + f.SetRaw(data, len, VarInt); + return f; + } + int val = VarIntRead(data, len); + Field f; + f.SetVarInt(val); + return f; +} + +Field FieldParser::ParseLong(byte *data, size_t len) { + Field f; + f.SetRaw(data, 8, Long); + return f; +} + +Field FieldParser::ParseInt(byte *data, size_t len) { + Field f; + f.SetRaw(data, 4, Int); + return f; +} + +Field FieldParser::ParseUByte(byte *data, size_t len) { + Field f; + f.SetRaw(data, 1, UnsignedByte); + return f; +} + +Field FieldParser::ParseByte(byte *data, size_t len) { + Field f; + f.SetRaw(data, 1, Byte); + return f; +} + +Field FieldParser::ParseFloat(byte *data, size_t len) { + Field f; + f.SetRaw(data, 4, Float); + return f; +} + +Field FieldParser::ParsePosition(byte *data, size_t len) { + Field f; + f.SetRaw(data, 8, Position); + return f; +} + +Field FieldParser::ParseDouble(byte *data, size_t len) { + Field f; + f.SetRaw(data, 8, Double); + return f; +} + +Field FieldParser::ParseByteArray(byte *data, size_t len) { + if (len == 0) + throw 119; + Field f; + f.SetRaw(data, len, Byte); + //f.SetRaw(data, len, ByteArray); + return f; +} |