Stat.h

00001 // $Id: Stat.h 21 2010-09-05 04:18:17Z cschwarz1 $
00002 
00003 #ifndef BASE_STAT_H
00004 #define BASE_STAT_H
00005 
00006 #include "DateTime.h"
00007 #include "SizeTraits.h"
00008 
00009 namespace base {
00011 
00015     class PPBASE_EXPORT StatBase {
00016     public:
00018         StatBase();
00019 
00020     #ifdef _WIN32
00021 
00022 
00026         StatBase(const WIN32_FIND_DATAA &st, bool utc = false);
00027 
00029 
00033         StatBase(const WIN32_FIND_DATAW &st, bool utc = false);
00034 
00036 
00040         StatBase(const BY_HANDLE_FILE_INFORMATION &st, bool utc = false);
00041     #else
00042 
00043 
00052         StatBase(unsigned blocks, mode_t mode, unsigned inode, time_t atime, time_t ctime, time_t mtime, bool utc = false);
00053     #endif
00054 
00056 
00059         unsigned getBlocks() const;
00060 
00062 
00065         unsigned getInode() const;
00066 
00068 
00071         const DateTime &getATime() const;
00072 
00074 
00077         const DateTime &getCTime(void ) const;
00078     
00080 
00083         const DateTime &getMTime() const;
00084 
00086 
00089         bool isDirectory() const;
00090 
00091     private:
00092         unsigned     _blocks;   
00093         bool         _dir;      
00094         unsigned     _inode;    
00095         DateTime     _tatime;   
00096         DateTime     _tctime;   
00097         DateTime     _tmtime;   
00098     };
00099 
00101     template<class sizeT, class traits = SizeTraits<sizeT> > class StatT: public StatBase {
00102     public:
00104         StatT(): StatBase() {
00105             _size = 0;
00106         }
00107 
00108     #ifdef _WIN32
00109 
00110 
00114         StatT(const WIN32_FIND_DATAA &st, bool utc = false): StatBase(st, utc) {
00115             _size = traits::size(st);
00116         }
00117 
00119 
00123         StatT(const WIN32_FIND_DATAW &st, bool utc = false): StatBase(st, utc) {
00124             _size = traits::size(st);
00125         }
00126 
00128 
00132         StatT(const BY_HANDLE_FILE_INFORMATION &st, bool utc = false): StatBase(st, utc) {
00133             _size = traits::size(st);
00134         }
00135     #else
00136         typedef typename traits::stat_type stat_type;  
00137 
00139 
00143         StatT(const stat_type &st, bool utc = false):
00144             StatBase(st.st_blocks, st.st_mode, st.st_ino, st.st_atime, st.st_ctime, st.st_mtime, utc) {
00145             _size = st.st_size;
00146         }
00147     #endif
00148 
00150 
00153         sizeT getSize() const {
00154             return _size;
00155         }
00156 
00157     private:
00158         sizeT _size;     
00159     };
00160 
00161     typedef StatT<size_t>       Stat;   
00162     typedef StatT<u_longlong_t> LStat;  
00163 }
00164 
00165 #endif