From 531d191219e13e47ccaa8935e25a86b7caa10497 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Fri, 4 Feb 2011 17:34:19 +0000 Subject: [PATCH] * made resolvable expression operator an enum instead of a string * fixed a couple of copy'n'paste bugs during parsing of resolvable expression lists (they were all added as 'requires') git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40353 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../os/package/PackageResolvableExpression.h | 14 ++++++--- src/kits/package/PackageInfo.cpp | 23 ++++++++------ .../package/PackageResolvableExpression.cpp | 30 ++++++++++++++----- 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/headers/os/package/PackageResolvableExpression.h b/headers/os/package/PackageResolvableExpression.h index eb80b5fe9a..f5c70126ec 100644 --- a/headers/os/package/PackageResolvableExpression.h +++ b/headers/os/package/PackageResolvableExpression.h @@ -8,6 +8,7 @@ #include +#include #include @@ -34,27 +35,32 @@ public: BPackageResolvableExpression(); BPackageResolvableExpression( const BString& name, - const BString& _operator = "", + BPackageResolvableOperator _op + = B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT, const BPackageVersion& version = BPackageVersion()); status_t InitCheck() const; const BString& Name() const; - const BString& Operator() const; + BPackageResolvableOperator Operator() const; const BPackageVersion& Version() const; BString AsString() const; void SetTo(const BString& name, - const BString& _operator = "", + BPackageResolvableOperator _op + = B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT, const BPackageVersion& version = BPackageVersion()); void Clear(); +public: + static const char* kOperatorNames[]; + private: BString fName; - BString fOperator; + BPackageResolvableOperator fOperator; BPackageVersion fVersion; }; diff --git a/src/kits/package/PackageInfo.cpp b/src/kits/package/PackageInfo.cpp index 38b6940d45..9ac6a5a35b 100644 --- a/src/kits/package/PackageInfo.cpp +++ b/src/kits/package/PackageInfo.cpp @@ -506,6 +506,7 @@ BPackageInfo::Parser::_ParseResolvableExprList( if (op.type == TOKEN_OPERATOR_LESS || op.type == TOKEN_OPERATOR_LESS_EQUAL || op.type == TOKEN_OPERATOR_EQUAL + || op.type == TOKEN_OPERATOR_NOT_EQUAL || op.type == TOKEN_OPERATOR_GREATER_EQUAL || op.type == TOKEN_OPERATOR_GREATER) _ParseVersionValue(&version, true); @@ -513,11 +514,15 @@ BPackageInfo::Parser::_ParseResolvableExprList( _RewindTo(op); else { throw ParseError( - "expected '<', '<=', '==', '>=', '>', comma or ']'", op.pos); + "expected '<', '<=', '==', '!=', '>=', '>', comma or ']'", + op.pos); } - value->AddItem( - new BPackageResolvableExpression(name.text, op.text, version)); + BPackageResolvableOperator resolvableOperator + = (BPackageResolvableOperator)(op.type - TOKEN_OPERATOR_LESS); + + value->AddItem(new BPackageResolvableExpression(name.text, + resolvableOperator, version)); } } @@ -683,7 +688,7 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo) _ParseResolvableExprList(&supplementsList); int count = supplementsList.CountItems(); for (int i = 0; i < count; ++i) - packageInfo->AddRequires(*(supplementsList.ItemAt(i))); + packageInfo->AddSupplements(*(supplementsList.ItemAt(i))); seen[B_PACKAGE_INFO_SUPPLEMENTS] = true; } else if (t.text.ICompare(names[B_PACKAGE_INFO_CONFLICTS]) == 0) { if (seen[B_PACKAGE_INFO_CONFLICTS]) { @@ -696,7 +701,7 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo) _ParseResolvableExprList(&conflictsList); int count = conflictsList.CountItems(); for (int i = 0; i < count; ++i) - packageInfo->AddRequires(*(conflictsList.ItemAt(i))); + packageInfo->AddConflicts(*(conflictsList.ItemAt(i))); seen[B_PACKAGE_INFO_CONFLICTS] = true; } else if (t.text.ICompare(names[B_PACKAGE_INFO_FRESHENS]) == 0) { if (seen[B_PACKAGE_INFO_FRESHENS]) { @@ -709,7 +714,7 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo) _ParseResolvableExprList(&freshensList); int count = freshensList.CountItems(); for (int i = 0; i < count; ++i) - packageInfo->AddRequires(*(freshensList.ItemAt(i))); + packageInfo->AddFreshens(*(freshensList.ItemAt(i))); seen[B_PACKAGE_INFO_FRESHENS] = true; } else if (t.text.ICompare(names[B_PACKAGE_INFO_REPLACES]) == 0) { if (seen[B_PACKAGE_INFO_REPLACES]) { @@ -722,7 +727,7 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo) _ParseStringList(&replacesList, false); int count = replacesList.CountItems(); for (int i = 0; i < count; ++i) - packageInfo->AddRequires(*(replacesList.ItemAt(i))); + packageInfo->AddReplaces(*(replacesList.ItemAt(i))); seen[B_PACKAGE_INFO_REPLACES] = true; } } @@ -749,10 +754,10 @@ const char* BPackageInfo::kElementNames[B_PACKAGE_INFO_ENUM_COUNT] = { "licenses", "provides", "requires", - "conflicts", "supplements", - "replaces", + "conflicts", "freshens", + "replaces", }; diff --git a/src/kits/package/PackageResolvableExpression.cpp b/src/kits/package/PackageResolvableExpression.cpp index d841bbf166..e9d43ad287 100644 --- a/src/kits/package/PackageResolvableExpression.cpp +++ b/src/kits/package/PackageResolvableExpression.cpp @@ -10,13 +10,27 @@ namespace BPackageKit { +const char* +BPackageResolvableExpression +::kOperatorNames[B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT] = { + "<", + "<=", + "==", + "!=", + ">=", + ">", +}; + + BPackageResolvableExpression::BPackageResolvableExpression() + : + fOperator(B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT) { } BPackageResolvableExpression::BPackageResolvableExpression(const BString& name, - const BString& _operator, const BPackageVersion& version) + BPackageResolvableOperator _operator, const BPackageVersion& version) : fName(name), fOperator(_operator), @@ -32,10 +46,10 @@ BPackageResolvableExpression::InitCheck() const return B_NO_INIT; // either both or none of operator and version must be set - if (fOperator.Length() == 0 && fVersion.InitCheck() == B_OK) - return B_NO_INIT; - - if (fOperator.Length() > 0 && fVersion.InitCheck() != B_OK) + if ((fOperator == B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT + && fVersion.InitCheck() == B_OK) + || (fOperator >= 0 && fOperator < B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT + && fVersion.InitCheck() != B_OK)) return B_NO_INIT; return B_OK; @@ -49,7 +63,7 @@ BPackageResolvableExpression::Name() const } -const BString& +BPackageResolvableOperator BPackageResolvableExpression::Operator() const { return fOperator; @@ -77,7 +91,7 @@ BPackageResolvableExpression::AsString() const void BPackageResolvableExpression::SetTo(const BString& name, - const BString& _operator, const BPackageVersion& version) + BPackageResolvableOperator _operator, const BPackageVersion& version) { fName = name; fOperator = _operator; @@ -89,7 +103,7 @@ void BPackageResolvableExpression::Clear() { fName.Truncate(0); - fOperator.Truncate(0); + fOperator = B_PACKAGE_RESOLVABLE_OP_ENUM_COUNT; fVersion.Clear(); }