1/*
2 * Copyright 2011, Oliver Tappe <zooey@hirschkaefer.de>
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include <package/PackageResolvableExpression.h>
8
9#include <package/hpkg/PackageInfoAttributeValue.h>
10
11
12namespace BPackageKit {
13
14
15const char*
16BPackageResolvableExpression
17::kOperatorNames[B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT] = {
18	"<",
19	"<=",
20	"==",
21	"!=",
22	">=",
23	">",
24};
25
26
27BPackageResolvableExpression::BPackageResolvableExpression()
28	:
29	fOperator(B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT)
30{
31}
32
33
34BPackageResolvableExpression::BPackageResolvableExpression(
35	const BPackageResolvableExpressionData& data)
36	:
37	fName(data.name),
38	fOperator(data.op),
39	fVersion(data.version)
40{
41	fName.ToLower();
42}
43
44
45BPackageResolvableExpression::BPackageResolvableExpression(const BString& name,
46	BPackageResolvableOperator _operator, const BPackageVersion& version)
47	:
48	fName(name),
49	fOperator(_operator),
50	fVersion(version)
51{
52	fName.ToLower();
53}
54
55
56status_t
57BPackageResolvableExpression::InitCheck() const
58{
59	if (fName.Length() == 0)
60		return B_NO_INIT;
61
62	// either both or none of operator and version must be set
63	if ((fOperator >= 0 && fOperator < B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT)
64		!= (fVersion.InitCheck() == B_OK))
65		return B_NO_INIT;
66
67	return B_OK;
68}
69
70
71const BString&
72BPackageResolvableExpression::Name() const
73{
74	return fName;
75}
76
77
78BPackageResolvableOperator
79BPackageResolvableExpression::Operator() const
80{
81	return fOperator;
82}
83
84
85const BPackageVersion&
86BPackageResolvableExpression::Version() const
87{
88	return fVersion;
89}
90
91
92BString
93BPackageResolvableExpression::ToString() const
94{
95	BString string = fName;
96
97	if (fVersion.InitCheck() == B_OK)
98		string << fOperator << fVersion.ToString();
99
100	return string;
101}
102
103
104void
105BPackageResolvableExpression::SetTo(const BString& name,
106	BPackageResolvableOperator _operator, const BPackageVersion& version)
107{
108	fName = name;
109	fOperator = _operator;
110	fVersion = version;
111
112	fName.ToLower();
113}
114
115
116void
117BPackageResolvableExpression::Clear()
118{
119	fName.Truncate(0);
120	fOperator = B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT;
121	fVersion.Clear();
122}
123
124
125}	// namespace BPackageKit
126