File: enums.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 (99 lines) | stat: -rw-r--r-- 3,828 bytes parent folder | download | duplicates (2)
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
#include "enums.h"

#include <QDataStream>

ElementType Enums::nextElmType(ElementType type)
{
    switch (type) {
        // Not and Node
        case ElementType::Not:         return ElementType::Node;
        case ElementType::Node:        return ElementType::Not;

        // Gates
        case ElementType::And:         return ElementType::Or;
        case ElementType::Or:          return ElementType::Nand;
        case ElementType::Nand:        return ElementType::Nor;
        case ElementType::Nor:         return ElementType::Xor;
        case ElementType::Xor:         return ElementType::Xnor;
        case ElementType::Xnor:        return ElementType::And;

        // StaticInput and Input
        case ElementType::InputVcc:    return ElementType::InputGnd;
        case ElementType::InputGnd:    return ElementType::InputButton;
        case ElementType::InputButton: return ElementType::InputSwitch;
        case ElementType::InputSwitch: return ElementType::InputRotary;
        case ElementType::InputRotary: return ElementType::Clock;
        case ElementType::Clock:       return ElementType::InputVcc;

        // FipFlops
        case ElementType::DFlipFlop:   return ElementType::TFlipFlop;
        case ElementType::TFlipFlop:   return ElementType::DFlipFlop;

        case ElementType::JKFlipFlop:  return ElementType::SRFlipFlop;
        case ElementType::SRFlipFlop:  return ElementType::JKFlipFlop;

        // Output
        case ElementType::Led:         return ElementType::Buzzer;
        case ElementType::Buzzer:      return ElementType::AudioBox;
        case ElementType::AudioBox:    return ElementType::Led;

        default:                       return ElementType::Unknown;
    }
}

ElementType Enums::prevElmType(ElementType type)
{
    switch (type) {
        // Not and Node
        case ElementType::Not:         return ElementType::Node;
        case ElementType::Node:        return ElementType::Not;

        // Gates
        case ElementType::And:         return ElementType::Xnor;
        case ElementType::Xnor:        return ElementType::Xor;
        case ElementType::Xor:         return ElementType::Nor;
        case ElementType::Nor:         return ElementType::Nand;
        case ElementType::Nand:        return ElementType::Or;
        case ElementType::Or:          return ElementType::And;

        // StaticInput and Input
        case ElementType::InputVcc:    return ElementType::Clock;
        case ElementType::Clock:       return ElementType::InputRotary;
        case ElementType::InputRotary: return ElementType::InputSwitch;
        case ElementType::InputSwitch: return ElementType::InputButton;
        case ElementType::InputButton: return ElementType::InputGnd;
        case ElementType::InputGnd:    return ElementType::InputVcc;

        // FipFlops
        case ElementType::DFlipFlop:   return ElementType::TFlipFlop;
        case ElementType::TFlipFlop:   return ElementType::DFlipFlop;

        case ElementType::JKFlipFlop:  return ElementType::SRFlipFlop;
        case ElementType::SRFlipFlop:  return ElementType::JKFlipFlop;

        // Output
        case ElementType::Led:         return ElementType::AudioBox;
        case ElementType::AudioBox:    return ElementType::Buzzer;
        case ElementType::Buzzer:      return ElementType::Led;

        default:                       return ElementType::Unknown;
    }
}

ElementType &operator++(ElementType &type)
{
    return type = static_cast<ElementType>(static_cast<int>(type) + 1);
}

QDataStream &operator>>(QDataStream &stream, ElementType &type)
{
    quint64 temp; stream >> temp;
    type = static_cast<ElementType>(temp);
    return stream;
}

QDataStream &operator<<(QDataStream &stream, const ElementType &type)
{
    stream << static_cast<quint64>(type);
    return stream;
}