1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/other-licenses/7zstub/src/7zip/Archive/7z/7zMethodID.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,76 @@ 1.4 +// 7zMethodID.cpp 1.5 + 1.6 +#include "StdAfx.h" 1.7 + 1.8 +#include "7zMethodID.h" 1.9 + 1.10 +namespace NArchive { 1.11 +namespace N7z { 1.12 + 1.13 +static wchar_t GetHex(Byte value) 1.14 +{ 1.15 + return (value < 10) ? ('0' + value) : ('A' + (value - 10)); 1.16 +} 1.17 + 1.18 +static bool HexCharToInt(wchar_t value, Byte &result) 1.19 +{ 1.20 + if (value >= '0' && value <= '9') 1.21 + result = value - '0'; 1.22 + else if (value >= 'a' && value <= 'f') 1.23 + result = 10 + value - 'a'; 1.24 + else if (value >= 'A' && value <= 'F') 1.25 + result = 10 + value - 'A'; 1.26 + else 1.27 + return false; 1.28 + return true; 1.29 +} 1.30 + 1.31 +static bool TwoHexCharsToInt(wchar_t valueHigh, wchar_t valueLow, Byte &result) 1.32 +{ 1.33 + Byte resultHigh, resultLow; 1.34 + if (!HexCharToInt(valueHigh, resultHigh)) 1.35 + return false; 1.36 + if (!HexCharToInt(valueLow, resultLow)) 1.37 + return false; 1.38 + result = (resultHigh << 4) + resultLow; 1.39 + return true; 1.40 +} 1.41 + 1.42 +UString CMethodID::ConvertToString() const 1.43 +{ 1.44 + UString result; 1.45 + for (int i = 0; i < IDSize; i++) 1.46 + { 1.47 + Byte b = ID[i]; 1.48 + result += GetHex(b >> 4); 1.49 + result += GetHex(b & 0xF); 1.50 + } 1.51 + return result; 1.52 +} 1.53 + 1.54 +bool CMethodID::ConvertFromString(const UString &srcString) 1.55 +{ 1.56 + int length = srcString.Length(); 1.57 + if ((length & 1) != 0 || (length >> 1) > kMethodIDSize) 1.58 + return false; 1.59 + IDSize = length / 2; 1.60 + UInt32 i; 1.61 + for(i = 0; i < IDSize; i++) 1.62 + if (!TwoHexCharsToInt(srcString[i * 2], srcString[i * 2 + 1], ID[i])) 1.63 + return false; 1.64 + for(; i < kMethodIDSize; i++) 1.65 + ID[i] = 0; 1.66 + return true; 1.67 +} 1.68 + 1.69 +bool operator==(const CMethodID &a1, const CMethodID &a2) 1.70 +{ 1.71 + if (a1.IDSize != a2.IDSize) 1.72 + return false; 1.73 + for (UInt32 i = 0; i < a1.IDSize; i++) 1.74 + if (a1.ID[i] != a2.ID[i]) 1.75 + return false; 1.76 + return true; 1.77 +} 1.78 + 1.79 +}}