Cupt
relation.hpp
Go to the documentation of this file.
00001 /**************************************************************************
00002 *   Copyright (C) 2010 by Eugene V. Lyubimkin                             *
00003 *                                                                         *
00004 *   This program is free software; you can redistribute it and/or modify  *
00005 *   it under the terms of the GNU General Public License                  *
00006 *   (version 3 or above) as published by the Free Software Foundation.    *
00007 *                                                                         *
00008 *   This program is distributed in the hope that it will be useful,       *
00009 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00010 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00011 *   GNU General Public License for more details.                          *
00012 *                                                                         *
00013 *   You should have received a copy of the GNU GPL                        *
00014 *   along with this program; if not, write to the                         *
00015 *   Free Software Foundation, Inc.,                                       *
00016 *   51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA               *
00017 **************************************************************************/
00018 #ifndef CUPT_CACHE_RELATION_SEEN
00019 #define CUPT_CACHE_RELATION_SEEN
00020 
00022 
00023 #include <cupt/common.hpp>
00024 
00025 namespace cupt {
00026 namespace cache {
00027 
00029 struct CUPT_API Relation
00030 {
00031  private:
00032     CUPT_LOCAL bool __parse_versioned_info(string::const_iterator, string::const_iterator);
00033     CUPT_LOCAL void __init(string::const_iterator, string::const_iterator);
00034  public:
00036     struct Types
00037     {
00039         enum Type { Less, Equal, More, LessOrEqual, MoreOrEqual, None };
00041         static const string strings[];
00042     };
00043     string packageName; 
00044     Types::Type relationType; 
00045     string versionString; 
00046 
00048 
00052     explicit Relation(const string& input);
00054 
00058     explicit Relation(pair< string::const_iterator, string::const_iterator > input);
00059     Relation(Relation&&) = default;
00060     Relation(const Relation&) = default;
00061     Relation& operator=(Relation&&) = default;
00062     Relation& operator=(const Relation&) = default;
00064     virtual ~Relation();
00066     string toString() const;
00068 
00075     bool isSatisfiedBy(const string& otherVersionString) const;
00077 
00081     bool operator==(const Relation& other) const;
00082 };
00083 
00085 struct CUPT_API ArchitecturedRelation: public Relation
00086 {
00087  private:
00088     CUPT_LOCAL void __init(string::const_iterator, string::const_iterator);
00089  public:
00091     vector< string > architectureFilters;
00092 
00094 
00098     explicit ArchitecturedRelation(const string& input);
00100 
00105     ArchitecturedRelation(pair< string::const_iterator, string::const_iterator > input);
00106     ArchitecturedRelation(ArchitecturedRelation&&) = default;
00107     ArchitecturedRelation(const ArchitecturedRelation&) = default;
00108     ArchitecturedRelation& operator=(ArchitecturedRelation&&) = default;
00109     ArchitecturedRelation& operator=(const ArchitecturedRelation&) = default;
00110     string toString() const;
00111 };
00112 
00114 struct CUPT_API RelationExpression: public vector< Relation >
00115 {
00116  private:
00117     CUPT_LOCAL void __init(string::const_iterator, string::const_iterator);
00118  public:
00120     string toString() const;
00122     string getHashString() const;
00124 
00127     RelationExpression();
00129 
00132     explicit RelationExpression(const string& input);
00134 
00138     explicit RelationExpression(pair< string::const_iterator, string::const_iterator > input);
00139     RelationExpression(RelationExpression&&) = default;
00140     RelationExpression(const RelationExpression&) = default;
00141     RelationExpression& operator=(RelationExpression&&) = default;
00142     RelationExpression& operator=(const RelationExpression&) = default;
00144     virtual ~RelationExpression();
00145 };
00146 
00148 struct CUPT_API ArchitecturedRelationExpression: public vector< ArchitecturedRelation >
00149 {
00150  private:
00151     CUPT_LOCAL void __init(string::const_iterator, string::const_iterator);
00152  public:
00154     string toString() const;
00156 
00159     ArchitecturedRelationExpression();
00161 
00164     explicit ArchitecturedRelationExpression(const string& input);
00166 
00170     ArchitecturedRelationExpression(pair< string::const_iterator, string::const_iterator > input);
00171     ArchitecturedRelationExpression(ArchitecturedRelationExpression&&) = default;
00172     ArchitecturedRelationExpression(const ArchitecturedRelationExpression&) = default;
00173     ArchitecturedRelationExpression& operator=(ArchitecturedRelationExpression&&) = default;
00174     ArchitecturedRelationExpression& operator=(const ArchitecturedRelationExpression&) = default;
00176     virtual ~ArchitecturedRelationExpression();
00177 };
00178 
00180 struct CUPT_API RelationLine: public vector< RelationExpression >
00181 {
00182  private:
00183     CUPT_LOCAL void __init(string::const_iterator, string::const_iterator);
00184  public:
00186     string toString() const;
00188 
00191     RelationLine();
00193 
00196     explicit RelationLine(const string& input);
00198 
00202     explicit RelationLine(pair< string::const_iterator, string::const_iterator > input);
00203     RelationLine(RelationLine&&) = default;
00204     RelationLine(const RelationLine&) = default;
00205     RelationLine& operator=(RelationLine&&) = default;
00206     RelationLine& operator=(const RelationLine&) = default;
00208     virtual ~RelationLine();
00209 };
00210 
00212 struct CUPT_API ArchitecturedRelationLine: public vector< ArchitecturedRelationExpression >
00213 {
00214  private:
00215     CUPT_LOCAL void __init(string::const_iterator, string::const_iterator);
00216  public:
00218     string toString() const;
00220 
00223     ArchitecturedRelationLine();
00225 
00228     explicit ArchitecturedRelationLine(const string& input);
00230 
00234     explicit ArchitecturedRelationLine(pair< string::const_iterator, string::const_iterator > input);
00235     ArchitecturedRelationLine(ArchitecturedRelationLine&&) = default;
00236     ArchitecturedRelationLine(const ArchitecturedRelationLine&) = default;
00237     ArchitecturedRelationLine& operator=(ArchitecturedRelationLine&&) = default;
00238     ArchitecturedRelationLine& operator=(const ArchitecturedRelationLine&) = default;
00240 
00249     RelationLine toRelationLine(const string& currentArchitecture) const;
00251     virtual ~ArchitecturedRelationLine();
00252 };
00253 
00254 }
00255 }
00256 
00257 #endif
00258