📄 file_8h-source.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 Page</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a></div><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 <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 << 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 << 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& writtenBytes, size_t size);00096 <span class="keywordtype">int</span> read(<span class="keywordtype">void</span>* ptr, size_t& 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 >> dbModMapBlockBits;00104 size_t last = (pos + size + dbModMapBlockSize - 1) >> dbModMapBlockBits;00105 assert(<span class="keywordtype">int</span>(last >> 5) <= pageMapSize);00106 <span class="keywordflow">while</span> (page < last) { 00107 pageMap[page >> 5] |= 1 << (page & 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->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 + -