FsOpenReq.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef FS_OPEN_REQ_H
  14. #define FS_OPEN_REQ_H
  15. #include "SignalData.hpp"
  16. /**
  17.  * 
  18.  * SENDER:  
  19.  * RECIVER: Ndbfs
  20.  */
  21. class FsOpenReq {
  22.   /**
  23.    * Reciver(s)
  24.    */
  25.   friend class Ndbfs;         // Reciver
  26.   friend class AsyncFile;     // Uses FsOpenReq to decode file open flags
  27.   friend class Filename;
  28.   friend class VoidFs;
  29.   /**
  30.    * Sender(s)
  31.    */
  32.   friend class Backup;
  33.   friend class Dbdict;
  34.   friend class Ndbcntr;       // For initial start...
  35.   friend class Dbdih;
  36.   /**
  37.    * For printing
  38.    */
  39.   friend bool printFSOPENREQ(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo);
  40. public:
  41.   /**
  42.    * Length of signal
  43.    */
  44.   STATIC_CONST( SignalLength = 7 );
  45. private:
  46.   /**
  47.    * DATA VARIABLES
  48.    */
  49.   UintR userReference;        // DATA 0
  50.   UintR userPointer;          // DATA 1
  51.   UintR fileNumber[4];        // DATA 2 - 5
  52.   UintR fileFlags;            // DATA 6
  53.   STATIC_CONST( OM_READONLY  = 0 );
  54.   STATIC_CONST( OM_WRITEONLY = 1 );
  55.   STATIC_CONST( OM_READWRITE = 2 );
  56.   STATIC_CONST( OM_APPEND    = 0x8   ); // Not Implemented on W2k
  57.   STATIC_CONST( OM_SYNC      = 0x10  );
  58.   STATIC_CONST( OM_CREATE    = 0x100 );
  59.   STATIC_CONST( OM_TRUNCATE  = 0x200 );
  60.   enum Suffixes {
  61.     S_DATA = 0,
  62.     S_FRAGLOG = 1,
  63.     S_LOGLOG = 2,
  64.     S_FRAGLIST = 3,
  65.     S_TABLELIST = 4,
  66.     S_SCHEMALOG = 5,
  67.     S_SYSFILE = 6,
  68.     S_LOG = 7,
  69.     S_CTL = 8
  70.   };
  71.   
  72.   static Uint32 getVersion(const Uint32 fileNumber[]);
  73.   static Uint32 getSuffix(const Uint32 fileNumber[]);
  74.   static void setVersion(Uint32 fileNumber[], Uint8 val);
  75.   static void setSuffix(Uint32 fileNumber[], Uint8 val);
  76.   
  77.   /**
  78.    * V1
  79.    */
  80.   static Uint32 v1_getDisk(const Uint32 fileNumber[]);
  81.   static Uint32 v1_getTable(const Uint32 fileNumber[]);
  82.   static Uint32 v1_getFragment(const Uint32 fileNumber[]);
  83.   static Uint32 v1_getS(const Uint32 fileNumber[]);
  84.   static Uint32 v1_getP(const Uint32 fileNumber[]);
  85.   static void v1_setDisk(Uint32 fileNumber[], Uint8 val);
  86.   static void v1_setTable(Uint32 fileNumber[], Uint32 val);
  87.   static void v1_setFragment(Uint32 fileNumber[], Uint32 val);
  88.   static void v1_setS(Uint32 fileNumber[], Uint32 val);
  89.   static void v1_setP(Uint32 fileNumber[], Uint8 val);
  90.   /**
  91.    * V2 - Backup
  92.    */
  93.   static Uint32 v2_getSequence(const Uint32 fileNumber[]);
  94.   static Uint32 v2_getNodeId(const Uint32 fileNumber[]);
  95.   static Uint32 v2_getCount(const Uint32 fileNumber[]);
  96.   static void v2_setSequence(Uint32 fileNumber[], Uint32 no);
  97.   static void v2_setNodeId(Uint32 fileNumber[], Uint32 no);
  98.   static void v2_setCount(Uint32 fileNumber[], Uint32 no);
  99. };
  100. /**
  101.  * File flags (set according to solaris standard)
  102.  *
  103.  o = Open mode                -  2 Bits -> max 3
  104.  c = create new file          -  1 Bit 
  105.  t = truncate existing        -  1 Bit
  106.            1111111111222222222233
  107.  01234567890123456789012345678901
  108.  oo      ct
  109. */
  110. /**
  111.  * -- v1 --
  112.  * File number[0] = Table
  113.  * File number[1] = Fragment
  114.  * File number[2] = S-value
  115.  * File number[3] =
  116.  *   p = v1_P       0 - 7
  117.  *   d = v1_disk    8 - 15
  118.  *   s = v1_suffix 16 - 23
  119.  *   v = version   24 - 31
  120.  * 
  121.  *           1111111111222222222233
  122.  * 01234567890123456789012345678901
  123.  * ppppppppddddddddssssssssvvvvvvvv
  124.  *
  125.  * -- v2 --
  126.  * File number[0] = Backup Sequence Number
  127.  * File number[1] = Node Id
  128.  * File number[3] =
  129.  *   v = version   24 - 31
  130.  *   s = v1_suffix 16 - 23
  131.  * 
  132.  *           1111111111222222222233
  133.  * 01234567890123456789012345678901
  134.  * ppppppppddddddddssssssssvvvvvvvv
  135.  *
  136.  */ 
  137. inline 
  138. Uint32 FsOpenReq::getVersion(const Uint32 fileNumber[]){
  139.   return (fileNumber[3] >> 24) & 0xff;
  140. }
  141. inline
  142. void FsOpenReq::setVersion(Uint32 fileNumber[], Uint8 val){
  143.   const Uint32 t = fileNumber[3];
  144.   fileNumber[3] = t & 0x00FFFFFF | (((Uint32)val) << 24);
  145. }
  146. inline 
  147. Uint32 FsOpenReq::getSuffix(const Uint32 fileNumber[]){
  148.   return (fileNumber[3] >> 16)& 0xff;
  149. }
  150. inline
  151. void FsOpenReq::setSuffix(Uint32 fileNumber[], Uint8 val){
  152.   const Uint32 t = fileNumber[3];
  153.   fileNumber[3] = t & 0xFF00FFFF | (((Uint32)val) << 16);
  154. }
  155. inline 
  156. Uint32 FsOpenReq::v1_getDisk(const Uint32 fileNumber[]){
  157.   return  (fileNumber[3]>>8) & 0xff;
  158. }
  159. inline
  160. void FsOpenReq::v1_setDisk(Uint32 fileNumber[], Uint8 val){
  161.   const Uint32 t = fileNumber[3];
  162.   fileNumber[3] = t & 0xFFFF00FF | (((Uint32)val) << 8);
  163. }
  164. inline 
  165. Uint32 FsOpenReq::v1_getTable(const Uint32 fileNumber[]){
  166.   return fileNumber[0];
  167. }
  168. inline
  169. void FsOpenReq::v1_setTable(Uint32 fileNumber[], Uint32 val){
  170.   fileNumber[0] = val;
  171. }
  172. inline 
  173. Uint32 FsOpenReq::v1_getFragment(const Uint32 fileNumber[]){
  174.   return fileNumber[1];
  175. }
  176. inline
  177. void FsOpenReq::v1_setFragment(Uint32 fileNumber[], Uint32 val){
  178.   fileNumber[1] = val;
  179. }
  180. inline
  181. Uint32 FsOpenReq::v1_getS(const Uint32 fileNumber[]){
  182.   return fileNumber[2];
  183. }
  184. inline
  185. void FsOpenReq::v1_setS(Uint32 fileNumber[], Uint32 val){
  186.   fileNumber[2] = val;
  187. }
  188. inline
  189. Uint32 FsOpenReq::v1_getP(const Uint32 fileNumber[]){
  190.   return fileNumber[3] & 0xff;
  191. }
  192. inline
  193. void FsOpenReq::v1_setP(Uint32 fileNumber[], Uint8 val){
  194.   const Uint32 t = fileNumber[3];
  195.   fileNumber[3] = t & 0xFFFFFF00 | val;
  196. }
  197. /****************/
  198. inline 
  199. Uint32 FsOpenReq::v2_getSequence(const Uint32 fileNumber[]){
  200.   return fileNumber[0];
  201. }
  202. inline
  203. void FsOpenReq::v2_setSequence(Uint32 fileNumber[], Uint32 val){
  204.   fileNumber[0] = val;
  205. }
  206. inline 
  207. Uint32 FsOpenReq::v2_getNodeId(const Uint32 fileNumber[]){
  208.   return fileNumber[1];
  209. }
  210. inline
  211. void FsOpenReq::v2_setNodeId(Uint32 fileNumber[], Uint32 val){
  212.   fileNumber[1] = val;
  213. }
  214. inline 
  215. Uint32 FsOpenReq::v2_getCount(const Uint32 fileNumber[]){
  216.   return fileNumber[2];
  217. }
  218. inline
  219. void FsOpenReq::v2_setCount(Uint32 fileNumber[], Uint32 val){
  220.   fileNumber[2] = val;
  221. }
  222. #endif