Mercurial > dedupe
view BitDecoder.cpp @ 27:95a10553ff90
Optimize BitDecoder, and refactor functions that are not timecritical
out of header.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Thu, 06 Sep 2012 18:20:11 +0200 |
| parents | |
| children | 41cc0d8ac77f |
line wrap: on
line source
#include "BitDecoder.hpp" BitDecoder::BitDecoder(BitDecoder* low_in, BitDecoder* high_in) : low(low_in), high(high_in) { } BitDecoder::BitDecoder(const QString& d) : low(0), high(0), _data(d) { } BitDecoder::~BitDecoder() { delete low; delete high; } const QString& BitDecoder::data() const { return _data; } BitDecoder* BitDecoder::merge(BitDecoder* low, BitDecoder* high) { return new BitDecoder(low, high); } /* QBitArray BitDecoder::unite(const QBitArray& first, const QBitArray& second) { QBitArray result(first.size() + second.size()); int n = first.size(); for (int i = 0; i < n; ++i) { result[i] = first[i]; } for (int i = 0; i < second.size(); ++i) { result[n + i] = second[i]; } return result; } */ QMap<QString, QBitArray> BitDecoder::createEncoder() const { QMap<QString, QBitArray> retVal; if (!_data.isNull()) { retVal.insert(_data, QBitArray()); } if (low) { QMap<QString, QBitArray> vals = low->createEncoder(); for(QMap<QString, QBitArray>::const_iterator it = vals.begin(); it != vals.end(); ++it) { retVal.insert(it.key(), unite(QBitArray(1, false), it.value())); } } if (high) { QMap<QString, QBitArray> vals = high->createEncoder(); for(QMap<QString, QBitArray>::const_iterator it = vals.begin(); it != vals.end(); ++it) { retVal.insert(it.key(), unite(QBitArray(1, true), it.value())); } } return retVal; }
