@@ -31,7 +31,7 @@ typedef std::map<std::string, TDefByEvt> TDefByFile;
31
31
typedef std::map<std::string, TDefByFile> TDefByChecker;
32
32
33
33
struct DefLookup ::Private {
34
- TDefByChecker stor ;
34
+ TDefByChecker byChecker ;
35
35
bool usePartialResults;
36
36
};
37
37
@@ -63,61 +63,65 @@ DefLookup::~DefLookup()
63
63
64
64
void DefLookup::hashDefect (const Defect &def)
65
65
{
66
- TDefByFile &row = d->stor [def.checker ];
66
+ // categorize by checker
67
+ TDefByFile &byPath = d->byChecker [def.checker ];
67
68
69
+ // categorize by path
68
70
const DefEvent &evt = def.events [def.keyEventIdx ];
69
71
const MsgFilter &filter = MsgFilter::inst ();
70
- TDefByEvt &col = row[filter.filterPath (evt.fileName )];
71
- TDefByMsg &zCol = col[evt.event ];
72
- TDefList &cell = zCol[filter.filterMsg (evt.msg , def.checker )];
72
+ TDefByEvt &byEvt = byPath[filter.filterPath (evt.fileName )];
73
73
74
- cell.push_back (def);
74
+ // categorize by key event and msg
75
+ TDefByMsg &byMsg = byEvt[evt.event ];
76
+ TDefList &defList = byMsg[filter.filterMsg (evt.msg , def.checker )];
77
+
78
+ defList.push_back (def);
75
79
}
76
80
77
81
bool DefLookup::lookup (const Defect &def)
78
82
{
79
83
// look for defect class
80
- TDefByChecker::iterator iRow = d->stor .find (def.checker );
81
- if (d->stor .end () == iRow )
84
+ TDefByChecker::iterator itByChecker = d->byChecker .find (def.checker );
85
+ if (d->byChecker .end () == itByChecker )
82
86
return false ;
83
87
84
88
// simplify path
85
89
const MsgFilter &filter = MsgFilter::inst ();
86
90
const DefEvent &evt = def.events [def.keyEventIdx ];
87
- const std::string path ( filter.filterPath (evt.fileName ) );
91
+ const std::string path = filter.filterPath (evt.fileName );
88
92
89
93
// look for file name
90
- TDefByFile &row = iRow ->second ;
91
- TDefByFile::iterator iCol = row .find (path);
92
- if (row .end () == iCol )
94
+ TDefByFile &byPath = itByChecker ->second ;
95
+ TDefByFile::iterator itByPath = byPath .find (path);
96
+ if (byPath .end () == itByPath )
93
97
return false ;
94
98
95
- TDefByEvt &col = iCol ->second ;
96
- if (!d->usePartialResults && col .end () != col .find (" internal warning" ))
99
+ TDefByEvt &byEvt = itByPath ->second ;
100
+ if (!d->usePartialResults && byEvt .end () != byEvt .find (" internal warning" ))
97
101
// if the analyzer produced an "internal warning" diagnostic message,
98
102
// we assume partial results, which cannot be reliably used for
99
103
// differential scan ==> pretend we found what we had been looking
100
104
// for, but do not remove anything from the store
101
105
return true ;
102
106
103
107
// look by key event
104
- TDefByEvt::iterator iZCol = col .find (evt.event );
105
- if (col .end () == iZCol )
108
+ TDefByEvt::iterator itByEvent = byEvt .find (evt.event );
109
+ if (byEvt .end () == itByEvent )
106
110
return false ;
107
111
108
112
// look by msg
109
- TDefByMsg &zCol = iZCol ->second ;
110
- TDefByMsg::iterator iCell = zCol. find (
111
- filter. filterMsg (evt. msg , def. checker ) );
112
- if (zCol .end () == iCell )
113
+ TDefByMsg &byMsg = itByEvent ->second ;
114
+ const std::string msg = filter. filterMsg (evt. msg , def. checker );
115
+ TDefByMsg::iterator itByMsg = byMsg. find ( msg);
116
+ if (byMsg .end () == itByMsg )
113
117
return false ;
114
118
115
119
// FIXME: nasty over-approximation
116
- TDefList &defs = iCell ->second ;
117
- unsigned cnt = defs .size ();
120
+ TDefList &defList = itByMsg ->second ;
121
+ unsigned cnt = defList .size ();
118
122
if (cnt)
119
123
// just remove an arbitrary one
120
- defs .resize (cnt - 1 );
124
+ defList .resize (cnt - 1 );
121
125
else
122
126
return false ;
123
127
0 commit comments