00001
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