File: logictruthtable.cpp

package info (click to toggle)
wiredpanda 4.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 16,560 kB
  • sloc: cpp: 16,024; sh: 232; ansic: 52; xml: 8; makefile: 5; javascript: 1
file content (28 lines) | stat: -rw-r--r-- 1,002 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Copyright 2015 - 2025, GIBIS-UNIFESP and the wiRedPanda contributors
// SPDX-License-Identifier: GPL-3.0-or-later

#include "logictruthtable.h"

LogicTruthTable::LogicTruthTable(const int inputSize, const int outputSize, const QBitArray &key)
    : LogicElement(inputSize, outputSize)
{
    m_proposition = key;
    m_nOutputs = outputSize;
}

void LogicTruthTable::updateLogic()
{
    if (!updateInputs()) {
        return;
    }

    for (int i = 0; i < this->m_nOutputs; ++i) {
        const auto pos = std::accumulate(m_inputValues.cbegin(), m_inputValues.cend(), QString(""),
                                         [](QString acc, bool b) {
                                             acc += (b == 1) ? '1' : '0';
                                             return acc;
                                         }).toUInt(nullptr, 2);
        const bool result = m_proposition.at(static_cast<std::size_t>(256 * i) + static_cast<std::size_t>(pos));
        setOutputValue(i, result);
    }
}