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