1 /**
2  * UGENE - Integrated Bioinformatics Tools.
3  * Copyright (C) 2008-2021 UniPro <ugene@unipro.ru>
4  * http://ugene.net
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301, USA.
20  */
21 
22 #include "BaseBreakpointHitCounter.h"
23 
24 #include "BreakpointEqualHitCounter.h"
25 #include "BreakpointGreaterOrEqualHitCounter.h"
26 #include "BreakpointMultipleHitCounter.h"
27 
28 const quint32 DEFAULT_HIT_COUNT_PARAMETER = 1;
29 const quint32 HIT_COUNTER_INITIAL_VALUE = 0;
30 
31 namespace U2 {
32 
BaseBreakpointHitCounter(BreakpointHitCountCondition initCondition)33 BaseBreakpointHitCounter::BaseBreakpointHitCounter(BreakpointHitCountCondition initCondition)
34     : condition(initCondition), hitCount(HIT_COUNTER_INITIAL_VALUE) {
35 }
36 
~BaseBreakpointHitCounter()37 BaseBreakpointHitCounter::~BaseBreakpointHitCounter() {
38 }
39 
getCondition() const40 BreakpointHitCountCondition BaseBreakpointHitCounter::getCondition() const {
41     return condition;
42 }
43 
hit()44 bool BaseBreakpointHitCounter::hit() {
45     ++hitCount;
46     return true;
47 }
48 
getHitCount() const49 quint32 BaseBreakpointHitCounter::getHitCount() const {
50     return hitCount;
51 }
52 
setHitCountParameter(quint32 newParameter)53 void BaseBreakpointHitCounter::setHitCountParameter(quint32 newParameter) {
54     Q_UNUSED(newParameter);
55 }
56 
getHitCountParameter() const57 quint32 BaseBreakpointHitCounter::getHitCountParameter() const {
58     return DEFAULT_HIT_COUNT_PARAMETER;
59 }
60 
reset()61 void BaseBreakpointHitCounter::reset() {
62     hitCount = HIT_COUNTER_INITIAL_VALUE;
63 }
64 
createInstance(BreakpointHitCountCondition kindOfCondition,const QVariant & hitCounterParameter)65 BaseBreakpointHitCounter *BaseBreakpointHitCounter::createInstance(
66     BreakpointHitCountCondition kindOfCondition,
67     const QVariant &hitCounterParameter) {
68     BaseBreakpointHitCounter *result = nullptr;
69     bool conversionResult = true;
70     switch (kindOfCondition) {
71         case ALWAYS:
72             result = new BaseBreakpointHitCounter(kindOfCondition);
73             break;
74         case HIT_COUNT_EQUAL:
75             result = new BreakpointEqualHitCounter(kindOfCondition,
76                                                    hitCounterParameter.toUInt(&conversionResult));
77             break;
78         case HIT_COUNT_MULTIPLE:
79             result = new BreakpointMultipleHitCounter(kindOfCondition,
80                                                       hitCounterParameter.toUInt(&conversionResult));
81             break;
82         case HIT_COUNT_GREATER_OR_EQUAL:
83             result = new BreakpointGreaterOrEqualHitCounter(kindOfCondition,
84                                                             hitCounterParameter.toUInt(&conversionResult));
85             break;
86         default:
87             Q_ASSERT(false);
88     }
89     Q_ASSERT(nullptr != result);
90     Q_ASSERT(conversionResult);
91 
92     return result;
93 }
94 
95 }  // namespace U2
96