xref: /haiku/headers/private/storage/MutablePartition.h (revision 4a55cc230cf7566cadcbb23b1928eefff8aea9a2)
1 /*
2  * Copyright 2007, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _MUTABLE_PARTITION_H
6 #define _MUTABLE_PARTITION_H
7 
8 #include <List.h>
9 #include <Partition.h>
10 
11 
12 struct user_partition_data;
13 
14 
15 class BMutablePartition {
16 public:
17 			void				UninitializeContents();
18 
19 			off_t				Offset() const;
20 			void				SetOffset(off_t offset);
21 
22 			off_t				Size() const;
23 			void				SetSize(off_t size);
24 
25 			off_t				ContentSize() const;
26 			void				SetContentSize(off_t size);
27 
28 			off_t				BlockSize() const;
29 			void				SetBlockSize(off_t blockSize);
30 
31 			uint32				Status() const;
32 			void				SetStatus(uint32 status);
33 
34 			uint32				Flags() const;
35 			void				SetFlags(uint32 flags);
36 			void				ClearFlags(uint32 flags);
37 
38 			dev_t				VolumeID() const;
39 			void				SetVolumeID(dev_t volumeID);
40 
41 			int32				Index() const;
42 
43 			const char*			Name() const;
44 			status_t			SetName(const char* name);
45 
46 			BString				ContentName() const;
47 			status_t			SetContentName(const char* name);
48 
49 			const char*			Type() const;
50 			status_t			SetType(const char* type);
51 
52 			const char*			ContentType() const;
53 			status_t			SetContentType(const char* type);
54 
55 			const char*			Parameters() const;
56 			status_t			SetParameters(const char* parameters);
57 
58 			const char*			ContentParameters() const;
59 			status_t			SetContentParameters(const char* parameters);
60 
61 			status_t			CreateChild(int32 index,
62 									BMutablePartition** child);
63 			status_t			CreateChild(int32 index, const char* type,
64 									const char* name, const char* parameters,
65 									BMutablePartition** child);
66 			status_t			DeleteChild(int32 index);
67 			status_t			DeleteChild(BMutablePartition* child);
68 			void				DeleteAllChildren();
69 
70 			BMutablePartition*	Parent() const;
71 			BMutablePartition*	ChildAt(int32 index) const;
72 			int32				CountChildren() const;
73 			int32				IndexOfChild(BMutablePartition* child) const;
74 
75 			void				SetChangeFlags(uint32 flags);
76 			uint32				ChangeFlags() const;
77 			void				Changed(uint32 flags, uint32 clearFlags = 0);
78 
79 			// for the partitioning system managing the parent
80 			void*				ChildCookie() const;
81 			void				SetChildCookie(void* cookie);
82 
83 private:
84 								BMutablePartition(
85 									BPartition::Delegate* delegate);
86 								~BMutablePartition();
87 
88 			status_t			Init(const user_partition_data* partitionData,
89 									BMutablePartition* parent);
90 
91 			const user_partition_data* PartitionData() const;
92 
93 private:
94 			friend class BPartition::Delegate;
95 
96 			BPartition::Delegate* GetDelegate() const;
97 
98 			BPartition::Delegate* fDelegate;
99 			user_partition_data* fData;
100 			BMutablePartition*	fParent;
101 			BList				fChildren;
102 			uint32				fChangeFlags;
103 			void*				fChildCookie;
104 };
105 
106 
107 #endif	// _MUTABLE_PARTITION_H
108