00001
00002
00003
00004
00005
00006
00007
00008
00010
00011 #ifndef _ROKU_INCLUDE_CASCADE_UTIL_CASCADEFSOBJECT_H
00012 #define _ROKU_INCLUDE_CASCADE_UTIL_CASCADEFSOBJECT_H
00013
00014 #include <cascade/CascadeObject.h>
00015 #include <cascade/util/CascadeString.h>
00016 #include <sys/types.h>
00017 #include <regex.h>
00018 #include <sys/stat.h>
00019
00042 class CascadeFSObject : public CascadeObject
00043 {
00044 public:
00045 typedef enum FSCopyError
00046 {
00047 eFSCopyNoErr,
00048 eFSCopyCanceled,
00049 eFSCopyUnknownErr,
00050 eFSCopyDestExists,
00051 eFSCopyCantOpenSrc,
00052 eFSCopyCantCreateDest,
00053 eFSCopyCantOpenDest,
00054 eFSCopyReadSrcFailed,
00055 eFSCopyWriteDstFailed,
00056 eFSCopyDestIsSrc,
00057 eFSCopyDestInsideSrc,
00058 eFSCopyInsufficientSpace,
00059 eFSCopyBadParam,
00060 eFSCopyPermissionErr
00061 };
00065
00066 public:
00067 CascadeFSObject();
00076
00077 CascadeFSObject( const char *pName );
00087
00088 virtual ~CascadeFSObject();
00092
00093 public:
00094 virtual CascadeString GetName( void ) const;
00103
00104 virtual bool SetName( const char *inName );
00116
00117 virtual CascadeString GetFullPath( void ) const;
00126
00127 virtual CascadeString GetFilenameExtension( void ) const;
00143
00144 virtual CascadeFSObject * GetParent( void ) const;
00151
00152 virtual bool IsDirectory( void ) const = 0;
00159
00160 virtual bool Exists( void ) const;
00167
00168 static bool Exists( const CascadeString &inPath );
00176
00177 static bool IsDirectory( const CascadeString &inPath );
00185
00186 virtual bool IsRoot( void ) const;
00193
00194 protected:
00195 void * m_pFSObjInternal;
00196 CascadeString m_fullPath;
00197
00198 public:
00199 class Selector
00200 {
00201 public:
00202 typedef enum
00203 {
00204 eInvalid = 0,
00205 eFiles = 1,
00206 eDirectories = 2,
00207 eBoth = 3
00208 } SelectorTypeFilter;
00209 public:
00210 Selector() { mFilter = eBoth; }
00216
00217 virtual ~Selector() {}
00219
00220 virtual bool Match( CascadeFSObject &inObject ) = 0;
00227
00228 inline void SetSelectorTypeFilter( SelectorTypeFilter inFilter )
00229 { mFilter = inFilter; }
00236 protected:
00237 SelectorTypeFilter mFilter;
00238 };
00247
00248 class RegexpSelector : public Selector
00249 {
00250 public:
00251 RegexpSelector() { mpRegEx = new regex_t; mbCompiled = false; }
00253
00254 virtual ~RegexpSelector();
00259
00260 public:
00261 virtual bool Compile( const CascadeString &inExpression, int inCFlags = 0 );
00271
00272 virtual bool Match(CascadeFSObject &inObject);
00277 private:
00278 regex_t *mpRegEx;
00279 bool mbCompiled;
00280 };
00294
00295 class PermissionsSelector : public Selector
00296 {
00297 public:
00298 PermissionsSelector() {m_PermissionBits = 0;}
00302
00303 virtual ~PermissionsSelector(){}
00305
00306 public:
00307 virtual void SetPermissions(u32 inPermFlags);
00314
00315 virtual bool Match(CascadeFSObject &inObject);
00320 private:
00321 u32 m_PermissionBits;
00322 };
00332
00333 class TypeSelector : public Selector
00334 {
00335 public:
00336 TypeSelector() { mFilter = CascadeFSObject::Selector::eDirectories; }
00340 inline virtual bool Match(CascadeFSObject &inObject) {
00341 return ( mFilter == eBoth ||
00342 ( (mFilter == eDirectories) == inObject.IsDirectory() ) ); }
00347 };
00356
00357 };
00358
00359 #endif // #ifndef _ROKU_INCLUDE_CASCADE_UTIL_CASCADEFSOBJECT_H
00360
00362
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375