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