Cupt
|
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