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

📄 file_8h-source.html

📁 FastDb是高效的内存数据库系统
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>FastDB: file.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.5 --><div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a></div><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 <span class="preprocessor">#if defined(REPLICATION_SUPPORT)</span>00017 <span class="preprocessor"></span><span class="keyword">const</span> <span class="keywordtype">int</span> dbModMapBlockBits = 12; <span class="comment">// 10;</span>00018 <span class="keyword">const</span> <span class="keywordtype">int</span> dbModMapBlockSize = 1 &lt;&lt; dbModMapBlockBits;00019 <span class="preprocessor">#elif defined(NO_MMAP)</span>00020 <span class="preprocessor"></span><span class="keyword">const</span> <span class="keywordtype">int</span> dbModMapBlockBits = 12;00021 <span class="keyword">const</span> <span class="keywordtype">int</span> dbModMapBlockSize = 1 &lt;&lt; dbModMapBlockBits;00022 <span class="preprocessor">#endif</span>00023 <span class="preprocessor"></span>00024 <span class="preprocessor">#ifdef REPLICATION_SUPPORT</span>00025 <span class="preprocessor"></span>00026 <span class="keyword">class </span>dbFile;00027 <span class="keyword">class </span>dbReplicatedDatabase;00028 <span class="keyword">class </span>socket_t;00029 00030 <span class="keyword">struct </span>ReplicationRequest { 00031     <span class="keyword">enum</span> {00032         RR_CONNECT, 00033         RR_RECOVERY, 00034         RR_GET_STATUS, 00035         RR_STATUS, 00036         RR_UPDATE_PAGE,00037         RR_NEW_ACTIVE_NODE, 00038         RR_CLOSE, 00039         RR_READY00040     };00041     byte op;00042     byte nodeId;00043     byte status;00044     <span class="keywordtype">int</span>  size;00045     <span class="keyword">struct </span>{ 00046         <span class="keywordtype">int</span> updateCount;00047         <span class="keywordtype">int</span> offs;00048     } page;00049 };00050 00051 <span class="keyword">struct </span>RecoveryRequest { 00052     dbFile*   file;00053     <span class="keywordtype">int</span>       nodeId;00054     <span class="keywordtype">int</span>       nPages;00055     <span class="keywordtype">int</span>*      updateCounters;00056 };00057 <span class="preprocessor">#endif</span>00058 <span class="preprocessor"></span>00059 00060 <span class="keyword">class </span>dbFile { 00061   <span class="keyword">protected</span>:00062 <span class="preprocessor">#ifdef _WIN32</span>00063 <span class="preprocessor"></span>    HANDLE fh;00064     HANDLE mh;00065 <span class="preprocessor">#else</span>00066 <span class="preprocessor"></span><span class="preprocessor">#ifdef USE_SYSV_SHARED_MEMORY</span>00067 <span class="preprocessor"></span>    dbSharedMemory shmem;00068 <span class="preprocessor">#endif</span>00069 <span class="preprocessor"></span>    <span class="keywordtype">int</span>    fd;00070 <span class="preprocessor">#endif</span>00071 <span class="preprocessor"></span>    <span class="keywordtype">char</span>*  sharedName;00072     <span class="keywordtype">char</span>*  mmapAddr;00073     size_t mmapSize;00074 00075   <span class="keyword">public</span>:00076     <span class="keyword">enum</span> { 00077         ok = 000078     };00079     <span class="comment">//</span>00080     <span class="comment">// Create backup file</span>00081     <span class="comment">//</span>00082     <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>);00083     <span class="comment">//</span>00084     <span class="comment">// Open database file and create file mapping object </span>00085     <span class="comment">//</span>00086     <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,00087                 <span class="keywordtype">bool</span> readonly, size_t initSize, <span class="keywordtype">bool</span> replicationSupport);00088     00089     <span class="keywordtype">void</span>*  getAddr()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mmapAddr; }00090     size_t getSize()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> mmapSize; } 00091     <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>);00092     <span class="keywordtype">int</span>    flush(<span class="keywordtype">bool</span> physical = <span class="keyword">false</span>);00093     <span class="keywordtype">int</span>    close();00094     <span class="keywordtype">int</span>    erase();00095     <span class="keywordtype">int</span>    write(<span class="keywordtype">void</span> <span class="keyword">const</span>* ptr, size_t&amp; writtenBytes, size_t size);00096     <span class="keywordtype">int</span>    read(<span class="keywordtype">void</span>* ptr, size_t&amp; readBytes, size_t size);00097     <span class="keywordtype">bool</span>   write(<span class="keywordtype">void</span> <span class="keyword">const</span>* ptr, size_t size);00098 00099     <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);00100 00101 <span class="preprocessor">#if defined(NO_MMAP) || defined(REPLICATION_SUPPORT)</span>00102 <span class="preprocessor"></span>    <span class="keywordtype">void</span> markAsDirty(size_t pos, size_t size) { 00103         size_t page = pos &gt;&gt; dbModMapBlockBits;00104         size_t last = (pos + size + dbModMapBlockSize - 1) &gt;&gt; dbModMapBlockBits;00105         assert(<span class="keywordtype">int</span>(last &gt;&gt; 5) &lt;= pageMapSize);00106         <span class="keywordflow">while</span> (page &lt; last) { 00107             pageMap[page &gt;&gt; 5] |= 1 &lt;&lt; (page &amp; 31);00108             page += 1;00109         }00110     }00111 00112   <span class="keyword">private</span>:00113     <span class="keywordtype">int</span>* pageMap;00114     <span class="keywordtype">int</span>  pageMapSize;00115     <span class="keywordtype">int</span>  pageSize;00116   <span class="keyword">public</span>:00117     <span class="keywordtype">int</span>  updateCounter;00118 00119 <span class="preprocessor">#ifdef REPLICATION_SUPPORT</span>00120 <span class="preprocessor"></span>    <span class="keywordtype">int</span>*      currUpdateCount;00121     <span class="keywordtype">int</span>*      diskUpdateCount;00122     byte*     rootPage;00123     <span class="keywordtype">bool</span>      doSync;00124     <span class="keywordtype">bool</span>      closing;00125 00126     dbReplicatedDatabase* db;00127 00128     <span class="keywordtype">int</span>       getUpdateCountTableSize();00129     <span class="keywordtype">int</span>       getMaxPages(); 00130 00131     dbMutex   replCS;00132     dbMutex   syncCS;00133 00134     dbThread     syncThread;00135     dbLocalEvent syncEvent;00136     dbLocalEvent recoveredEvent;00137     <span class="keywordtype">int</span>          nRecovered;00138 00139     <span class="keyword">static</span> <span class="keywordtype">int</span>   dbSyncTimeout; <span class="comment">// milliseconds</span>00140 00141 <span class="preprocessor">#ifdef _WIN32</span>00142 <span class="preprocessor"></span>    HANDLE    cfh;00143     HANDLE    cmh;00144 <span class="preprocessor">#else</span>00145 <span class="preprocessor"></span>    <span class="keywordtype">int</span>       cfd;00146 <span class="preprocessor">#endif</span>00147 <span class="preprocessor"></span>00148     <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc startSyncToDisk(<span class="keywordtype">void</span>* arg);00149     <span class="keyword">static</span> <span class="keywordtype">void</span> thread_proc startRecovery(<span class="keywordtype">void</span>* arg);00150 00151 00152     <span class="keywordtype">void</span> doRecovery(<span class="keywordtype">int</span> nodeId, <span class="keywordtype">int</span>* updateCounters, <span class="keywordtype">int</span> nPages);00153 00154     <span class="keywordtype">void</span> syncToDisk();00155     <span class="keywordtype">void</span> startSync();00156     <span class="keywordtype">void</span> stopSync();00157 00158   <span class="keyword">public</span>:00159     <span class="keywordtype">void</span> configure(dbReplicatedDatabase* db) { 00160         this-&gt;db = db;00161     }00162 00163     <span class="keywordtype">bool</span> updatePages(socket_t* s, size_t pos, <span class="keywordtype">int</span> updateCount, <span class="keywordtype">int</span> size);00164     <span class="keywordtype">bool</span> concurrentUpdatePages(socket_t* s, size_t pos, <span class="keywordtype">int</span> updateCount, <span class="keywordtype">int</span> size);00165     <span class="keywordtype">void</span> recovery(<span class="keywordtype">int</span> nodeId, <span class="keywordtype">int</span>* updateCounters, <span class="keywordtype">int</span> nPages);00166 <span class="preprocessor">#endif</span>00167 <span class="preprocessor"></span>00168 <span class="preprocessor">#else</span>00169 <span class="preprocessor"></span>    <span class="keywordtype">void</span> markAsDirty(size_t, size_t) {}00170 <span class="preprocessor">#endif</span>00171 <span class="preprocessor"></span>00172     dbFile();00173 };00174 00175 00176 <span class="preprocessor">#endif</span>00177 <span class="preprocessor"></span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Thu Feb 12 13:04:48 2004 for FastDB by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.5 </small></address></body></html>

⌨️ 快捷键说明

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