1/*
2 * Copyright 2011, Oliver Tappe <zooey@hirschkaefer.de>
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _PACKAGE__HPKG__PRIVATE__REPOSITORY_WRITER_IMPL_H_
6#define _PACKAGE__HPKG__PRIVATE__REPOSITORY_WRITER_IMPL_H_
7
8
9#include <Entry.h>
10
11#include <package/hpkg/PackageContentHandler.h>
12#include <package/hpkg/RepositoryWriter.h>
13#include <package/hpkg/WriterImplBase.h>
14#include <package/PackageInfo.h>
15
16
17namespace BPackageKit {
18
19
20namespace BHPKG {
21
22
23class BPackageEntry;
24class BPackageEntryAttribute;
25class BPackageInfoAttributeValue;
26
27
28namespace BPrivate {
29
30
31struct hpkg_header;
32
33class RepositoryWriterImpl : public WriterImplBase {
34	typedef	WriterImplBase		inherited;
35
36public:
37								RepositoryWriterImpl(
38									BRepositoryWriterListener* listener,
39									BRepositoryInfo* repositoryInfo);
40								~RepositoryWriterImpl();
41
42			status_t			Init(const char* fileName);
43			status_t			AddPackage(const BEntry& packageEntry);
44			status_t			Finish();
45
46private:
47			status_t			_Init(const char* fileName);
48			status_t			_AddPackage(const BEntry& packageEntry);
49			status_t			_Finish();
50
51			status_t			_RegisterCurrentPackageInfo();
52			status_t			_WriteRepositoryInfo(hpkg_repo_header& header,
53									ssize_t& _infoLengthCompressed);
54			off_t				_WritePackageAttributes(
55									hpkg_repo_header& header, off_t startOffset,
56									ssize_t& _packagesLengthCompressed);
57
58			struct PackageNameSet;
59
60private:
61			BRepositoryWriterListener*	fListener;
62
63			BRepositoryInfo*	fRepositoryInfo;
64
65			BPackageInfo		fPackageInfo;
66			uint32				fPackageCount;
67			PackageNameSet*		fPackageNames;
68};
69
70
71}	// namespace BPrivate
72
73}	// namespace BHPKG
74
75}	// namespace BPackageKit
76
77
78#endif	// _PACKAGE__HPKG__PRIVATE__REPOSITORY_WRITER_IMPL_H_
79