00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef TMPFS_CO_H
00024 #define TMPFS_CO_H
00025
00026 #include "storage/Container.h"
00027 #include "storage/Tmpfs.h"
00028
00029
00030 namespace storage
00031 {
00032 class SystemInfo;
00033
00034
00035 class TmpfsCo : public Container
00036 {
00037 friend class Storage;
00038
00039 public:
00040
00041 TmpfsCo(Storage * const s);
00042 TmpfsCo(Storage * const s, const EtcFstab& fstab, SystemInfo& systeminfo);
00043 TmpfsCo(const TmpfsCo& c);
00044 virtual ~TmpfsCo();
00045
00046 int addTmpfs( const string& mp, const string &opts );
00047 int removeTmpfs( const string& mp, bool silent=false );
00048
00049 int doRemove( Volume* v );
00050
00051 static storage::CType staticType() { return storage::TMPFSC; }
00052 friend std::ostream& operator<< (std::ostream&, const TmpfsCo& );
00053
00054 int removeVolume( Volume* v );
00055 int removeVolume( Volume* v, bool quiet );
00056 bool equalContent( const Container& rhs ) const;
00057 void saveData(xmlNode* node) const;
00058
00059 virtual void logDifferenceWithVolumes(std::ostream& log, const Container& rhs) const;
00060 virtual void logData(const string& Dir) const;
00061
00062
00063 protected:
00064
00065
00066 typedef CastIterator<VIter, Tmpfs *> TmpfsInter;
00067 typedef CastIterator<CVIter, const Tmpfs *> TmpfsCInter;
00068 template< class Pred >
00069 struct TmpfsPI { typedef ContainerIter<Pred, TmpfsInter> type; };
00070 template< class Pred >
00071 struct TmpfsCPI { typedef ContainerIter<Pred, TmpfsCInter> type; };
00072 typedef CheckFnc<const Tmpfs> CheckFncTmpfs;
00073 typedef CheckerIterator< CheckFncTmpfs, TmpfsPI<CheckFncTmpfs>::type,
00074 TmpfsInter, Tmpfs > TmpfsPIterator;
00075 typedef CheckerIterator< CheckFncTmpfs, TmpfsCPI<CheckFncTmpfs>::type,
00076 TmpfsCInter, const Tmpfs > TmpfsCPIterator;
00077 typedef DerefIterator<TmpfsPIterator,Tmpfs> TmpfsIter;
00078 typedef DerefIterator<TmpfsCPIterator,const Tmpfs> ConstTmpfsIter;
00079 typedef IterPair<TmpfsIter> TmpfsPair;
00080 typedef IterPair<ConstTmpfsIter> ConstTmpfsPair;
00081
00082 TmpfsPair tmpfsPair( bool (* Check)( const Tmpfs& )=NULL)
00083 {
00084 return( TmpfsPair( tmpfsBegin( Check ), tmpfsEnd( Check ) ));
00085 }
00086 TmpfsIter tmpfsBegin( bool (* Check)( const Tmpfs& )=NULL)
00087 {
00088 IterPair<TmpfsInter> p( (TmpfsInter(begin())), (TmpfsInter(end())) );
00089 return( TmpfsIter( TmpfsPIterator( p, Check )) );
00090 }
00091 TmpfsIter tmpfsEnd( bool (* Check)( const Tmpfs& )=NULL)
00092 {
00093 IterPair<TmpfsInter> p( (TmpfsInter(begin())), (TmpfsInter(end())) );
00094 return( TmpfsIter( TmpfsPIterator( p, Check, true )) );
00095 }
00096
00097 ConstTmpfsPair tmpfsPair( bool (* Check)( const Tmpfs& )=NULL) const
00098 {
00099 return( ConstTmpfsPair( tmpfsBegin( Check ), tmpfsEnd( Check ) ));
00100 }
00101 ConstTmpfsIter tmpfsBegin( bool (* Check)( const Tmpfs& )=NULL) const
00102 {
00103 IterPair<TmpfsCInter> p( (TmpfsCInter(begin())), (TmpfsCInter(end())) );
00104 return( ConstTmpfsIter( TmpfsCPIterator( p, Check )) );
00105 }
00106 ConstTmpfsIter tmpfsEnd( bool (* Check)( const Tmpfs& )=NULL) const
00107 {
00108 IterPair<TmpfsCInter> p( (TmpfsCInter(begin())), (TmpfsCInter(end())) );
00109 return( ConstTmpfsIter( TmpfsCPIterator( p, Check, true )) );
00110 }
00111
00112 void getTmpfsData(const EtcFstab& fstab, SystemInfo& systeminfo);
00113 bool findTmpfs( const string& mp, TmpfsIter& i );
00114
00115 virtual void print( std::ostream& s ) const { s << *this; }
00116 virtual Container* getCopy() const { return( new TmpfsCo( *this ) ); }
00117
00118 private:
00119
00120 TmpfsCo& operator=(const TmpfsCo&);
00121
00122 };
00123
00124 }
00125
00126 #endif