|
yast2-storage
|
00001 /* 00002 * Copyright (c) [2004-2009] Novell, Inc. 00003 * 00004 * All Rights Reserved. 00005 * 00006 * This program is free software; you can redistribute it and/or modify it 00007 * under the terms of version 2 of the GNU General Public License as published 00008 * by the Free Software Foundation. 00009 * 00010 * This program is distributed in the hope that it will be useful, but WITHOUT 00011 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00012 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 00013 * more details. 00014 * 00015 * You should have received a copy of the GNU General Public License along 00016 * with this program; if not, contact Novell, Inc. 00017 * 00018 * To contact Novell about this file by physical or electronic mail, you may 00019 * find current contact information at www.novell.com. 00020 */ 00021 00022 00023 #ifndef LOOP_CO_H 00024 #define LOOP_CO_H 00025 00026 #include "storage/Container.h" 00027 #include "storage/Loop.h" 00028 00029 00030 namespace storage 00031 { 00032 class SystemInfo; 00033 00034 00035 class LoopCo : public Container 00036 { 00037 friend class Storage; 00038 00039 public: 00040 00041 LoopCo(Storage * const s); 00042 LoopCo(Storage * const s, SystemInfo& systeminfo); 00043 LoopCo(const LoopCo& c); 00044 virtual ~LoopCo(); 00045 00046 static storage::CType staticType() { return storage::LOOP; } 00047 friend std::ostream& operator<< (std::ostream&, const LoopCo& ); 00048 00049 int createLoop( const string& file, bool reuseExisting, 00050 unsigned long long sizeK, bool dmcr, string& device ); 00051 int updateLoop( const string& device, const string& file, 00052 bool reuseExisting, unsigned long long sizeK ); 00053 int removeLoop( const string& file, bool removeFile = false ); 00054 00055 list<unsigned> usedNumbers() const; 00056 00057 int removeVolume( Volume* v ); 00058 bool equalContent( const Container& rhs ) const; 00059 00060 virtual void logDifferenceWithVolumes(std::ostream& log, const Container& rhs) const; 00061 00062 protected: 00063 // iterators over LOOP volumes 00064 // protected typedefs for iterators over LOOP volumes 00065 typedef CastIterator<VIter, Loop *> LoopInter; 00066 typedef CastIterator<CVIter, const Loop *> LoopCInter; 00067 template< class Pred > 00068 struct LoopPI { typedef ContainerIter<Pred, LoopInter> type; }; 00069 template< class Pred > 00070 struct LoopCPI { typedef ContainerIter<Pred, LoopCInter> type; }; 00071 typedef CheckFnc<const Loop> CheckFncLoop; 00072 typedef CheckerIterator< CheckFncLoop, LoopPI<CheckFncLoop>::type, 00073 LoopInter, Loop > LoopPIterator; 00074 typedef CheckerIterator< CheckFncLoop, LoopCPI<CheckFncLoop>::type, 00075 LoopCInter, const Loop > LoopCPIterator; 00076 typedef DerefIterator<LoopPIterator,Loop> LoopIter; 00077 typedef DerefIterator<LoopCPIterator,const Loop> ConstLoopIter; 00078 typedef IterPair<LoopIter> LoopPair; 00079 typedef IterPair<ConstLoopIter> ConstLoopPair; 00080 00081 LoopPair loopPair( bool (* Check)( const Loop& )=NULL) 00082 { 00083 return( LoopPair( loopBegin( Check ), loopEnd( Check ) )); 00084 } 00085 LoopIter loopBegin( bool (* Check)( const Loop& )=NULL) 00086 { 00087 IterPair<LoopInter> p( (LoopInter(begin())), (LoopInter(end())) ); 00088 return( LoopIter( LoopPIterator( p, Check )) ); 00089 } 00090 LoopIter loopEnd( bool (* Check)( const Loop& )=NULL) 00091 { 00092 IterPair<LoopInter> p( (LoopInter(begin())), (LoopInter(end())) ); 00093 return( LoopIter( LoopPIterator( p, Check, true )) ); 00094 } 00095 00096 ConstLoopPair loopPair( bool (* Check)( const Loop& )=NULL) const 00097 { 00098 return( ConstLoopPair( loopBegin( Check ), loopEnd( Check ) )); 00099 } 00100 ConstLoopIter loopBegin( bool (* Check)( const Loop& )=NULL) const 00101 { 00102 IterPair<LoopCInter> p( (LoopCInter(begin())), (LoopCInter(end())) ); 00103 return( ConstLoopIter( LoopCPIterator( p, Check )) ); 00104 } 00105 ConstLoopIter loopEnd( bool (* Check)( const Loop& )=NULL) const 00106 { 00107 IterPair<LoopCInter> p( (LoopCInter(begin())), (LoopCInter(end())) ); 00108 return( ConstLoopIter( LoopCPIterator( p, Check, true )) ); 00109 } 00110 00111 void getLoopData(SystemInfo& systeminfo); 00112 bool findLoop( unsigned num, LoopIter& i ); 00113 bool findLoop( unsigned num ); 00114 bool findLoop( const string& file, LoopIter& i ); 00115 bool findLoop( const string& file ); 00116 bool findLoopDev( const string& dev, LoopIter& i ); 00117 void addLoop( Loop* m ); 00118 00119 virtual void print( std::ostream& s ) const { s << *this; } 00120 virtual Container* getCopy() const { return( new LoopCo( *this ) ); } 00121 00122 int doCreate( Volume* v ); 00123 int doRemove( Volume* v ); 00124 00125 private: 00126 00127 LoopCo& operator=(const LoopCo&); // disallow 00128 00129 }; 00130 00131 } 00132 00133 #endif
1.7.3