text: /*
   * Copyright 2007, Ingo Weinhold, ingo_weinhold@gmx.de.
   * Distributed under the terms of the MIT License.
   */
  #ifndef _MUTABLE_PARTITION_H
  #define _MUTABLE_PARTITION_H
  
  #include <kits/support/List.h>
  #include <Partition.h>
  
  
  struct user_partition_data;
  
  
  class BMutablePartition {
  public:
  			void				UninitializeContents();
  
  			off_t				Offset() const;
  			void				SetOffset(off_t offset);
  
  			off_t				Size() const;
  			void				SetSize(off_t size);
  
  			off_t				ContentSize() const;
  			void				SetContentSize(off_t size);
  
  			off_t				BlockSize() const;
  			void				SetBlockSize(off_t blockSize);
  
  			uint32				Status() const;
  			void				SetStatus(uint32 status);
  
  			uint32				Flags() const;
  			void				SetFlags(uint32 flags);
  			void				ClearFlags(uint32 flags);
  
  			dev_t				VolumeID() const;
  			void				SetVolumeID(dev_t volumeID);
  
  			int32				Index() const;
  
  			const char*			Name() const;
  			status_t			SetName(const char* name);
  
  			const char*			ContentName() const;
  			status_t			SetContentName(const char* name);
  
  			const char*			Type() const;
  			status_t			SetType(const char* type);
  
  			const char*			ContentType() const;
  			status_t			SetContentType(const char* type);
  
  			const char*			Parameters() const;
  			status_t			SetParameters(const char* parameters);
  
  			const char*			ContentParameters() const;
  			status_t			SetContentParameters(const char* parameters);
  
  			status_t			CreateChild(int32 index,
  									BMutablePartition** child);
  			status_t			CreateChild(int32 index, const char* type,
  									const char* name, const char* parameters,
  									BMutablePartition** child);
  			status_t			DeleteChild(int32 index);
  			status_t			DeleteChild(BMutablePartition* child);
  			void				DeleteAllChildren();
  
  			BMutablePartition*	Parent() const;
  			BMutablePartition*	ChildAt(int32 index) const;
  			int32				CountChildren() const;
  			int32				IndexOfChild(BMutablePartition* child) const;
  
  			void				SetChangeFlags(uint32 flags);
  			uint32				ChangeFlags() const;
  			void				Changed(uint32 flags, uint32 clearFlags = 0);
  
  			// for the partitioning system managing the parent
  			void*				ChildCookie() const;
  			void				SetChildCookie(void* cookie);
  
  private:
  								BMutablePartition(
  									BPartition::Delegate* delegate);
  								~BMutablePartition();
  
  			status_t			Init(const user_partition_data* partitionData,
  									BMutablePartition* parent);
  
  			const user_partition_data* PartitionData() const;
  
  private:
  			friend class BPartition::Delegate;
  
  			BPartition::Delegate* GetDelegate() const;
  
  			BPartition::Delegate* fDelegate;
  			user_partition_data* fData;
  			BMutablePartition*	fParent;
  			BList				fChildren;
  			uint32				fChangeFlags;
  			void*				fChildCookie;
  };
  
  
  #endif	// _MUTABLE_PARTITION_H
  