2020-03-22 00:45:04 +01:00
|
|
|
#pragma once
|
2016-05-22 05:20:38 +02:00
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
#include "SqBase.hpp"
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
namespace SqMod {
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------------------------------
|
|
|
|
* Simple class to maintain the state of an encoder.
|
|
|
|
*/
|
|
|
|
template < class T > class HashWrapper
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------
|
|
|
|
* Default constructor.
|
|
|
|
*/
|
|
|
|
HashWrapper()
|
|
|
|
: m_Encoder()
|
|
|
|
{
|
|
|
|
/* ... */
|
|
|
|
}
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------
|
|
|
|
* Copy operator.
|
|
|
|
*/
|
|
|
|
HashWrapper(const HashWrapper & o)
|
|
|
|
: m_Encoder(o.m_Encoder)
|
|
|
|
{
|
|
|
|
/* ... */
|
|
|
|
}
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------
|
|
|
|
* Destructor.
|
|
|
|
*/
|
|
|
|
~HashWrapper()
|
|
|
|
{
|
|
|
|
/* ... */
|
|
|
|
}
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------
|
|
|
|
* Copy assignment operator.
|
|
|
|
*/
|
|
|
|
HashWrapper & operator = (const HashWrapper & o)
|
|
|
|
{
|
|
|
|
m_Encoder = o.m_Encoder;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------
|
|
|
|
* Used by the script engine to convert an instance of this type to a string.
|
|
|
|
*/
|
|
|
|
String ToString()
|
|
|
|
{
|
|
|
|
return m_Encoder.getHash();
|
|
|
|
}
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------
|
|
|
|
* Reset the encoder state.
|
|
|
|
*/
|
|
|
|
void Reset()
|
|
|
|
{
|
|
|
|
m_Encoder.reset();
|
|
|
|
}
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------
|
|
|
|
* Compute the hash of the specified string.
|
|
|
|
*/
|
|
|
|
String Compute(const String & str)
|
|
|
|
{
|
|
|
|
return m_Encoder(str);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------
|
|
|
|
* Retrieve the hash value of the data hashed so far.
|
|
|
|
*/
|
|
|
|
String GetHash()
|
|
|
|
{
|
|
|
|
return m_Encoder.getHash();
|
|
|
|
}
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------
|
|
|
|
* Add a string value to be hashed.
|
|
|
|
*/
|
|
|
|
void AddStr(const String & str)
|
|
|
|
{
|
|
|
|
m_Encoder.add(str.data(), str.length() * sizeof(String::value_type));
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
/* --------------------------------------------------------------------------------------------
|
|
|
|
* The managed encoder state.
|
|
|
|
*/
|
|
|
|
T m_Encoder;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // Namespace:: SqMod
|