00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 // $Id: fragment.h,v 1.29 2005/10/23 12:02:18 oliver Exp $ 00005 // 00006 00007 #ifndef BALL_KERNEL_FRAGMENT_H 00008 #define BALL_KERNEL_FRAGMENT_H 00009 00010 #ifndef BALL_KERNEL_ATOMCONTAINER_H 00011 # include <BALL/KERNEL/atomContainer.h> 00012 #endif 00013 00014 namespace BALL 00015 { 00022 class BALL_EXPORT Fragment 00023 : public AtomContainer 00024 { 00025 public: 00026 00027 BALL_CREATE_DEEP(Fragment) 00028 00029 00032 00034 enum Property 00035 { 00037 NUMBER_OF_PROPERTIES = AtomContainer::NUMBER_OF_PROPERTIES 00038 }; 00039 00041 00044 00047 Fragment(); 00048 00051 Fragment(const Fragment& fragment, bool deep = true); 00052 00055 Fragment(const String& name); 00056 00059 virtual ~Fragment(); 00060 00062 00065 00069 void persistentWrite(PersistenceManager& pm, const char* name = 0) const 00070 throw(Exception::GeneralException); 00071 00075 void persistentRead(PersistenceManager& pm) 00076 throw(Exception::GeneralException); 00077 00079 00082 00087 Fragment& operator = (const Fragment& fragment); 00088 00090 00095 bool operator == (const Fragment& fragment) const; 00096 00100 bool operator != (const Fragment& fragment) const; 00101 00105 00112 virtual void dump(std::ostream& s = std::cout, Size depth = 0) const; 00113 00115 }; 00116 00117 // required for visual studio 00118 #ifdef BALL_COMPILER_MSVC 00119 template class BALL_EXPORT UnaryProcessor<Fragment>; 00120 #endif 00121 } // namespace BALL 00122 00123 #endif // BALL_KERNEL_FRAGMENT_H