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

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. #include <ndb_global.h>
  14. #include "SimpleProperties.hpp"
  15. #include <NdbOut.hpp>
  16. Uint32 page[8192];
  17. int writer();
  18. int reader(Uint32 *, Uint32 len);
  19. int unpack(Uint32 *, Uint32 len);
  20. int main(){ 
  21.   int len = writer();
  22.   reader(page, len);
  23.   unpack(page, len);
  24.   
  25.   return 0; 
  26. }
  27. int
  28. writer(){
  29.   LinearWriter w(&page[0], 8192);
  30.   
  31.   w.first();
  32.   w.add(1, 2);
  33.   w.add(7, 3);
  34.   w.add(3, "jonas");
  35.   w.add(5, "0123456789");
  36.   w.add(7, 4);
  37.   w.add(3, "e cool");
  38.   w.add(5, "9876543210");
  39.   
  40.   ndbout_c("WordsUsed = %d", w.getWordsUsed());
  41.   
  42.   return w.getWordsUsed();
  43. }
  44. int 
  45. reader(Uint32 * pages, Uint32 len){
  46.   SimplePropertiesLinearReader it(pages, len);
  47.   
  48.   it.printAll(ndbout);
  49.   return 0;
  50. }
  51. struct Test {
  52.   Uint32 val1;
  53.   Uint32 val7;
  54.   char val3[100];
  55.   Test() : val1(0xFFFFFFFF), val7(0xFFFFFFFF) { sprintf(val3, "bad");}
  56. };
  57. static const
  58. SimpleProperties::SP2StructMapping
  59. test_map [] = {
  60.   { 1, offsetof(Test, val1), SimpleProperties::Uint32Value, 0, ~0 },
  61.   { 7, offsetof(Test, val7), SimpleProperties::Uint32Value, 0, ~0 },
  62.   { 3, offsetof(Test, val3), SimpleProperties::StringValue, 0, sizeof(100) },
  63.   { 5,                    0, SimpleProperties::InvalidValue, 0, 0 }
  64. };
  65. static unsigned
  66. test_map_sz = sizeof(test_map)/sizeof(test_map[0]);
  67. int 
  68. unpack(Uint32 * pages, Uint32 len){
  69.   Test test;
  70.   SimplePropertiesLinearReader it(pages, len);
  71.   SimpleProperties::UnpackStatus status;
  72.   while((status = SimpleProperties::unpack(it, &test, test_map, test_map_sz, 
  73.    true, false)) == SimpleProperties::Break){
  74.     ndbout << "test.val1 = " << test.val1 << endl;
  75.     ndbout << "test.val7 = " << test.val7 << endl;
  76.     ndbout << "test.val3 = " << test.val3 << endl;
  77.     it.next();
  78.   }
  79.   assert(status == SimpleProperties::Eof);
  80.   return 0;
  81. }