/* * Copyright 2011, Haiku, Inc. * Distributed under the terms of the MIT License. */ #ifndef _PACKAGE__PACKAGE_RESOLVABLE_H_ #define _PACKAGE__PACKAGE_RESOLVABLE_H_ #include #include namespace BPackageKit { namespace BHPKG { struct BPackageResolvableData; } using BHPKG::BPackageResolvableData; /* * Defines a resolvable (something other packages can depend upon). * Each resolvable is defined as a name (with an optional type prefix), * an optional version, and an optional compatibility version (the least * version the resolvable is backwards compatible with). * * resolvable ::= ['=']['compat' '>=' ] * name ::= [':'] * type ::= 'lib' | 'cmd' | 'app' | 'add_on' * * The type doesn't have any specific meaning to the dependency resolver, * it just facilitates doing specific queries on the repository (like "is * there any package providing the 'svn' command that the user just typed?"). * At a later stage, more types may be added in order to declare additional * entities, e.g. translators. * * String examples: * haiku=r1 * lib:libssl=0.9.8i * subversion=1.5 compat>=1.0 * cmd:svn */ class BPackageResolvable { public: BPackageResolvable(); BPackageResolvable( const BPackageResolvableData& data); BPackageResolvable(const BString& name, const BPackageVersion& version = BPackageVersion(), const BPackageVersion& compatibleVersion = BPackageVersion()); status_t InitCheck() const; const BString& Name() const; const BPackageVersion& Version() const; const BPackageVersion& CompatibleVersion() const; BString ToString() const; status_t SetToString(const BString& expressionString); void SetTo(const BString& name, const BPackageVersion& version = BPackageVersion(), const BPackageVersion& compatibleVersion = BPackageVersion()); void Clear(); private: BString fName; BPackageVersion fVersion; BPackageVersion fCompatibleVersion; }; } // namespace BPackageKit #endif // _PACKAGE__PACKAGE_RESOLVABLE_H_