2 * Copyright 2010 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
5 #ifndef _ARCHIVING_MANAGERS_H
6 #define _ARCHIVING_MANAGERS_H
12 #include <ObjectList.h>
13 #include <MessagePrivate.h>
15 #include <Archivable.h>
18 #define NULL_TOKEN -42
24 extern const char* kManagedField
;
34 BManagerBase(BMessage
* topLevelArchive
, manager_type type
)
36 fTopLevelArchive(topLevelArchive
),
39 MarkArchive(topLevelArchive
);
44 ManagerPointer(const BMessage
* constArchive
)
49 BMessage
* archive
= const_cast<BMessage
*>(constArchive
);
51 return static_cast<BManagerBase
*>(
52 BMessage::Private(archive
).ArchivingPointer());
57 SetManagerPointer(BMessage
* archive
, BManagerBase
* manager
)
59 BMessage::Private(archive
).SetArchivingPointer(manager
);
64 MarkArchive(BMessage
* archive
)
66 BManagerBase
* manager
= ManagerPointer(archive
);
68 debugger("Overlapping managed archiving/unarchiving sessions!");
70 SetManagerPointer(archive
, this);
75 UnmarkArchive(BMessage
* archive
)
77 BManagerBase
* manager
= ManagerPointer(archive
);
79 SetManagerPointer(archive
, NULL
);
81 debugger("Overlapping managed archiving/unarchiving sessions!");
85 static BArchiveManager
* ArchiveManager(const BMessage
* archive
);
86 static BUnarchiveManager
* UnarchiveManager(const BMessage
* archive
);
91 UnmarkArchive(fTopLevelArchive
);
95 BMessage
* fTopLevelArchive
;
100 class BArchiveManager
: public BManagerBase
{
102 BArchiveManager(const BArchiver
* creator
);
104 status_t
GetTokenForArchivable(BArchivable
* archivable
,
107 status_t
ArchiveObject(BArchivable
* archivable
,
108 bool deep
, int32
& _token
);
110 bool IsArchived(BArchivable
* archivable
);
112 status_t
ArchiverLeaving(const BArchiver
* archiver
,
116 void RegisterArchivable(
117 const BArchivable
* archivable
);
123 typedef std::map
<const BArchivable
*, ArchiveInfo
> TokenMap
;
126 const BArchiver
* fCreator
;
133 class BUnarchiveManager
: public BManagerBase
{
135 BUnarchiveManager(BMessage
* topLevelArchive
);
137 status_t
GetArchivableForToken(int32 token
,
138 BUnarchiver::ownership_policy owning
,
139 BArchivable
*& _archivable
);
141 bool IsInstantiated(int32 token
);
143 void RegisterArchivable(BArchivable
* archivable
);
144 status_t
UnarchiverLeaving(const BUnarchiver
* archiver
,
148 void RelinquishOwnership(BArchivable
* archivable
);
149 void AssumeOwnership(BArchivable
* archivable
);
151 ~BUnarchiveManager();
153 status_t
_ExtractArchiveAt(int32 index
);
157 ArchiveInfo
* fObjects
;
159 int32 fTokenInProgress
;
165 } // namespace Archiving
166 } // namespace BPrivate
169 #endif // _ARCHIVING_MANAGERS_H