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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
/*
enumdefinition.cpp
This file is part of GammaRay, the Qt application inspection and manipulation tool.
SPDX-FileCopyrightText: 2016 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Volker Krause <volker.krause@kdab.com>
SPDX-License-Identifier: GPL-2.0-or-later
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include "enumdefinition.h"
using namespace GammaRay;
EnumDefinitionElement::EnumDefinitionElement(int value, const char *name)
: m_value(value)
, m_name(name)
{
}
QByteArray EnumDefinitionElement::name() const
{
return m_name;
}
int EnumDefinitionElement::value() const
{
return m_value;
}
namespace GammaRay {
QDataStream &operator<<(QDataStream &out, const EnumDefinitionElement &elem)
{
out << elem.m_value << elem.m_name;
return out;
}
QDataStream &operator>>(QDataStream &in, EnumDefinitionElement &elem)
{
in >> elem.m_value >> elem.m_name;
return in;
}
}
EnumDefinition::EnumDefinition(EnumId id, const QByteArray &name)
: m_id(id)
, m_name(name)
{
}
bool EnumDefinition::isValid() const
{
return m_id != InvalidEnumId && !m_name.isEmpty() && !m_elements.isEmpty();
}
EnumId EnumDefinition::id() const
{
return m_id;
}
QByteArray EnumDefinition::name() const
{
return m_name;
}
bool EnumDefinition::isFlag() const
{
return m_isFlag;
}
void EnumDefinition::setIsFlag(bool isFlag)
{
m_isFlag = isFlag;
}
const QVector<EnumDefinitionElement> &EnumDefinition::elements() const
{
return m_elements;
}
void EnumDefinition::setElements(const QVector<EnumDefinitionElement> &elements)
{
m_elements = elements;
}
QByteArray EnumDefinition::valueToString(const EnumValue &value) const
{
Q_ASSERT(value.id() == id());
if (isFlag()) {
QByteArray r;
int handledFlags = 0;
for (const auto &elem : m_elements) {
if ((elem.value() & value.value()) == elem.value() && elem.value() != 0) {
r += elem.name() + '|';
handledFlags |= elem.value();
}
}
if (value.value() & ~handledFlags)
r += "flag 0x" + QByteArray::number(value.value() & ~handledFlags, 16) + '|';
if (!r.isEmpty()) {
r.chop(1);
} else {
// check for dedicated 0-values
Q_ASSERT(value.value() == 0);
for (const auto &elem : m_elements) {
if (elem.value() == 0)
return elem.name();
}
return "<none>";
}
return r;
} else {
for (const auto &elem : m_elements) {
if (elem.value() == value.value())
return elem.name();
}
return "unknown (" + QByteArray::number(value.value()) + ')';
}
}
namespace GammaRay {
QDataStream &operator<<(QDataStream &out, const EnumDefinition &def)
{
out << def.m_id << def.m_isFlag << def.m_name << def.m_elements;
return out;
}
QDataStream &operator>>(QDataStream &in, EnumDefinition &def)
{
in >> def.m_id >> def.m_isFlag >> def.m_name >> def.m_elements;
return in;
}
}
|