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; }