Public Member Functions | |
| Hash32 () | |
| Hash32 (void *data, uint64__ length) | |
| void | GenerateHash (void *data, uint64__ length) |
| void | HashMultiplyFileInfo (Dedupe::FileStream &stream) |
| void | AddToHash (void *data, uint64__ length) |
| uint32__ | GetHash () |
| void | Display () |
| bool | operator== (const Hash32 &h1) const |
| bool | operator!= (const Hash32 &h1) const |
Static Public Member Functions | |
| static uint32__ | GetHash (void *data, uint64__ length) |
Definition at line 21 of file hash.h.
| Hash32::Hash32 | ( | void | ) |
| Hash32::Hash32 | ( | void * | data, | |
| uint64__ | length | |||
| ) |
Initiate the class and generate a hash out of the data
| data | The datafield providing the binary data to generate the hash. | |
| length | The length of the datafield. |
Definition at line 15 of file hash32.cpp.
{
hash = OFFSET_BASIS32; //Initialise
uint64__ i = 0;
char *data2 = static_cast<char*>(data);
hashvar *longdata = static_cast<hashvar*>(data);
if((length % sizeof(hashvar)) != 0) //If the length isn't dividable by the size of the hashvar, hash the single bytes until it is easy hashable
{
for(; i < (length % sizeof(hashvar)); i++)
{
hash = (hash ^ *(data2++)) * MAGIC32; //hashen
}
}
longdata += (length % sizeof(hashvar));
for(; i < length; i+=sizeof(hashvar))
{
hash = (hash ^ *(longdata++)) * MAGIC32; //Hash the rest
}
}
| void Hash32::AddToHash | ( | void * | data, | |
| uint64__ | length | |||
| ) |
The function add data to the Hash. Reqiers a initiated class and a genrated hash.
| data | The datafield providing the binary data to generate the hash. | |
| length | The length of the datafield. |
Definition at line 55 of file hash32.cpp.
Referenced by Dedupe::Hash::Hash64::HashMultiplyFileInfo(), and HashMultiplyFileInfo().
{
if(hash == 0)
{
return;
}
uint64__ i = 0;
char *data2 = static_cast<char*>(data);
hashvar *longdata = static_cast<hashvar*>(data);
if((length % sizeof(hashvar)) != 0)
{
for(; i < (length % sizeof(hashvar)); i++)
{
hash = (hash ^ *data2++) * MAGIC32;
}
}
longdata += (data2 - static_cast<char*>(data));
for(; i < length; i+=sizeof(hashvar))
{
hash = (hash ^ *longdata++) * MAGIC32;
}
}
| void Hash32::Display | ( | ) |
Displays the Hash in the console.
Definition at line 78 of file hash32.cpp.
{
if(this->hash == 0)
{
cout << "Empty Hash" << endl;
return;
}
cout << "Hash: " << hex << hash << endl;
}
| void Hash32::GenerateHash | ( | void * | data, | |
| uint64__ | length | |||
| ) |
Generates out of the data a new Hash. The function overrides the old hash.
| data | The datafield providing the binary data to generate the hash. | |
| length | The length of the datafield. |
Definition at line 35 of file hash32.cpp.
{
hash = OFFSET_BASIS32;
uint64__ i = 0;
char *data2 = static_cast<char*>(data);
hashvar *longdata = static_cast<hashvar*>(data);
if((length % sizeof(hashvar)) != 0)
{
for(; i < (length % sizeof(hashvar)); i++)
{
hash = (hash ^ *(data2++)) * MAGIC32;
}
}
longdata += (length % sizeof(hashvar));
for(; i < length; i+=sizeof(hashvar))
{
hash = (hash ^ *(longdata++)) * MAGIC32;
}
}
| uint32__ Hash32::GetHash | ( | void * | data, | |
| uint64__ | length | |||
| ) | [static] |
Generates out of the data a new Hash and returns it
| data | The datafield providing the binary data to generate the hash. | |
| length | The length of the datafield. |
Definition at line 88 of file hash32.cpp.
Referenced by Dedupe::Hash::Hash64::HashMultiplyFileInfo(), and HashMultiplyFileInfo().
{
hashvar nHash = OFFSET_BASIS32;
uint64__ i = 0;
char *data2 = static_cast<char*>(data);
hashvar *longdata = static_cast<hashvar*>(data);
if((length % sizeof(hashvar)) != 0)
{
for(; i < (length % sizeof(hashvar)); i++)
{
nHash = (nHash ^ *(data2++)) * MAGIC32;
}
}
longdata += (length % sizeof(hashvar));
for(; i < length; i+=sizeof(hashvar))
{
nHash = (nHash ^ *(longdata++)) * MAGIC32;
}
return nHash;
}
| uint32__ Dedupe::Hash::Hash32::GetHash | ( | ) | [inline] |
| void Hash32::HashMultiplyFileInfo | ( | Dedupe::FileStream & | stream | ) |
Generats for all given FileInfo objects the hash
| stream | A pointer to the filestream with the FileInfo objects |
Definition at line 109 of file hash32.cpp.
References AddToHash(), and GetHash().
{
Dedupe::FileStream::iterator it;
ifstream *file = new ifstream();
char *data = new char[104857600];
unsigned long long int length = 0;
for(it = stream.begin(); it < stream.end(); it++)
{
file->open(it->GetPath().c_str(), ifstream::in);
file->seekg(0, ios::end);
length = file->tellg();
file->seekg(0, ios::beg);
file->read(data, (104857600 > length)?(length):(104857600));
Hash32 hash(data, (104857600 > length)?(length):(104857600));
length -= (104857600 > length)?(length):(104857600);
while(file->good() && length > 0)
{
file->read(data, (104857600 > length)?(length):(104857600));
hash.AddToHash(data, (104857600 > length)?(length):(104857600));
length -= 104857600;
}
file->close();
it->SetHash( hash.GetHash() );
}
delete file;
delete data;
}
1.7.1