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

MySQL数据库

开发平台:

Visual C++

  1. #include <ConfigValues.hpp>
  2. #include <NdbOut.hpp>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #define CF_NODES     1
  6. #define CF_LOG_PAGES 2
  7. #define CF_MEM_PAGES 3
  8. #define CF_START_TO  4
  9. #define CF_STOP_TO   5
  10. void print(Uint32 i, ConfigValues::ConstIterator & cf){
  11.   ndbout_c("---");
  12.   for(Uint32 j = 2; j<=7; j++){
  13.     switch(cf.getTypeOf(j)){
  14.     case ConfigValues::IntType:
  15.       ndbout_c("Node %d : CFG(%d) : %d", 
  16.        i, j, cf.get(j, 999));
  17.       break;
  18.     case ConfigValues::Int64Type:
  19.       ndbout_c("Node %d : CFG(%d) : %lld (64)", 
  20.        i, j, cf.get64(j, 999));
  21.       break;
  22.     case ConfigValues::StringType:
  23.       ndbout_c("Node %d : CFG(%d) : %s",
  24.        i, j, cf.get(j, "<NOT FOUND>"));
  25.       break;
  26.     default:
  27.       ndbout_c("Node %d : CFG(%d) : TYPE: %d",
  28.        i, j, cf.getTypeOf(j));
  29.     }
  30.   }
  31. }
  32. void print(Uint32 i, ConfigValues & _cf){
  33.   ConfigValues::ConstIterator cf(_cf);
  34.   print(i, cf);
  35. }
  36. void
  37. print(ConfigValues & _cf){
  38.   ConfigValues::ConstIterator cf(_cf);
  39.   Uint32 i = 0;
  40.   while(cf.openSection(CF_NODES, i)){
  41.     print(i, cf);
  42.     cf.closeSection();
  43.     i++;
  44.   }
  45. }
  46. inline
  47. void
  48. require(bool b){
  49.   if(!b)
  50.     abort();
  51. }
  52. int
  53. main(void){
  54.   {
  55.     ConfigValuesFactory cvf(10, 20);
  56.     cvf.openSection(1, 0);
  57.     cvf.put(2, 12);
  58.     cvf.put64(3, 13);
  59.     cvf.put(4, 14);
  60.     cvf.put64(5, 15);
  61.     cvf.put(6, "Keso");
  62.     cvf.put(7, "Kent");
  63.     cvf.closeSection();
  64.     cvf.openSection(1, 1);
  65.     cvf.put(2, 22);
  66.     cvf.put64(3, 23);
  67.     cvf.put(4, 24);
  68.     cvf.put64(5, 25);
  69.     cvf.put(6, "Kalle");
  70.     cvf.put(7, "Anka");
  71.     cvf.closeSection();
  72.   
  73.     ndbout_c("-- print --");
  74.     print(* cvf.m_cfg);
  75.     cvf.shrink();
  76.     ndbout_c("shrinkn-- print --");
  77.     print(* cvf.m_cfg);
  78.     cvf.expand(10, 10);
  79.     ndbout_c("expandn-- print --");
  80.     print(* cvf.m_cfg);
  81.     ndbout_c("packed size: %d", cvf.m_cfg->getPackedSize());
  82.     ConfigValues::ConstIterator iter(* cvf.m_cfg);
  83.     iter.openSection(CF_NODES, 0);
  84.     ConfigValues * cfg2 = ConfigValuesFactory::extractCurrentSection(iter);
  85.     print(99, * cfg2);
  86.   
  87.     cvf.shrink();
  88.     ndbout_c("packed size: %d", cfg2->getPackedSize());
  89.     UtilBuffer buf;
  90.     Uint32 l1 = cvf.m_cfg->pack(buf);
  91.     Uint32 l2 = cvf.m_cfg->getPackedSize();
  92.     require(l1 == l2);
  93.   
  94.     ConfigValuesFactory cvf2;
  95.     require(cvf2.unpack(buf));
  96.     UtilBuffer buf2;
  97.     cvf2.shrink();
  98.     Uint32 l3 = cvf2.m_cfg->pack(buf2);
  99.     require(l1 == l3);
  100.   
  101.     ndbout_c("unpackn-- print --");
  102.     print(* cvf2.m_cfg);
  103.     cfg2->~ConfigValues();;
  104.     cvf.m_cfg->~ConfigValues();
  105.     free(cfg2);
  106.     free(cvf.m_cfg);
  107.   }
  108.   return 0;
  109. }