Files
haiku-beta6/src/kits/storage/PartitionDelegate.h
T
Ingo Weinhold 15ed7c71d6 More fleshing out the disk system add-on interface and related classes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22503 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-10 21:35:22 +00:00

198 lines
6.4 KiB
C++

/*
* Copyright 2007, Ingo Weinhold, [email protected].
* Distributed under the terms of the MIT License.
*/
#ifndef _PARTITION_DELEGATE_H
#define _PARTITION_DELEGATE_H
#include <MutablePartition.h>
#include <Partition.h>
class BDiskSystemAddOn;
class BPartitionHandle;
class BPartition::Delegate {
public:
Delegate(BPartition* partition);
virtual ~Delegate();
virtual status_t Init(const user_partition_data* partitionData)
= 0;
BPartition* Partition() const { return fPartition; }
virtual const user_partition_data* PartitionData() const = 0;
virtual Delegate* ChildAt(int32 index) const = 0;
virtual int32 CountChildren() const = 0;
virtual uint32 SupportedOperations(uint32 mask) = 0;
virtual uint32 SupportedChildOperations(Delegate* child,
uint32 mask) = 0;
// Self Modification
virtual status_t Defragment() = 0;
virtual status_t Repair(bool checkOnly) = 0;
virtual status_t ValidateResize(off_t* size) const = 0;
virtual status_t ValidateResizeChild(Delegate* child,
off_t* size) const = 0;
virtual status_t Resize(off_t size) = 0;
virtual status_t ResizeChild(Delegate* child, off_t size) = 0;
virtual status_t ValidateMove(off_t* offset) const = 0;
virtual status_t ValidateMoveChild(Delegate* child,
off_t* offset) const = 0;
virtual status_t Move(off_t offset) = 0;
virtual status_t MoveChild(Delegate* child, off_t offset) = 0;
virtual status_t ValidateSetContentName(BString* name) const = 0;
virtual status_t ValidateSetName(Delegate* child,
BString* name) const = 0;
virtual status_t SetContentName(const char* name) = 0;
virtual status_t SetName(Delegate* child, const char* name) = 0;
virtual status_t ValidateSetType(Delegate* child,
const char* type) const = 0;
virtual status_t SetType(Delegate* child, const char* type) = 0;
virtual status_t GetContentParameterEditor(
BDiskDeviceParameterEditor** editor)
const = 0;
virtual status_t GetParameterEditor(Delegate* child,
BDiskDeviceParameterEditor** editor)
const = 0;
virtual status_t SetContentParameters(
const char* parameters) = 0;
virtual status_t SetParameters(Delegate* child,
const char* parameters) = 0;
virtual bool CanInitialize(const char* diskSystem) const = 0;
virtual status_t GetInitializationParameterEditor(
const char* system,
BDiskDeviceParameterEditor** editor)
const = 0;
virtual status_t ValidateInitialize(const char* diskSystem,
BString* name, const char* parameters) = 0;
virtual status_t Initialize(const char* diskSystem,
const char* name,
const char* parameters) = 0;
virtual status_t Uninitialize() = 0;
// Modification of child partitions
virtual status_t GetChildCreationParameterEditor(
const char* system,
BDiskDeviceParameterEditor** editor)
const = 0;
virtual status_t ValidateCreateChild(off_t* start, off_t* size,
const char* type,
const char* parameters) const = 0;
virtual status_t CreateChild(off_t start, off_t size,
const char* type, const char* parameters,
BPartition** child) = 0;
virtual status_t DeleteChild(Delegate* child) = 0;
protected:
BPartition* fPartition;
};
class BPartition::MutableDelegate : BPartition::Delegate {
public:
MutableDelegate(BPartition* partition);
virtual ~MutableDelegate();
BMutablePartition* MutablePartition();
const BMutablePartition* MutablePartition() const;
virtual status_t Init(const user_partition_data* partitionData);
virtual const user_partition_data* PartitionData() const;
virtual Delegate* ChildAt(int32 index) const;
virtual int32 CountChildren() const;
virtual uint32 SupportedOperations(uint32 mask);
virtual uint32 SupportedChildOperations(Delegate* child,
uint32 mask);
// Self Modification
virtual status_t Defragment();
virtual status_t Repair(bool checkOnly);
virtual status_t ValidateResize(off_t* size) const = 0;
virtual status_t ValidateResizeChild(Delegate* child,
off_t* size) const = 0;
virtual status_t Resize(off_t size) = 0;
virtual status_t ResizeChild(Delegate* child, off_t size) = 0;
virtual status_t ValidateMove(off_t* offset) const = 0;
virtual status_t ValidateMoveChild(Delegate* child,
off_t* offset) const = 0;
virtual status_t Move(off_t offset) = 0;
virtual status_t MoveChild(Delegate* child, off_t offset) = 0;
virtual status_t ValidateSetContentName(BString* name) const;
virtual status_t ValidateSetName(Delegate* child,
BString* name) const;
virtual status_t SetContentName(const char* name);
virtual status_t SetName(Delegate* child, const char* name);
virtual status_t ValidateSetType(Delegate* child,
const char* type) const;
virtual status_t SetType(Delegate* child, const char* type);
virtual status_t GetContentParameterEditor(
BDiskDeviceParameterEditor** editor) const;
virtual status_t GetParameterEditor(Delegate* child,
BDiskDeviceParameterEditor** editor) const;
virtual status_t SetContentParameters(const char* parameters);
virtual status_t SetParameters(Delegate* child,
const char* parameters);
virtual bool CanInitialize(const char* diskSystem) const;
virtual status_t GetInitializationParameterEditor(
const char* system,
BDiskDeviceParameterEditor** editor) const;
virtual status_t ValidateInitialize(const char* diskSystem,
BString* name, const char* parameters);
virtual status_t Initialize(const char* diskSystem,
const char* name,
const char* parameters);
virtual status_t Uninitialize();
// Modification of child partitions
virtual status_t GetChildCreationParameterEditor(
const char* system,
BDiskDeviceParameterEditor** editor) const;
virtual status_t ValidateCreateChild(off_t* start, off_t* size,
const char* type,
const char* parameters) const;
virtual status_t CreateChild(off_t start, off_t size,
const char* type, const char* parameters,
BPartition** child);
virtual status_t DeleteChild(Delegate* child);
private:
void _FreeHandle();
private:
// friend class BMutablePartition;
BMutablePartition fMutablePartition;
BDiskSystemAddOn* fDiskSystem;
BPartitionHandle* fPartitionHandle;
};
#endif // _PARTITION_DELEGATE_H