file_8h-source.html

来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· HTML 代码 · 共 188 行

HTML
188
字号
<!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.15 --><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 <font class="comment">//-&lt; FILE.CPP &gt;------------------------------------------------------*--------*</font>00002 <font class="comment">// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *</font>00003 <font class="comment">// (Main Memory Database Management System)                          *   /\|  *</font>00004 <font class="comment">//                                                                   *  /  \  *</font>00005 <font class="comment">//                          Created:     20-Nov-98    K.A. Knizhnik  * / [] \ *</font>00006 <font class="comment">//                          Last update: 10-Dec-98    K.A. Knizhnik  * GARRET *</font>00007 <font class="comment">//-------------------------------------------------------------------*--------*</font>00008 <font class="comment">// System independent intrface to mapped on memory file</font>00009 <font class="comment">//-------------------------------------------------------------------*--------*</font>00010 00011 <font class="preprocessor">#ifndef __FILE_H__</font>00012 <font class="preprocessor"></font><font class="preprocessor">#define __FILE_H__</font>00013 <font class="preprocessor"></font>00014 <font class="preprocessor">#include "sync.h"</font>00015 00016 <font class="preprocessor">#if defined(REPLICATION_SUPPORT)</font>00017 <font class="preprocessor"></font><font class="keyword">const</font> <font class="keywordtype">int</font> dbModMapBlockBits = 10;00018 <font class="keyword">const</font> <font class="keywordtype">int</font> dbModMapBlockSize = 1 &lt;&lt; dbModMapBlockBits;00019 <font class="preprocessor">#elif defined(NO_MMAP)</font>00020 <font class="preprocessor"></font><font class="keyword">const</font> <font class="keywordtype">int</font> dbModMapBlockBits = 13;00021 <font class="keyword">const</font> <font class="keywordtype">int</font> dbModMapBlockSize = 1 &lt;&lt; dbModMapBlockBits;00022 <font class="preprocessor">#endif</font>00023 <font class="preprocessor"></font>00024 <font class="preprocessor">#ifdef REPLICATION_SUPPORT</font>00025 <font class="preprocessor"></font>00026 <font class="keyword">class </font>dbFile;00027 <font class="keyword">class </font>dbReplicatedDatabase;00028 00029 <font class="keyword">struct </font>ReplicationRequest { 00030     <font class="keyword">enum</font> {00031         RR_CONNECT, 00032         RR_RECOVERY, 00033         RR_GET_STATUS, 00034         RR_STATUS, 00035         RR_UPDATE_PAGE,00036         RR_NEW_ACTIVE_NODE, 00037         RR_CLOSE, 00038         RR_READY00039     };00040     byte op;00041     byte nodeId;00042     byte status;00043     <font class="keywordtype">int</font>  size;00044     <font class="keyword">struct </font>{ 00045         <font class="keywordtype">int</font> updateCount;00046         <font class="keywordtype">int</font> offs;00047     } page;00048 };00049 00050 <font class="keyword">struct </font>RecoveryRequest { 00051     dbFile*   file;00052     <font class="keywordtype">int</font>       nodeId;00053     <font class="keywordtype">int</font>       nPages;00054     <font class="keywordtype">int</font>*      updateCounters;00055 };00056 <font class="preprocessor">#endif</font>00057 <font class="preprocessor"></font>00058 00059 <font class="keyword">class </font>dbFile { 00060   <font class="keyword">protected</font>:00061 <font class="preprocessor">#ifdef _WIN32</font>00062 <font class="preprocessor"></font>    HANDLE fh;00063     HANDLE mh;00064 <font class="preprocessor">#else</font>00065 <font class="preprocessor"></font><font class="preprocessor">#ifdef USE_SYSV_SHARED_MEMORY</font>00066 <font class="preprocessor"></font>    dbSharedMemory shmem;00067 <font class="preprocessor">#endif</font>00068 <font class="preprocessor"></font>    <font class="keywordtype">int</font>    fd;00069 <font class="preprocessor">#endif</font>00070 <font class="preprocessor"></font>    <font class="keywordtype">char</font>*  sharedName;00071     <font class="keywordtype">char</font>*  mmapAddr;00072     size_t mmapSize;00073 00074   <font class="keyword">public</font>:00075     <font class="keyword">enum</font> { 00076         ok = 000077     };00078     <font class="comment">//</font>00079     <font class="comment">// Create backup file</font>00080     <font class="comment">//</font>00081     <font class="keywordtype">int</font>    create(<font class="keywordtype">char</font> <font class="keyword">const</font>* name, <font class="keywordtype">bool</font> noBuffering = <font class="keyword">true</font>);00082     <font class="comment">//</font>00083     <font class="comment">// Open database file and create file mapping object </font>00084     <font class="comment">//</font>00085     <font class="keywordtype">int</font>    open(<font class="keywordtype">char</font> <font class="keyword">const</font>* fileName, <font class="keywordtype">char</font> <font class="keyword">const</font>* sharedName,00086                 <font class="keywordtype">bool</font> readonly, size_t initSize);00087     00088     <font class="keywordtype">void</font>*  getAddr()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> mmapAddr; }00089     size_t getSize()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> mmapSize; } 00090     <font class="keywordtype">int</font>    setSize(size_t size, <font class="keywordtype">char</font> <font class="keyword">const</font>* sharedName, <font class="keywordtype">bool</font> initialize = <font class="keyword">true</font>);00091     <font class="keywordtype">int</font>    flush(<font class="keywordtype">bool</font> physical = <font class="keyword">false</font>);00092     <font class="keywordtype">int</font>    close();00093     <font class="keywordtype">int</font>    erase();00094     <font class="keywordtype">int</font>    write(<font class="keywordtype">void</font> <font class="keyword">const</font>* ptr, size_t&amp; writtenBytes, size_t size);00095     <font class="keywordtype">int</font>    read(<font class="keywordtype">void</font>* ptr, size_t&amp; readBytes, size_t size);00096     <font class="keywordtype">bool</font>   write(<font class="keywordtype">void</font> <font class="keyword">const</font>* ptr, size_t size);00097 00098     <font class="keyword">static</font> <font class="keywordtype">char</font>* errorText(<font class="keywordtype">int</font> code, <font class="keywordtype">char</font>* buf, size_t bufSize);00099 00100 <font class="preprocessor">#if defined(NO_MMAP)  || defined(REPLICATION_SUPPORT)</font>00101 <font class="preprocessor"></font>    <font class="keywordtype">void</font> markAsDirty(size_t pos, size_t size) { 00102         size_t page = pos &gt;&gt; dbModMapBlockBits;00103         size_t last = (pos + size + dbModMapBlockSize - 1) &gt;&gt; dbModMapBlockBits;00104         <font class="keywordflow">while</font> (page &lt; last) { 00105             pageMap[page &gt;&gt; 5] |= 1 &lt;&lt; (page &amp; 31);00106             page += 1;00107         }00108     }00109 00110   <font class="keyword">private</font>:00111     <font class="keywordtype">int</font>* pageMap;00112     <font class="keywordtype">int</font>  pageMapSize;00113     <font class="keywordtype">int</font>  pageSize;00114   <font class="keyword">public</font>:00115     <font class="keywordtype">int</font>  updateCounter;00116 00117 <font class="preprocessor">#ifdef REPLICATION_SUPPORT</font>00118 <font class="preprocessor"></font>    <font class="keywordtype">int</font>*      currUpdateCount;00119     <font class="keywordtype">int</font>*      diskUpdateCount;00120     <font class="keywordtype">bool</font>      doSync;00121     <font class="keywordtype">bool</font>      closing;00122 00123     dbReplicatedDatabase* db;00124 00125     <font class="keywordtype">int</font>       getUpdateCountTableSize();00126     <font class="keywordtype">int</font>       getMaxPages(); 00127 00128     dbMutex   replCS;00129     dbMutex   syncCS;00130 00131     dbThread     syncThread;00132     dbLocalEvent syncEvent;00133     dbLocalEvent recoveredEvent;00134     <font class="keywordtype">int</font>          nRecovered;00135 00136     <font class="keyword">static</font> <font class="keywordtype">int</font>   dbSyncTimeout; <font class="comment">// milliseconds</font>00137 00138 <font class="preprocessor">#ifdef _WIN32</font>00139 <font class="preprocessor"></font>    HANDLE    cfh;00140     HANDLE    cmh;00141 <font class="preprocessor">#else</font>00142 <font class="preprocessor"></font>    <font class="keywordtype">int</font>       cfd;00143 <font class="preprocessor">#endif</font>00144 <font class="preprocessor"></font>00145     <font class="keyword">static</font> <font class="keywordtype">void</font> thread_proc startSyncToDisk(<font class="keywordtype">void</font>* arg);00146     <font class="keyword">static</font> <font class="keywordtype">void</font> thread_proc startRecovery(<font class="keywordtype">void</font>* arg);00147 00148 00149     <font class="keywordtype">void</font> doRecovery(<font class="keywordtype">int</font> nodeId, <font class="keywordtype">int</font>* updateCounters, <font class="keywordtype">int</font> nPages);00150 00151     <font class="keywordtype">void</font> syncToDisk();00152     <font class="keywordtype">void</font> startSync();00153     <font class="keywordtype">void</font> stopSync();00154 00155   <font class="keyword">public</font>:00156     <font class="keywordtype">void</font> configure(dbReplicatedDatabase* db) { 00157         this-&gt;db = db;00158     }00159 00160     <font class="keywordtype">bool</font> updatePages(<font class="keywordtype">int</font> nodeId, size_t pos, <font class="keywordtype">int</font> updateCount, <font class="keywordtype">int</font> size);00161     <font class="keywordtype">void</font> recovery(<font class="keywordtype">int</font> nodeId, <font class="keywordtype">int</font>* updateCounters, <font class="keywordtype">int</font> nPages);00162 <font class="preprocessor">#endif</font>00163 <font class="preprocessor"></font>00164 <font class="preprocessor">#else</font>00165 <font class="preprocessor"></font>    <font class="keywordtype">void</font> markAsDirty(size_t, size_t) {}00166 <font class="preprocessor">#endif</font>00167 <font class="preprocessor"></font>00168     dbFile();00169 };00170 00171 00172 <font class="preprocessor">#endif</font>00173 <font class="preprocessor"></font></pre></div><hr><address align="right"><small>Generated on Fri Nov 15 21:06:29 2002 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.15 </small></address></body></html>

⌨️ 快捷键说明

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