Switch to using templates.

master
sigonasr2 2 years ago
parent d5f7cf205d
commit a8eb9356c4
  1. BIN
      SHNFileDecryptor/AbState.shn
  2. 78
      SHNFileDecryptor/SHNFileDecryptor.cpp

Binary file not shown.

@ -181,93 +181,77 @@ class SHNFile{
int type=0; int type=0;
Data(byte b){ Data(byte b){
std::shared_ptr<byte>ptr=std::make_shared<byte>(byte(b)); std::shared_ptr<byte>ptr=std::make_shared<byte>(byte(b));
data=std::static_pointer_cast<byte>(ptr); data=ptr;
type=1; type=1;
} }
Data(sbyte b){ Data(sbyte b){
std::shared_ptr<sbyte>ptr=std::make_shared<sbyte>(sbyte(b)); std::shared_ptr<sbyte>ptr=std::make_shared<sbyte>(sbyte(b));
data=std::static_pointer_cast<sbyte>(ptr); data=ptr;
type=7; type=7;
} }
Data(uint16_t n){ Data(uint16_t n){
std::shared_ptr<uint16_t>ptr=std::make_shared<uint16_t>(uint16_t(n)); std::shared_ptr<uint16_t>ptr=std::make_shared<uint16_t>(uint16_t(n));
data=std::static_pointer_cast<uint16_t>(ptr); data=ptr;
type=2; type=2;
} }
Data(int16_t n){ Data(int16_t n){
std::shared_ptr<int16_t>ptr=std::make_shared<int16_t>(int16_t(n)); std::shared_ptr<int16_t>ptr=std::make_shared<int16_t>(int16_t(n));
data=std::static_pointer_cast<int16_t>(ptr); data=ptr;
type=6; type=6;
} }
Data(uint32_t n){ Data(uint32_t n){
std::shared_ptr<uint32_t>ptr=std::make_shared<uint32_t>(uint32_t(n)); std::shared_ptr<uint32_t>ptr=std::make_shared<uint32_t>(uint32_t(n));
data=std::static_pointer_cast<uint32_t>(ptr); data=ptr;
type=3; type=3;
} }
Data(int32_t n){ Data(int32_t n){
std::shared_ptr<int32_t>ptr=std::make_shared<int32_t>(int32_t(n)); std::shared_ptr<int32_t>ptr=std::make_shared<int32_t>(int32_t(n));
data=std::static_pointer_cast<int32_t>(ptr); data=ptr;
type=8; type=8;
} }
Data(float n){ Data(float n){
std::shared_ptr<float>ptr=std::make_shared<float>(float(n)); std::shared_ptr<float>ptr=std::make_shared<float>(float(n));
data=std::static_pointer_cast<float>(ptr); data=ptr;
type=4; type=4;
} }
Data(std::string str){ Data(std::string str){
std::shared_ptr<std::string>ptr=std::make_shared<std::string>(str); std::shared_ptr<std::string>ptr=std::make_shared<std::string>(str);
data=std::static_pointer_cast<std::string>(ptr); data=ptr;
type=5; type=5;
} }
byte GetByte(){ template <typename T>
return *std::static_pointer_cast<byte>(data); T Get(){
return *std::static_pointer_cast<T>(data);
} }
uint16_t GetUInt16(){ template<typename T>
return *std::static_pointer_cast<uint16_t>(data); void Set(T b){
} data=std::make_shared<T>(T(b));
int16_t GetInt16(){
return *std::static_pointer_cast<int16_t>(data);
}
sbyte GetSByte(){
return *std::static_pointer_cast<sbyte>(data);
}
uint32_t GetUInt32(){
return *std::static_pointer_cast<uint32_t>(data);
}
int32_t GetInt32(){
return *std::static_pointer_cast<int32_t>(data);
}
float GetFloat(){
return *std::static_pointer_cast<float>(data);
}
std::string GetString(){
return *std::static_pointer_cast<std::string>(data);
} }
std::string GetDisplayText(){ std::string GetDisplayText(){
switch(type){ switch(type){
case 1:{ case 1:{
return std::to_string(int(GetByte())); return std::to_string(int(Get<byte>()));
}break; }break;
case 7:{ case 7:{
return std::to_string(int(GetSByte())); return std::to_string(int(Get<sbyte>()));
}break; }break;
case 2:{ case 2:{
return std::to_string(GetUInt16()); return std::to_string(Get<uint16_t>());
}break; }break;
case 6:{ case 6:{
return std::to_string(GetInt16()); return std::to_string(Get<int16_t>());
}break; }break;
case 3:{ case 3:{
return std::to_string(GetUInt32()); return std::to_string(Get<uint32_t>());
}break; }break;
case 8:{ case 8:{
return std::to_string(GetInt32()); return std::to_string(Get<int32_t>());
}break; }break;
case 4:{ case 4:{
return std::to_string(GetFloat()); return std::to_string(Get<float>());
}break; }break;
case 5:{ case 5:{
return GetString(); return Get<std::string>();
}break; }break;
} }
} }
@ -404,36 +388,36 @@ public:
case 1: case 1:
case 12: case 12:
case 0x10:{ case 0x10:{
WriteByte(f,col.GetByte()); WriteByte(f,col.Get<byte>());
}break; }break;
case 2:{ case 2:{
WriteUInt16(f,col.GetUInt16()); WriteUInt16(f,col.Get<uint16_t>());
}break; }break;
case 3: case 3:
case 11: case 11:
case 0x12: case 0x12:
case 0x1b:{ case 0x1b:{
WriteUInt32(f,col.GetUInt32()); WriteUInt32(f,col.Get<uint32_t>());
}break; }break;
case 5:{ case 5:{
WriteSingle(f,col.GetFloat()); WriteSingle(f,col.Get<float>());
}break; }break;
case 9: case 9:
case 0x18:{ case 0x18:{
WriteString(f,col.GetString(),columns[colNum].length); WriteString(f,col.Get<std::string>(),columns[colNum].length);
}break; }break;
case 13: case 13:
case 0x15:{ case 0x15:{
WriteInt16(f,col.GetInt16()); WriteInt16(f,col.Get<uint16_t>());
}break; }break;
case 20:{ case 20:{
WriteSByte(f,col.GetSByte()); WriteSByte(f,col.Get<sbyte>());
}break; }break;
case 0x16:{ case 0x16:{
WriteInt32(f,col.GetInt32()); WriteInt32(f,col.Get<int32_t>());
}break; }break;
case 0x1a:{ case 0x1a:{
WriteString(f,col.GetString(),-1); WriteString(f,col.Get<std::string>(),-1);
}break; }break;
} }
colNum++; colNum++;

Loading…
Cancel
Save