1/*
2 * Copyright 2011, Haiku, Inc.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _PACKAGE__PACKAGE_RESOLVABLE_EXPRESSION_H_
6#define _PACKAGE__PACKAGE_RESOLVABLE_EXPRESSION_H_
7
8
9#include <String.h>
10
11#include <package/PackageResolvableOperator.h>
12#include <package/PackageVersion.h>
13
14
15namespace BPackageKit {
16
17
18namespace BHPKG {
19	class BPackageResolvableExpressionData;
20}
21using BHPKG::BPackageResolvableExpressionData;
22
23
24/*
25 * Expresses a constraint on a specific resolvable, either just a name
26 * or a name plus a relational operator and a version.
27 * Instances of these will be matched against all the BPackageResolvable(s)
28 * of individual packages in order to solve a package management request.
29 *
30 * 		resolvable-expression ::= <name>[<op><version>]
31 * 		op                    ::= '<' | '<=' | '==' | '>=' | '>'
32 *
33 * String examples:
34 * 		haiku==r1
35 * 		lib:libssl==0.9.8
36 * 		subversion>=1.5
37 * 		cmd:svn
38 */
39class BPackageResolvableExpression {
40public:
41								BPackageResolvableExpression();
42								BPackageResolvableExpression(
43									const BPackageResolvableExpressionData& data
44									);
45								BPackageResolvableExpression(
46									const BString& name,
47									BPackageResolvableOperator _op
48										= B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT,
49									const BPackageVersion& version
50										= BPackageVersion());
51
52			status_t			InitCheck() const;
53
54			const BString&		Name() const;
55			BPackageResolvableOperator	Operator() const;
56			const BPackageVersion& Version() const;
57
58			BString				ToString() const;
59
60			void				SetTo(const BString& name,
61									BPackageResolvableOperator _op
62										= B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT,
63									const BPackageVersion& version
64										= BPackageVersion());
65			void				Clear();
66
67public:
68	static	const char*			kOperatorNames[];
69
70private:
71			BString				fName;
72			BPackageResolvableOperator	fOperator;
73			BPackageVersion		fVersion;
74};
75
76
77}	// namespace BPackageKit
78
79
80#endif	// _PACKAGE__PACKAGE_RESOLVABLE_EXPRESSION_H_
81