MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TestOrd.hpp
1 /*
2  Copyright (C) 2003, 2005, 2006 MySQL AB
3  All rights reserved. Use is subject to license terms.
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; version 2 of the License.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18 
19 #ifndef TEST_ORD_H
20 #define TEST_ORD_H
21 
22 #include "SignalData.hpp"
23 
30 class TestOrd {
31  friend class Ndb;
32  friend class Cmvmi;
33  friend class MgmtSrvr;
34 public:
35 
36  enum Command {
37  KeepUnchanged = 0,
38  On = 1,
39  Off = 2,
40  Toggle = 3,
41  COMMAND_MASK = 3
42  };
43 
44  enum SignalLoggerSpecification {
45  InputSignals = 1,
46  OutputSignals = 2,
47  InputOutputSignals = 3,
48  LOG_MASK = 3
49  };
50 
51  enum TraceSpecification {
52  TraceALL = 0,
53  TraceAPI = 1,
54  TraceGlobalCheckpoint = 2,
55  TraceLocalCheckpoint = 4,
56  TraceDisconnect = 8,
57  TRACE_MASK = 15
58  };
59 
60 private:
61  STATIC_CONST( SignalLength = 25 );
62 
66  void clear();
67 
71  void setTestCommand(Command);
72  void getTestCommand(Command&) const;
73 
77  void setTraceCommand(Command, TraceSpecification);
78 
82  void getTraceCommand(Command&, TraceSpecification&) const;
83 
90  UintR getNoOfSignalLoggerCommands() const;
91 
95  void addSignalLoggerCommand(BlockNumber, Command, SignalLoggerSpecification);
96 
103  void addSignalLoggerCommand(Command, SignalLoggerSpecification);
104 
108  void getSignalLoggerCommand(int no, BlockNumber&, Command&, SignalLoggerSpecification&) const;
109 
110  UintR testCommand; // DATA 0
111  UintR traceCommand; // DATA 1
112  UintR noOfSignalLoggerCommands; // DATA 2
113  UintR signalLoggerCommands[22]; // DATA 3 - 25
114 };
115 
116 #define COMMAND_SHIFT (0)
117 #define TRACE_SHIFT (2)
118 #define LOG_SHIFT (2)
119 
120 #define BLOCK_NO_SHIFT (16)
121 #define BLOCK_NO_MASK 65535
122 
126 inline
127 void
128 TestOrd::clear(){
129  setTestCommand(KeepUnchanged);
130  setTraceCommand(KeepUnchanged, TraceAPI); //
131  noOfSignalLoggerCommands = 0;
132 }
133 
137 inline
138 void
139 TestOrd::setTestCommand(Command cmd){
140  ASSERT_RANGE(cmd, 0, COMMAND_MASK, "TestOrd::setTestCommand");
141  testCommand = cmd;
142 }
143 
144 inline
145 void
146 TestOrd::getTestCommand(Command & cmd) const{
147  cmd = (Command)(testCommand >> COMMAND_SHIFT);
148 }
149 
153 inline
154 void
155 TestOrd::setTraceCommand(Command cmd, TraceSpecification spec){
156  ASSERT_RANGE(cmd, 0, COMMAND_MASK, "TestOrd::setTraceCommand");
157  ASSERT_RANGE(spec, 0, TRACE_MASK, "TestOrd::setTraceCommand");
158  traceCommand = (cmd << COMMAND_SHIFT) | (spec << TRACE_SHIFT);
159 }
160 
164 inline
165 void
166 TestOrd::getTraceCommand(Command & cmd, TraceSpecification & spec) const{
167  cmd = (Command)((traceCommand >> COMMAND_SHIFT) & COMMAND_MASK);
168  spec = (TraceSpecification)((traceCommand >> TRACE_SHIFT) & TRACE_MASK);
169 }
170 
177 inline
178 UintR
179 TestOrd::getNoOfSignalLoggerCommands() const{
180  return noOfSignalLoggerCommands;
181 }
182 
186 inline
187 void
188 TestOrd::addSignalLoggerCommand(BlockNumber bnr,
189  Command cmd, SignalLoggerSpecification spec){
190  ASSERT_RANGE(cmd, 0, COMMAND_MASK, "TestOrd::addSignalLoggerCommand");
191  ASSERT_RANGE(spec, 0, LOG_MASK, "TestOrd::addSignalLoggerCommand");
192  //ASSERT_MAX(bnr, BLOCK_NO_MASK, "TestOrd::addSignalLoggerCommand");
193 
194  signalLoggerCommands[noOfSignalLoggerCommands] =
195  (bnr << BLOCK_NO_SHIFT) | (cmd << COMMAND_SHIFT) | (spec << LOG_SHIFT);
196  noOfSignalLoggerCommands ++;
197 }
198 
205 inline
206 void
207 TestOrd::addSignalLoggerCommand(Command cmd, SignalLoggerSpecification spec){
208  ASSERT_RANGE(cmd, 0, COMMAND_MASK, "TestOrd::addSignalLoggerCommand");
209  ASSERT_RANGE(spec, 0, LOG_MASK, "TestOrd::addSignalLoggerCommand");
210 
211  noOfSignalLoggerCommands = ~0;
212  signalLoggerCommands[0] = (cmd << COMMAND_SHIFT) | (spec << LOG_SHIFT);
213 }
214 
218 inline
219 void
220 TestOrd::getSignalLoggerCommand(int no, BlockNumber & bnr,
221  Command & cmd,
222  SignalLoggerSpecification & spec) const{
223  bnr = (BlockNumber)((signalLoggerCommands[no] >> BLOCK_NO_SHIFT)
224  & BLOCK_NO_MASK);
225  cmd = (Command)((signalLoggerCommands[no] >> COMMAND_SHIFT)
226  & COMMAND_MASK);
227  spec = (SignalLoggerSpecification)((signalLoggerCommands[no] >> LOG_SHIFT)
228  & LOG_MASK);
229 }
230 
231 #endif