TableInfoPs.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 TABLEINFO_PS_HPP
  14. #define TABLEINFO_PS_HPP
  15. #include <Vector.hpp>
  16. #include <ndb_types.h>
  17. #include <string.h>
  18. #include <NdbMem.h>
  19. struct TableInfo {
  20.   Uint32 tableId;
  21.   char* tableName;
  22. };
  23. /**
  24.  * @class TableInfoPS
  25.  * @brief Meta information about tables stored on PS
  26.  */
  27. class TableInfoPs {
  28. public:
  29.   inline void    insert(const Uint32 tableId, const char * tableName);
  30.   inline bool    del(const Uint32 tableId);
  31.   inline char *  getTableName(const Uint32 tableId) const;
  32. private:
  33.   Vector<struct TableInfo*> tableInfo;  
  34.   inline TableInfo * lookup(const Uint32 tableId) const;
  35.   inline TableInfo * lookup(const Uint32 tableId , Uint32 * pos) const;
  36. };
  37. inline 
  38. TableInfo *
  39. TableInfoPs::lookup(const Uint32 tableId) const{
  40.   TableInfo * table;
  41.   Uint32 i=0;
  42.   
  43.   while(i<tableInfo.size()) {
  44.     table=tableInfo[i];
  45.     if(table->tableId == tableId)
  46.       return table;
  47.     i++;
  48.   }
  49.   return 0;
  50. }
  51. inline 
  52. TableInfo *
  53. TableInfoPs::lookup(const Uint32 tableId, Uint32 * pos ) const{
  54.   TableInfo * table;
  55.   Uint32 i=0;  
  56.   while(i<tableInfo.size()) {
  57.     table=tableInfo[i];
  58.     if(table->tableId == tableId) {
  59.       *pos=i;
  60.       return table;
  61.     }
  62.     i++;
  63.   }
  64.   return 0;
  65. }
  66. inline 
  67. char * 
  68. TableInfoPs::getTableName(const Uint32 tableId) const{
  69.   TableInfo * table;
  70.   table=lookup(tableId);
  71.   if(table!=0)
  72.     return table->tableName;
  73.   return 0;
  74. }
  75. inline 
  76. void
  77. TableInfoPs::insert(const Uint32 tableId, const char * tableName) {
  78.   TableInfo * table = new TableInfo;
  79.   table->tableId=tableId;
  80.   table->tableName=strdup(tableName);  
  81.   tableInfo.push_back(table);
  82. }
  83. inline 
  84. bool
  85. TableInfoPs::del(const Uint32 tableId) {
  86.   TableInfo * table;
  87.   Uint32 i=0;
  88.   table =  lookup(tableId, &i);
  89.   
  90.   if(table!=0) {
  91.     NdbMem_Free(table->tableName);
  92.     delete table;
  93.     tableInfo.erase(i);
  94.     return true;
  95.   }
  96.   return false;
  97. }
  98. #endif