00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PALUDIS_GUARD_PALUDIS_METADATA_KEY_HH
00021 #define PALUDIS_GUARD_PALUDIS_METADATA_KEY_HH 1
00022
00023 #include <paludis/metadata_key-fwd.hh>
00024 #include <paludis/mask-fwd.hh>
00025 #include <paludis/package_id-fwd.hh>
00026 #include <paludis/name-fwd.hh>
00027 #include <paludis/dep_spec-fwd.hh>
00028 #include <paludis/spec_tree.hh>
00029 #include <paludis/contents-fwd.hh>
00030 #include <paludis/repository-fwd.hh>
00031 #include <paludis/formatter-fwd.hh>
00032 #include <paludis/metadata_key_holder.hh>
00033 #include <paludis/choice-fwd.hh>
00034 #include <paludis/util/fs_entry-fwd.hh>
00035 #include <paludis/util/attributes.hh>
00036 #include <paludis/util/instantiation_policy.hh>
00037 #include <paludis/util/remove_shared_ptr.hh>
00038 #include <paludis/util/simple_visitor.hh>
00039 #include <paludis/util/type_list.hh>
00040 #include <tr1/type_traits>
00041 #include <string>
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 namespace paludis
00054 {
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 class PALUDIS_VISIBLE MetadataKey :
00086 private InstantiationPolicy<MetadataKey, instantiation_method::NonCopyableTag>,
00087 public virtual DeclareAbstractAcceptMethods<MetadataKey, MakeTypeList<
00088 MetadataCollectionKey<KeywordNameSet>,
00089 MetadataCollectionKey<Set<std::string> >,
00090 MetadataCollectionKey<Sequence<std::string> >,
00091 MetadataCollectionKey<PackageIDSequence>,
00092 MetadataCollectionKey<FSEntrySequence>,
00093 MetadataSpecTreeKey<DependencySpecTree>,
00094 MetadataSpecTreeKey<LicenseSpecTree>,
00095 MetadataSpecTreeKey<FetchableURISpecTree>,
00096 MetadataSpecTreeKey<SimpleURISpecTree>,
00097 MetadataSpecTreeKey<ProvideSpecTree>,
00098 MetadataSpecTreeKey<PlainTextSpecTree>,
00099 MetadataValueKey<std::string>,
00100 MetadataValueKey<long>,
00101 MetadataValueKey<bool>,
00102 MetadataValueKey<FSEntry>,
00103 MetadataValueKey<SlotName>,
00104 MetadataValueKey<std::tr1::shared_ptr<const PackageID> >,
00105 MetadataValueKey<std::tr1::shared_ptr<const Contents> >,
00106 MetadataValueKey<std::tr1::shared_ptr<const RepositoryMaskInfo> >,
00107 MetadataValueKey<std::tr1::shared_ptr<const Choices> >,
00108 MetadataTimeKey,
00109 MetadataSectionKey
00110 >::Type>
00111 {
00112 public:
00113
00114
00115
00116 virtual ~MetadataKey() = 0;
00117
00118
00119
00120
00121
00122
00123 virtual const std::string raw_name() const PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00124
00125
00126
00127
00128 virtual const std::string human_name() const PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00129
00130
00131
00132
00133 virtual MetadataKeyType type() const PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00134 };
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144 class PALUDIS_VISIBLE MetadataSectionKey :
00145 public MetadataKey,
00146 public ImplementAcceptMethods<MetadataKey, MetadataSectionKey>,
00147 public MetadataKeyHolder
00148 {
00149 public:
00150
00151
00152
00153 virtual ~MetadataSectionKey() = 0;
00154
00155
00156 };
00157
00158
00159
00160
00161
00162
00163
00164 template <typename C_>
00165 class ExtraMetadataValueKeyMethods
00166 {
00167 };
00168
00169
00170
00171
00172
00173
00174
00175 template <>
00176 class PALUDIS_VISIBLE ExtraMetadataValueKeyMethods<long>
00177 {
00178 public:
00179 virtual ~ExtraMetadataValueKeyMethods() = 0;
00180
00181
00182
00183
00184 virtual std::string pretty_print() const
00185 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00186 };
00187
00188
00189
00190
00191
00192
00193
00194 template <>
00195 class PALUDIS_VISIBLE ExtraMetadataValueKeyMethods<bool>
00196 {
00197 public:
00198 virtual ~ExtraMetadataValueKeyMethods() = 0;
00199
00200
00201
00202
00203 virtual std::string pretty_print() const
00204 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00205 };
00206
00207
00208
00209
00210
00211
00212
00213 template <>
00214 class PALUDIS_VISIBLE ExtraMetadataValueKeyMethods<std::tr1::shared_ptr<const PackageID> >
00215 {
00216 public:
00217 virtual ~ExtraMetadataValueKeyMethods() = 0;
00218
00219
00220
00221
00222
00223 virtual std::string pretty_print(const Formatter<PackageID> &) const
00224 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00225 };
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235 template <typename C_>
00236 class PALUDIS_VISIBLE MetadataValueKey :
00237 public MetadataKey,
00238 public ImplementAcceptMethods<MetadataKey, MetadataValueKey<C_> >,
00239 public virtual ExtraMetadataValueKeyMethods<C_>
00240 {
00241 public:
00242 virtual ~MetadataValueKey() = 0;
00243
00244
00245
00246
00247 virtual const C_ value() const
00248 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00249 };
00250
00251
00252
00253
00254
00255
00256
00257
00258 class PALUDIS_VISIBLE MetadataTimeKey :
00259 public MetadataKey,
00260 public ImplementAcceptMethods<MetadataKey, MetadataTimeKey>
00261 {
00262 public:
00263 virtual ~MetadataTimeKey() = 0;
00264
00265
00266
00267
00268 virtual time_t value() const
00269 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00270 };
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280 template <typename C_>
00281 class PALUDIS_VISIBLE MetadataCollectionKey :
00282 public MetadataKey,
00283 public ImplementAcceptMethods<MetadataKey, MetadataCollectionKey<C_> >
00284 {
00285 public:
00286 virtual ~MetadataCollectionKey() = 0;
00287
00288
00289
00290
00291 virtual const std::tr1::shared_ptr<const C_> value() const
00292 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00293
00294
00295
00296
00297
00298 virtual std::string pretty_print_flat(const Formatter<
00299 typename std::tr1::remove_const<typename RemoveSharedPtr<typename C_::value_type>::Type>::type> &) const
00300 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00301 };
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311 template <typename C_>
00312 class PALUDIS_VISIBLE MetadataSpecTreeKey :
00313 public MetadataKey,
00314 public ImplementAcceptMethods<MetadataKey, MetadataSpecTreeKey<C_> >
00315 {
00316 public:
00317 virtual ~MetadataSpecTreeKey() = 0;
00318
00319
00320
00321
00322 virtual const std::tr1::shared_ptr<const C_> value() const
00323 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00324
00325
00326
00327
00328
00329 virtual std::string pretty_print(const typename C_::ItemFormatter &) const
00330 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00331
00332
00333
00334
00335
00336 virtual std::string pretty_print_flat(const typename C_::ItemFormatter &) const
00337 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00338 };
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351 template <>
00352 class PALUDIS_VISIBLE MetadataSpecTreeKey<FetchableURISpecTree> :
00353 public MetadataKey,
00354 public ImplementAcceptMethods<MetadataKey, MetadataSpecTreeKey<FetchableURISpecTree> >
00355 {
00356 public:
00357 virtual ~MetadataSpecTreeKey() = 0;
00358
00359
00360
00361
00362 virtual const std::tr1::shared_ptr<const FetchableURISpecTree> value() const
00363 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00364
00365
00366
00367
00368
00369 virtual std::string pretty_print(const FetchableURISpecTree::ItemFormatter &) const
00370 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00371
00372
00373
00374
00375
00376 virtual std::string pretty_print_flat(const FetchableURISpecTree::ItemFormatter &) const
00377 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00378
00379
00380
00381
00382
00383 virtual const std::tr1::shared_ptr<const URILabel> initial_label() const
00384 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00385 };
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398 template <>
00399 class PALUDIS_VISIBLE MetadataSpecTreeKey<DependencySpecTree> :
00400 public MetadataKey,
00401 public ImplementAcceptMethods<MetadataKey, MetadataSpecTreeKey<DependencySpecTree> >
00402 {
00403 public:
00404 virtual ~MetadataSpecTreeKey() = 0;
00405
00406
00407
00408
00409 virtual const std::tr1::shared_ptr<const DependencySpecTree> value() const
00410 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00411
00412
00413
00414
00415
00416 virtual std::string pretty_print(const DependencySpecTree::ItemFormatter &) const
00417 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00418
00419
00420
00421
00422
00423 virtual std::string pretty_print_flat(const DependencySpecTree::ItemFormatter &) const
00424 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00425
00426
00427
00428
00429
00430 virtual const std::tr1::shared_ptr<const DependencyLabelSequence> initial_labels() const
00431 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
00432 };
00433 }
00434
00435 #endif