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> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center><hr><h1>file.h</h1><div class="fragment"><pre>00001 <font class="comment">//-< FILE.CPP >------------------------------------------------------*--------*</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 << 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 << 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& writtenBytes, size_t size);00095 <font class="keywordtype">int</font> read(<font class="keywordtype">void</font>* ptr, size_t& 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 >> dbModMapBlockBits;00103 size_t last = (pos + size + dbModMapBlockSize - 1) >> dbModMapBlockBits;00104 <font class="keywordflow">while</font> (page < last) { 00105 pageMap[page >> 5] |= 1 << (page & 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->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 + -
显示快捷键?