1/*
2 * Copyright 2011, Haiku, Inc.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _PACKAGE__PACKAGE_RESOLVABLE_H_
6#define _PACKAGE__PACKAGE_RESOLVABLE_H_
7
8
9#include <String.h>
10
11#include <package/PackageResolvableType.h>
12#include <package/PackageVersion.h>
13
14
15namespace BPackageKit {
16
17
18namespace BHPKG {
19	class BPackageResolvableData;
20}
21using BHPKG::BPackageResolvableData;
22
23
24/*
25 * Defines a resolvable (something other packages can depend upon).
26 * Each resolvable is defined as a name (with an optional type prefix),
27 * an optional version, and an optional compatibility version (the least
28 * version the resolvable is backwards compatible with).
29 *
30 * 		resolvable ::= <name>['='<version>]['compat' '>=' <version>]
31 * 		name       ::= [<type>':']<word>
32 * 		type       ::= 'lib' | 'cmd' | 'app' | 'add_on'
33 *
34 * The type doesn't have any specific meaning to the dependency resolver,
35 * it just facilitates doing specific queries on the repository (like "is
36 * there any package providing the 'svn' command that the user just typed?").
37 * At a later stage, more types may be added in order to declare additional
38 * entities, e.g. translators.
39 *
40 * String examples:
41 * 		haiku=r1
42 * 		lib:libssl=0.9.8i
43 * 		subversion=1.5 compat>=1.0
44 * 		cmd:svn
45 */
46class BPackageResolvable {
47public:
48								BPackageResolvable();
49								BPackageResolvable(
50									const BPackageResolvableData& data);
51								BPackageResolvable(const BString& name,
52									BPackageResolvableType type
53										= B_PACKAGE_RESOLVABLE_TYPE_DEFAULT,
54									const BPackageVersion& version
55										= BPackageVersion(),
56									const BPackageVersion& compatibleVersion
57										= BPackageVersion());
58
59			status_t			InitCheck() const;
60
61			const BString&		Name() const;
62			BPackageResolvableType	Type() const;
63			const BPackageVersion& Version() const;
64			const BPackageVersion& CompatibleVersion() const;
65
66			BString				ToString() const;
67
68			void				SetTo(const BString& name,
69									BPackageResolvableType type
70										= B_PACKAGE_RESOLVABLE_TYPE_DEFAULT,
71									const BPackageVersion& version
72										= BPackageVersion(),
73									const BPackageVersion& compatibleVersion
74										= BPackageVersion());
75			void				Clear();
76
77public:
78	static	const char*			kTypeNames[];
79
80private:
81			BString				fName;
82			BPackageResolvableType	fType;
83			BPackageVersion		fVersion;
84			BPackageVersion		fCompatibleVersion;
85};
86
87
88}	// namespace BPackageKit
89
90
91#endif	// _PACKAGE__PACKAGE_RESOLVABLE_H_
92