📄 file_8h-source.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> <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 <span class="comment">//-< FILE.CPP >------------------------------------------------------*--------*</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 << 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 << 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& writtenBytes, size_t size);00102 <span class="keywordtype">int</span> read(<span class="keywordtype">void</span>* ptr, size_t& 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 >> dbModMapBlockBits;00110 size_t last = (pos + size + dbModMapBlockSize - 1) >> dbModMapBlockBits;00111 assert(<span class="keywordtype">int</span>(last >> 5) <= pageMapSize);00112 <span class="keywordflow">while</span> (page < last) { 00113 pageMap[page >> 5] |= 1 << (page & 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->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 + -