Using memcpy to copy bytes instead of hard-coded loops. Allows compilers
to apply more magic
This commit is contained in:
parent
f6225c0baa
commit
486eed4875
@ -377,7 +377,8 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned FlushEntriesWithSameFileIndexToBuffer( std::vector<GridEntry> &vectorWithSameFileIndex, std::vector<char> & tmpBuffer, const unsigned long index) {
|
unsigned FlushEntriesWithSameFileIndexToBuffer( std::vector<GridEntry> &vectorWithSameFileIndex, std::vector<char> & tmpBuffer, const unsigned long index) {
|
||||||
tmpBuffer.resize(tmpBuffer.size()+(sizeof(_GridEdge)*vectorWithSameFileIndex.size()) + sizeof(unsigned) );
|
const unsigned lengthOfBucket = vectorWithSameFileIndex.size();
|
||||||
|
tmpBuffer.resize(tmpBuffer.size()+(sizeof(_GridEdge)*lengthOfBucket) + sizeof(unsigned) );
|
||||||
unsigned counter = 0;
|
unsigned counter = 0;
|
||||||
|
|
||||||
for(unsigned i = 0; i < vectorWithSameFileIndex.size()-1; ++i) {
|
for(unsigned i = 0; i < vectorWithSameFileIndex.size()-1; ++i) {
|
||||||
@ -385,22 +386,14 @@ private:
|
|||||||
assert( vectorWithSameFileIndex[i].ramIndex == vectorWithSameFileIndex[i+1].ramIndex );
|
assert( vectorWithSameFileIndex[i].ramIndex == vectorWithSameFileIndex[i+1].ramIndex );
|
||||||
}
|
}
|
||||||
|
|
||||||
sort( vectorWithSameFileIndex.begin(), vectorWithSameFileIndex.end() );
|
|
||||||
vectorWithSameFileIndex.erase(unique(vectorWithSameFileIndex.begin(), vectorWithSameFileIndex.end()), vectorWithSameFileIndex.end());
|
|
||||||
|
|
||||||
//write length of bucket
|
//write length of bucket
|
||||||
unsigned lengthOfBucket = vectorWithSameFileIndex.size();
|
memcpy((char*)&(tmpBuffer[index+counter]), (char *)&lengthOfBucket, sizeof(lengthOfBucket));
|
||||||
for(unsigned i = 0; i < sizeof(unsigned); ++i) {
|
counter += sizeof(lengthOfBucket);
|
||||||
tmpBuffer[index+counter] = ((char *)&lengthOfBucket)[i];
|
|
||||||
++counter;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOST_FOREACH(const GridEntry & entry, vectorWithSameFileIndex) {
|
BOOST_FOREACH(const GridEntry & entry, vectorWithSameFileIndex) {
|
||||||
char * data = (char *)&(entry.edge);
|
char * data = (char *)&(entry.edge);
|
||||||
for(unsigned i = 0; i < sizeof(_GridEdge); ++i) {
|
memcpy((char*)&(tmpBuffer[index+counter]), data, sizeof(entry.edge));
|
||||||
tmpBuffer[index+counter] = data[i];
|
counter += sizeof(entry.edge);
|
||||||
++counter;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//Freeing data
|
//Freeing data
|
||||||
vectorWithSameFileIndex.clear();
|
vectorWithSameFileIndex.clear();
|
||||||
|
Loading…
Reference in New Issue
Block a user