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