Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef ACE_FILECACHE_H
00015 #define ACE_FILECACHE_H
00016
00017 #include "ace/pre.h"
00018
00019 #include "ace/Mem_Map.h"
00020
00021 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00022 # pragma once
00023 #endif
00024
00025 #include "ace/Hash_Map_Manager_T.h"
00026 #include "ace/Null_Mutex.h"
00027 #include "ace/Synch_Traits.h"
00028 #include "ace/RW_Thread_Mutex.h"
00029 #include "ace/OS_NS_sys_stat.h"
00030
00031 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00032
00033 enum ACE_Filecache_Flag
00034 {
00035 ACE_NOMAP = 0,
00036 ACE_MAPIT = 1
00037 };
00038
00039 class ACE_Filecache_Object;
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074 class ACE_Export ACE_Filecache_Handle
00075 {
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 public:
00093
00094
00095
00096 ACE_Filecache_Handle (const ACE_TCHAR *filename,
00097 ACE_Filecache_Flag mapit = ACE_MAPIT);
00098
00099
00100
00101
00102
00103
00104 ACE_Filecache_Handle (const ACE_TCHAR *filename,
00105 int size,
00106 ACE_Filecache_Flag mapit = ACE_MAPIT);
00107
00108
00109 ~ACE_Filecache_Handle (void);
00110
00111
00112 void *address (void) const;
00113
00114
00115 ACE_HANDLE handle (void) const;
00116
00117
00118 int error (void) const;
00119
00120
00121 ACE_OFF_T size (void) const;
00122
00123 protected:
00124
00125 ACE_Filecache_Handle (void);
00126
00127
00128 void init (void);
00129
00130 public:
00131
00132 enum
00133 {
00134 ACE_SUCCESS = 0,
00135 ACE_ACCESS_FAILED,
00136 ACE_OPEN_FAILED,
00137 ACE_COPY_FAILED,
00138 ACE_STAT_FAILED,
00139 ACE_MEMMAP_FAILED,
00140 ACE_WRITE_FAILED
00141 };
00142
00143 private:
00144
00145 ACE_Filecache_Object *file_;
00146
00147
00148 ACE_HANDLE handle_;
00149
00150 int mapit_;
00151 };
00152
00153 typedef ACE_Hash_Map_Manager_Ex<const ACE_TCHAR *, ACE_Filecache_Object *, ACE_Hash<const ACE_TCHAR *>, ACE_Equal_To<const ACE_TCHAR *>, ACE_Null_Mutex>
00154 ACE_Filecache_Hash;
00155
00156 typedef ACE_Hash_Map_Entry<const ACE_TCHAR *, ACE_Filecache_Object *> ACE_Filecache_Hash_Entry;
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167 class ACE_Export ACE_Filecache
00168 {
00169 public:
00170
00171 static ACE_Filecache *instance (void);
00172
00173 ~ACE_Filecache (void);
00174
00175
00176
00177 int find (const ACE_TCHAR *filename);
00178
00179
00180
00181 ACE_Filecache_Object *fetch (const ACE_TCHAR *filename, int mapit = 1);
00182
00183
00184 ACE_Filecache_Object *remove (const ACE_TCHAR *filename);
00185
00186
00187 ACE_Filecache_Object *create (const ACE_TCHAR *filename, int size);
00188
00189
00190
00191 ACE_Filecache_Object *finish (ACE_Filecache_Object *&new_file);
00192
00193 protected:
00194 ACE_Filecache_Object *insert_i (const ACE_TCHAR *filename,
00195 ACE_SYNCH_RW_MUTEX &filelock,
00196 int mapit);
00197 ACE_Filecache_Object *remove_i (const ACE_TCHAR *filename);
00198 ACE_Filecache_Object *update_i (const ACE_TCHAR *filename,
00199 ACE_SYNCH_RW_MUTEX &filelock,
00200 int mapit);
00201
00202 public:
00203
00204 enum
00205 {
00206
00207
00208 ACE_DEFAULT_VIRTUAL_FILESYSTEM_TABLE_SIZE = 512,
00209
00210
00211
00212 ACE_DEFAULT_VIRTUAL_FILESYSTEM_CACHE_SIZE = 20
00213 };
00214
00215 protected:
00216
00217 ACE_Filecache (void);
00218
00219 private:
00220 ACE_OFF_T size_;
00221
00222
00223 ACE_Filecache_Hash hash_;
00224
00225
00226 static ACE_Filecache *cvf_;
00227
00228
00229 ACE_SYNCH_RW_MUTEX hash_lock_[ACE_DEFAULT_VIRTUAL_FILESYSTEM_TABLE_SIZE];
00230 ACE_SYNCH_RW_MUTEX file_lock_[ACE_DEFAULT_VIRTUAL_FILESYSTEM_TABLE_SIZE];
00231 };
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242 class ACE_Export ACE_Filecache_Object
00243 {
00244 public:
00245 friend class ACE_Filecache;
00246
00247
00248 ACE_Filecache_Object (const ACE_TCHAR *filename,
00249 ACE_SYNCH_RW_MUTEX &lock,
00250 LPSECURITY_ATTRIBUTES sa = 0,
00251 int mapit = 1);
00252
00253
00254 ACE_Filecache_Object (const ACE_TCHAR *filename,
00255 ACE_OFF_T size,
00256 ACE_SYNCH_RW_MUTEX &lock,
00257 LPSECURITY_ATTRIBUTES sa = 0);
00258
00259
00260 ~ACE_Filecache_Object (void);
00261
00262
00263 int acquire (void);
00264
00265
00266 int release (void);
00267
00268
00269 int error (void) const;
00270 int error (int error_value,
00271 const ACE_TCHAR *s = ACE_TEXT ("ACE_Filecache_Object"));
00272
00273
00274 const ACE_TCHAR *filename (void) const;
00275
00276
00277 ACE_HANDLE handle (void) const;
00278
00279
00280 void *address (void) const;
00281
00282
00283 ACE_OFF_T size (void) const;
00284
00285
00286 int update (void) const;
00287
00288 protected:
00289
00290 ACE_Filecache_Object (void);
00291
00292
00293 void init (void);
00294
00295 private:
00296
00297 int error_i (int error_value,
00298 const ACE_TCHAR *s = ACE_TEXT ("ACE_Filecache_Object"));
00299
00300 public:
00301
00302 enum Creation_States
00303 {
00304 ACE_READING = 1,
00305 ACE_WRITING = 2
00306 };
00307
00308 enum Error_Conditions
00309 {
00310 ACE_SUCCESS = 0,
00311 ACE_ACCESS_FAILED,
00312 ACE_OPEN_FAILED,
00313 ACE_COPY_FAILED,
00314 ACE_STAT_FAILED,
00315 ACE_MEMMAP_FAILED,
00316 ACE_WRITE_FAILED
00317 };
00318
00319 private:
00320
00321
00322 ACE_TCHAR *tempname_;
00323 ACE_TCHAR filename_[MAXPATHLEN + 1];
00324
00325
00326 ACE_Mem_Map mmap_;
00327
00328
00329 ACE_HANDLE handle_;
00330
00331
00332 ACE_stat stat_;
00333 ACE_OFF_T size_;
00334
00335
00336 int action_;
00337 int error_;
00338
00339
00340 int stale_;
00341
00342
00343 LPSECURITY_ATTRIBUTES sa_;
00344
00345
00346 ACE_SYNCH_RW_MUTEX junklock_;
00347
00348
00349 ACE_SYNCH_RW_MUTEX &lock_;
00350 };
00351
00352 ACE_END_VERSIONED_NAMESPACE_DECL
00353
00354 #include "ace/post.h"
00355
00356 #endif