Advertisement
hugol

Untitled

Dec 4th, 2013
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.02 KB | None | 0 0
  1.  
  2. bool db::SaveTab(FILE* savefile, int ntab)
  3. {
  4.     if (savefile == NULL)
  5.         return false;
  6.     WriteString(savefile, Tabs[ntab].name, strlen(Tabs[ntab].name)); // nazwa
  7.     WriteInt(savefile, Tabs[ntab].column_count); // liczba kolumn
  8.  
  9.     for (int i=0; i< Tabs[ntab].column_count; i++) // kolejnosc kolumn
  10.         WriteInt(savefile, Tabs[ntab].column_order[i]);
  11.  
  12.     for (int i=0; i< Tabs[ntab].column_count; i++) // typy kolumn
  13.         WriteULLI(savefile, Tabs[ntab].column_types[i]);
  14.  
  15.     for (int i=0; i< Tabs[ntab].column_count; i++) // nazwy kolumn
  16.         WriteString(savefile, Tabs[ntab].column_names[i], strlen(Tabs[ntab].column_names[i]));
  17.  
  18.     for (int i=0; i< Tabs[ntab].column_count; i++) // mutexy column , false
  19.         WriteBool(savefile, Tabs[ntab].column_mutex[i]);
  20.  
  21.     WriteInt(savefile, Tabs[ntab].max_data_count); // max data count
  22.     WriteInt(savefile, Tabs[ntab].data_count); // data count
  23.     WriteInt(savefile, Tabs[ntab].data_ptr); // data ptr
  24.    
  25.     for(int i=0; i<Tabs[ntab].max_data_count; i++) // czy istnieja dane
  26.         WriteBool(savefile, Tabs[ntab].data_exist[i]);
  27.  
  28.     for (int i=0; i<Tabs[ntab].max_data_count; i++)
  29.     {
  30.         if (!Tabs[ntab].data_exist[i])
  31.             continue;
  32.         for (int c=0; c<Tabs[ntab].column_count; c++)
  33.         {
  34.             switch(Tabs[ntab].column_types[c] % TYP::MASK::START)
  35.             {
  36.             case TYP::INCINT:
  37.             case TYP::INT:
  38.             case TYP::CLAMP:
  39.                 WriteInt(savefile, ((int*)Tabs[ntab].column_data[c])[i]);
  40.                 break;
  41.             case TYP::STRING:
  42.                 WriteString(savefile, ((char**)Tabs[ntab].column_data[c])[i], strlen(((char**)Tabs[ntab].column_data[c])[i]));
  43.                 break;
  44.             case TYP::DOUBLE:
  45.                 WriteDouble(savefile, ((double*)Tabs[ntab].column_data[c])[i]);
  46.                 break;
  47.             case TYP::BOOL:
  48.                 WriteBool(savefile, ((bool*)Tabs[ntab].column_data[c])[i]);
  49.                 break;
  50.             default:
  51.                 cout << "nie rozpoznay typ danych przy zapisywaniu\n";
  52.                 break;
  53.             }
  54.         }
  55.     }
  56.     return true;
  57. }
  58.  
  59. void db::WriteInt(FILE* savefile, int param)
  60. {
  61.     fwrite(&param, sizeof(int), 1, savefile);
  62. }
  63.  
  64. void db::WriteULLI(FILE* savefile, unsigned long long int param)
  65. {
  66.     fwrite(&param, sizeof(unsigned long long int), 1, savefile);
  67. }
  68.  
  69. void db::WriteString(FILE* savefile, char* param, int strlen)
  70. {
  71.     WriteInt(savefile, strlen);
  72.     fwrite(param, strlen*sizeof(char), 1, savefile);
  73. }
  74.  
  75. void db::WriteBool(FILE* savefile, bool param)
  76. {
  77.     fwrite(&param, sizeof(bool), 1, savefile);
  78. }
  79.  
  80. void db::WriteDouble(FILE* savefile, double param)
  81. {
  82.     fwrite(&param, sizeof(double), 1, savefile);
  83. }
  84.  
  85. bool db::ReadInt(FILE* readfile, int* output)
  86. {
  87.     return fread(output, sizeof(int), 1, readfile) == 1;
  88. }
  89.  
  90. bool db::ReadULLI(FILE* readfile, unsigned long long int* output)
  91. {
  92.     return fread(output, sizeof(unsigned long long int), 1, readfile) == 1;
  93. }
  94.  
  95. bool db::ReadString(FILE* readfile, char** output)
  96. {
  97.     int len;
  98.     if (!ReadInt(readfile, &len))
  99.         return false;
  100.  
  101.     *output = (char*)malloc(sizeof(char)*(len+1));
  102.     (*output)[len] = 0;
  103.     return fread(*output, sizeof(char), len, readfile) == len;
  104. }
  105.  
  106. bool db::ReadBool(FILE* readfile, bool* output)
  107. {
  108.     return fread(output, sizeof(bool), 1, readfile) == 1;
  109. }
  110.  
  111. bool db::ReadDouble(FILE* readfile, double* output)
  112. {
  113.     return fread(output, sizeof(double), 1, readfile) == 1;
  114. }
  115.  
  116. bool db::LoadTab(FILE* readfile, int ntab)
  117. {
  118.     if (readfile == NULL)
  119.         return false;
  120.     char* strbuff;
  121.  
  122.     if (!ReadString(readfile, &strbuff)) // nazwa
  123.         return false;
  124.     if (strcmp(strbuff, Tabs[ntab].name)!=0) // nazwa sie nie zgadza
  125.         return false;
  126.  
  127.     free(strbuff);
  128.     ReadInt(readfile, &Tabs[ntab].column_count); // ilosc kolumn
  129.  
  130.     for (int i=0; i< Tabs[ntab].column_count; i++) // kolejnosc kolumn
  131.         ReadInt(readfile, &Tabs[ntab].column_order[i]);
  132.     for (int i=0; i< Tabs[ntab].column_count; i++) // typy kolumn
  133.         ReadULLI(readfile, &Tabs[ntab].column_types[i]);
  134.     for (int i=0; i< Tabs[ntab].column_count; i++) // nazwy kolumn
  135.         ReadString(readfile, &Tabs[ntab].column_names[i]);
  136.     for (int i=0; i< Tabs[ntab].column_count; i++) // mutexy column , false
  137.         ReadBool(readfile, &Tabs[ntab].column_mutex[i]);
  138.  
  139.     ReadInt(readfile, &Tabs[ntab].max_data_count); // max data count
  140.     ReadInt(readfile, &Tabs[ntab].data_count); // data count
  141.     ReadInt(readfile, &Tabs[ntab].data_ptr); // data ptr
  142.  
  143.     for(int i=0; i<Tabs[ntab].max_data_count; i++) // czy istnieja dane
  144.         ReadBool(readfile, &Tabs[ntab].data_exist[i]);
  145.  
  146.     for (int i=0; i<Tabs[ntab].max_data_count; i++)
  147.     {
  148.         if (!Tabs[ntab].data_exist[i])
  149.             continue;
  150.         for (int c=0; c<Tabs[ntab].column_count; c++)
  151.         {
  152.             switch(Tabs[ntab].column_types[c] % TYP::MASK::START)
  153.             {
  154.             case TYP::INCINT:
  155.             case TYP::INT:
  156.             case TYP::CLAMP:
  157.                 ReadInt(readfile, &((int*)Tabs[ntab].column_data[c])[i]);
  158.                 break;
  159.             case TYP::STRING:
  160.                 ReadString(readfile, &((char**)Tabs[ntab].column_data[c])[i]);
  161.                 break;
  162.             case TYP::DOUBLE:
  163.                 ReadDouble(readfile, &((double*)Tabs[ntab].column_data[c])[i]);
  164.                 break;
  165.             case TYP::BOOL:
  166.                 ReadBool(readfile, &((bool*)Tabs[ntab].column_data[c])[i]);
  167.                 break;
  168.             default:
  169.                 cout << "nie rozpoznay typ danych przy zapisywaniu\n";
  170.                 break;
  171.             }
  172.         }
  173.     }
  174.     return true;
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement