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

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 Filename_H
  14. #define Filename_H
  15. //===========================================================================
  16. //
  17. // .DESCRIPTION
  18. //      Takes a 128 bits value (done as a array of four longs) and 
  19. //      makes a filename out of it acording the following schema
  20. //      Bits 0-31 T 
  21. //      Bits 32-63 F
  22. //      Bits 64-95 S
  23. //      Bits 96-103 P
  24. //      Bits 104-111 D
  25. //      Bits 112-119 File Type
  26. //      Bits 120-127 Version number of Filename
  27. //      
  28. //      T, is used to find/create a directory. If T = 0xFFFF then the
  29. //      file is on top level. In that case the F is of no relevance.
  30. //      F, same as T.
  31. //      S, is used to find/create a filename. If S= 0xFFFF then it is ignored.
  32. //      P, same as S
  33. //      D, is used to find/create the root directory, this is the
  34. //      directory before the blockname. If D= 0xFF then it is ignored.
  35. //      File Type
  36. //              0 => .Data
  37. //              1 => .FragLog
  38. //              2 => .LocLog
  39. //              3 => .FragList
  40. //              4 => .TableList
  41. //              5 => .SchemaLog
  42. //              6 => .sysfile
  43. //              15=> ignored
  44. //      Version number of Filename, current version is 0x1, must be
  45. //      used for the this style of options.
  46. //
  47. //
  48. //===========================================================================
  49. #include <ndb_global.h>
  50. #include <kernel_types.h>
  51. class Filename
  52. {
  53. public:
  54.    // filenumber is 64 bits but is split in to 4 32bits words 
  55.    Filename();
  56.   ~Filename();
  57.   void set(BlockReference blockReference, 
  58.    const Uint32 filenumber[4], bool dir = false);
  59.   const char* baseDirectory() const;
  60.   const char* directory(int level);
  61.   int levels() const;
  62.   const char* c_str() const;
  63.   void init(Uint32 nodeid, const char * fileSystemPath,
  64.     const char * backupDirPath);
  65. private:
  66.   int theLevelDepth;
  67.   char theName[PATH_MAX];
  68.   char theFileSystemDirectory[PATH_MAX];
  69.   char theBackupDirectory[PATH_MAX];
  70.   char *theBaseDirectory;
  71.   char theDirectory[PATH_MAX];
  72. };
  73. // inline methods
  74. inline const char* Filename::c_str() const{
  75.   return theName;
  76. }
  77. inline const char* Filename::baseDirectory() const{
  78.   return theBaseDirectory;
  79. }
  80. inline int Filename::levels() const{
  81.   return theLevelDepth;
  82. }
  83. #endif