⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file_8h-source.html

📁 俄罗斯牛人KK的作品,著名的ORDBMS,这里上传最新的3.39版本源代码.希望了解对象关系数据库的同好,请不要错过.
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>file.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.18 --><center><a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </center><hr><h1>file.h</h1><div class="fragment"><pre>00001 <span class="comment">//-&lt; FILE.CPP &gt;------------------------------------------------------*--------*</span>00002 <span class="comment">// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *</span>00003 <span class="comment">// (Main Memory Database Management System)                          *   /\|  *</span>00004 <span class="comment">//                                                                   *  /  \  *</span>00005 <span class="comment">//                          Created:     20-Nov-98    K.A. Knizhnik  * / [] \ *</span>00006 <span class="comment">//                          Last update: 10-Dec-98    K.A. Knizhnik  * GARRET *</span>00007 <span class="comment">//-------------------------------------------------------------------*--------*</span>00008 <span class="comment">// System independent intrface to mapped on memory file</span>00009 <span class="comment">//-------------------------------------------------------------------*--------*</span>00010 00011 <span class="preprocessor">#ifndef __FILE_H__</span>00012 <span class="preprocessor"></span><span class="preprocessor">#define __FILE_H__</span>00013 <span class="preprocessor"></span>00014 <span class="preprocessor">#include "sync.h"</span>00015 00016 BEGIN_FASTDB_NAMESPACE00017 00018 <span class="preprocessor">#if defined(REPLICATION_SUPPORT)</span>00019 <span class="preprocessor"></span><span class="keyword">const</span> <span class="keywordtype">int</span> dbModMapBlockBits = 12; <span class="comment">// 10;</span>00020 <span class="keyword">const</span> <span class="keywordtype">int</span> dbModMapBlockSize = 1 &lt;&lt; dbModMapBlockBits;00021 <span class="preprocessor">#elif defined(NO_MMAP)</span>00022 <span class="preprocessor"></span><span class="keyword">const</span> <span class="keywordtype">int</span> dbModMapBlockBits = 12;00023 <span class="keyword">const</span> <span class="keywordtype">int</span> dbModMapBlockSize = 1 &lt;&lt; dbModMapBlockBits;00024 <span class="preprocessor">#endif</span>00025 <span class="preprocessor"></span>00026 <span class="preprocessor">#ifdef REPLICATION_SUPPORT</span>00027 <span class="preprocessor"></span>00028 <span class="keyword">class </span>dbFile;00029 <span class="keyword">class </span>dbReplicatedDatabase;00030 <span class="keyword">class </span>socket_t;00031 00032 <span class="keyword">struct </span>ReplicationRequest { 00033     <span class="keyword">enum</span> {00034         RR_CONNECT, 00035         RR_RECOVERY, 00036         RR_GET_STATUS, 00037         RR_STATUS, 00038         RR_UPDATE_PAGE,00039         RR_NEW_ACTIVE_NODE, 00040         RR_CHANGE_ACTIVE_NODE, 00041         RR_CLOSE, 00042         RR_READY00043     };00044     byte op;00045     byte nodeId;00046     byte status;00047     <span class="keywordtype">int</span>  size;00048     <span class="keyword">struct </span>{ 00049         <span class="keywordtype">int</span> updateCount;00050         <span class="keywordtype">int</span> offs;00051     } page;00052 };00053 00054 <span class="keyword">struct </span>RecoveryRequest { 00055     dbFile*   file;00056     <span class="keywordtype">int</span>       nodeId;00057     <span class="keywordtype">int</span>       nPages;00058     <span class="keywordtype">int</span>*      updateCounters;00059 };00060 <span class="preprocessor">#endif</span>00061 <span class="preprocessor"></span>00062 <span class="preprocessor">#ifdef FUZZY_CHECKPOINT</span>00063 <span class="preprocessor"></span><span class="keyword">class  </span>dbFileWriter;00064 <span class="preprocessor">#endif</span>00065 <span class="preprocessor"></span>00066 <span class="keyword">class </span>dbFile { 00067   <span class="keyword">protected</span>:00068 <span class="preprocessor">#ifdef _WIN32</span>00069 <span class="preprocessor"></span>    HANDLE fh;00070     HANDLE mh;00071 <span class="preprocessor">#else</span>00072 <span class="preprocessor"></span><span class="preprocessor">#ifdef USE_SYSV_SHARED_MEMORY</span>00073 <span class="preprocessor"></span>    dbSharedMemory shmem;00074 <span class="preprocessor">#endif</span>00075 <span class="preprocessor"></span>    <span class="keywordtype">int</span>    fd;00076 <span class="preprocessor">#endif</span>00077 <span class="preprocessor"></span>    <span class="keywordtype">char</span>*  sharedName;00078     <span class="keywordtype">char</span>*  mmapAddr;00079     size_t mmapSize;00080     <span class="keywordtype">bool</span>   readonly;00081   <span class="keyword">public</span>:00082     <span class="keyword">enum</span> { 00083         ok = 000084     };00085     <span class="comment">//</span>00086     <span class="comment">// Create backup file</span>00087     <span class="comment">//</span>00088     <span class="keywordtype">int</span>    create(<span class="keywordtype">char</span> <span class="keyword">const</span>* name, <span class="keywordtype">bool</span> noBuffering = <span class="keyword">true</span>);00089     <span class="comment">//</span>00090     <span class="comment">// Open database file and create file mapping object </span>00091     <span class="comment">//</span>00092     <span class="keywordtype">int</span>    open(<span class="keywordtype">char</span> <span class="keyword">const</span>* fileName, <span class="keywordtype">char</span> <span class="keyword">const</span>* sharedName,00093                 <span class="keywordtype">bool</span> readonly, size_t initSize, <span class="keywordtype">bool</span> replicationSupport);00094     00095     <span class="keywordtype">void</span>*  getAddr()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mmapAddr; }00096     size_t getSize()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mmapSize; } 00097     <span class="keywordtype">int</span>    setSize(size_t size, <span class="keywordtype">char</span> <span class="keyword">const</span>* sharedName, <span class="keywordtype">bool</span> initialize = <span class="keyword">true</span>);00098     <span class="keywordtype">int</span>    flush(<span class="keywordtype">bool</span> physical = <span class="keyword">false</span>);00099     <span class="keywordtype">int</span>    close();00100     <span class="keywordtype">int</span>    erase();00101     <span class="keywordtype">int</span>    write(<span class="keywordtype">void</span> <span class="keyword">const</span>* ptr, size_t&amp; writtenBytes, size_t size);00102     <span class="keywordtype">int</span>    read(<span class="keywordtype">void</span>* ptr, size_t&amp; readBytes, size_t size);00103     <span class="keywordtype">bool</span>   write(<span class="keywordtype">void</span> <span class="keyword">const</span>* ptr, size_t size);00104 00105     <span class="keyword">static</span> <span class="keywordtype">char</span>* errorText(<span class="keywordtype">int</span> code, <span class="keywordtype">char</span>* buf, size_t bufSize);00106 00107 <span class="preprocessor">#if defined(NO_MMAP) || defined(REPLICATION_SUPPORT)</span>00108 <span class="preprocessor"></span>    <span class="keywordtype">void</span> markAsDirty(size_t pos, size_t size) { 00109         size_t page = pos &gt;&gt; dbModMapBlockBits;00110         size_t last = (pos + size + dbModMapBlockSize - 1) &gt;&gt; dbModMapBlockBits;00111         assert(<span class="keywordtype">int</span>(last &gt;&gt; 5) &lt;= pageMapSize);00112         <span class="keywordflow">while</span> (page &lt; last) { 00113             pageMap[page &gt;&gt; 5] |= 1 &lt;&lt; (page &amp; 31);00114             page += 1;00115         }00116     }00117 00118   <span class="keyword">private</span>:00119     <span class="keywordtype">int</span>* pageMap;00120     <span class="keywordtype">int</span>  pageMapSize;00121     <span class="keywordtype">int</span>  pageSize;00122 00123 <span class="preprocessor">#ifdef FUZZY_CHECKPOINT</span>00124 <span class="preprocessor"></span>    dbFileWriter* writer;00125   <span class="keyword">public</span>:00126     <span class="keywordtype">void</span> setCheckpointBufferSize(size_t nPages);00127 <span class="preprocessor">#endif</span>00128 <span class="preprocessor"></span>00129   <span class="keyword">public</span>:00130     <span class="keywordtype">int</span>  updateCounter;00131 00132 <span class="preprocessor">#ifdef REPLICATION_SUPPORT</span>00133 <span class="preprocessor"></span>    <span class="keywordtype">int</span>*      currUpdateCount;00134     <span class="keywordtype">int</span>*      diskUpdateCount;00135     byte*     rootPage;00136     <span class="keywordtype">bool</span>      doSync;00137     <span class="keywordtype">bool</span>      closing;00138 00139     dbReplicatedDatabase* db;00140 00141     <span class="keywordtype">int</span>       getUpdateCountTableSize();00142     <span class="keywordtype">int</span>       getMaxPages(); 00143 00144     dbMutex   replCS;00145     dbMutex   syncCS;00146 00147     dbThread     syncThread;00148     dbLocalEvent syncEvent;00149     dbLocalEvent recoveredEvent;00150     <span class="keywordtype">int</span>          nRecovered;00151 00152     <span class="keyword">static</span> <span class="keywordtype">int</span>   dbSyncTimeout; <span class="comment">// milliseconds</span>00153 00154 <span class="preprocessor">#ifdef _WIN32</span>00155 <span class="preprocessor"></span>    HANDLE    cfh;00156     HANDLE    cmh;00157 <span class="preprocessor">#else</span>00158 <span class="preprocessor"></span>    <span class="keywordtype">int</span>       cfd;00159 <span class="preprocessor">#endif</span>00160 <span class="preprocessor"></span>00161     <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc startSyncToDisk(<span class="keywordtype">void</span>* arg);00162     <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc startRecovery(<span class="keywordtype">void</span>* arg);00163 00164 00165     <span class="keywordtype">void</span> doRecovery(<span class="keywordtype">int</span> nodeId, <span class="keywordtype">int</span>* updateCounters, <span class="keywordtype">int</span> nPages);00166 00167     <span class="keywordtype">void</span> syncToDisk();00168     <span class="keywordtype">void</span> startSync();00169     <span class="keywordtype">void</span> stopSync();00170 00171   <span class="keyword">public</span>:00172     <span class="keywordtype">void</span> configure(dbReplicatedDatabase* db) { 00173         this-&gt;db = db;00174     }00175 00176     <span class="keywordtype">bool</span> updatePages(socket_t* s, size_t pos, <span class="keywordtype">int</span> updateCount, <span class="keywordtype">int</span> size);00177     <span class="keywordtype">bool</span> concurrentUpdatePages(socket_t* s, size_t pos, <span class="keywordtype">int</span> updateCount, <span class="keywordtype">int</span> size);00178     <span class="keywordtype">void</span> recovery(<span class="keywordtype">int</span> nodeId, <span class="keywordtype">int</span>* updateCounters, <span class="keywordtype">int</span> nPages);00179 <span class="preprocessor">#endif</span>00180 <span class="preprocessor"></span>00181 00182 <span class="preprocessor">#else</span>00183 <span class="preprocessor"></span>    <span class="keywordtype">void</span> markAsDirty(size_t, size_t) {}00184 <span class="preprocessor">#endif</span>00185 <span class="preprocessor"></span>00186     <span class="keywordtype">bool</span> write(size_t pos, <span class="keywordtype">void</span> <span class="keyword">const</span>* ptr, size_t size);00187 00188     dbFile();00189     ~dbFile();00190 };00191 00192 00193 END_FASTDB_NAMESPACE00194 00195 <span class="preprocessor">#endif</span>00196 <span class="preprocessor"></span></pre></div><hr><address style="align: right;"><small>Generated on Mon Oct 23 13:23:58 2006 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.18 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -