00001 #ifndef __XRDPOSIXCACHEBC_HH__
00002 #define __XRDPOSIXCACHEBC_HH__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "XrdOuc/XrdOucCache2.hh"
00034
00035
00036
00037
00038
00039 class XrdPosixCacheBCIO : public XrdOucCacheIO2
00040 {
00041 public:
00042
00043 virtual
00044 XrdOucCacheIO2 *Base() {return cacheIO2;}
00045
00046 virtual
00047 XrdOucCacheIO2 *Detach() {XrdOucCacheIO2 *theCIO = cacheIO2;
00048 cacheIO1->Detach();
00049 delete this;
00050 return theCIO;
00051 }
00052
00053 virtual
00054 long long FSize() {return cacheIO1->FSize();}
00055
00056 virtual int Fstat(struct stat &buf) {return cacheIO2->Fstat(buf);}
00057
00058 virtual
00059 const char *Location() {return cacheIO2->Location();}
00060
00061 virtual
00062 const char *Path() {return cacheIO1->Path();}
00063
00064 using XrdOucCacheIO2::Read;
00065
00066 virtual int Read (char *Buffer, long long Offset, int Length)
00067 {return cacheIO1->Read(Buffer, Offset, Length);}
00068
00069 using XrdOucCacheIO2::ReadV;
00070
00071 virtual int ReadV(const XrdOucIOVec *readV, int n)
00072 {return cacheIO1->ReadV(readV, n);}
00073
00074 using XrdOucCacheIO2::Sync;
00075
00076 virtual int Sync() {return cacheIO1->Sync();}
00077
00078 using XrdOucCacheIO2::Trunc;
00079
00080 virtual int Trunc(long long Offset) {return cacheIO1->Trunc(Offset);}
00081
00082 using XrdOucCacheIO2::Write;
00083
00084 virtual int Write(char *Buffer, long long Offset, int Length)
00085 {return cacheIO1->Write(Buffer, Offset, Length);}
00086
00087 virtual bool ioActive() { return cacheIO1->ioActive();}
00088
00089 virtual void Preread (long long Offset, int Length, int Opts=0)
00090 {return cacheIO1->Preread(Offset, Length, Opts);}
00091
00092 virtual void Preread(aprParms &Parms) { cacheIO1->Preread(Parms);}
00093
00094 XrdPosixCacheBCIO(XrdOucCacheIO *urCIO, XrdOucCacheIO2 *myCIO)
00095 : cacheIO1(urCIO), cacheIO2(myCIO) {}
00096 virtual ~XrdPosixCacheBCIO() {}
00097
00098 private:
00099 XrdOucCacheIO *cacheIO1;
00100 XrdOucCacheIO2 *cacheIO2;
00101 };
00102
00103
00104
00105
00106
00107 class XrdPosixCacheBC : public XrdOucCache2
00108 {
00109 public:
00110 using XrdOucCache2::Attach;
00111
00112 virtual
00113 XrdOucCacheIO2 *Attach(XrdOucCacheIO2 *ioP, int opts=0)
00114 {XrdOucCacheIO *newIOP = v1Cache->Attach(ioP, opts);
00115 if (newIOP == (XrdOucCacheIO *)ioP) return ioP;
00116 return new XrdPosixCacheBCIO(newIOP, ioP);
00117 }
00118
00119 virtual int isAttached() {return v1Cache->isAttached();}
00120
00121 virtual int Rmdir(const char* path) {return v1Cache->Rmdir(path);}
00122
00123 virtual int Rename(const char* pathO, const char* pathN)
00124 {return v1Cache->Rename(pathO, pathN);}
00125
00126 virtual int Truncate(const char* path, off_t size)
00127 {return v1Cache->Truncate(path, size);}
00128
00129 virtual int Unlink(const char* path) {return v1Cache->Unlink(path);}
00130
00131 XrdPosixCacheBC(XrdOucCache *cP) : v1Cache(cP) {}
00132 virtual ~XrdPosixCacheBC() {}
00133 private:
00134 XrdOucCache *v1Cache;
00135 };
00136 #endif