00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PALUDIS_GUARD_PALUDIS_DISTRIBUTION_HH
00021 #define PALUDIS_GUARD_PALUDIS_DISTRIBUTION_HH 1
00022
00023 #include <paludis/distribution-fwd.hh>
00024 #include <paludis/util/attributes.hh>
00025 #include <paludis/util/exception.hh>
00026 #include <paludis/util/private_implementation_pattern.hh>
00027 #include <paludis/util/instantiation_policy.hh>
00028 #include <paludis/util/named_value.hh>
00029 #include <paludis/util/fs_entry.hh>
00030 #include <tr1/memory>
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 namespace paludis
00044 {
00045 namespace n
00046 {
00047 struct concept_keyword;
00048 struct concept_license;
00049 struct concept_use;
00050 struct default_environment;
00051 struct extra_data_dir;
00052 struct fallback_environment;
00053 struct name;
00054 struct paludis_package;
00055 struct support_old_style_virtuals;
00056 }
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 struct Distribution
00070 {
00071 NamedValue<n::concept_keyword, std::string> concept_keyword;
00072 NamedValue<n::concept_license, std::string> concept_license;
00073 NamedValue<n::concept_use, std::string> concept_use;
00074 NamedValue<n::default_environment, std::string> default_environment;
00075 NamedValue<n::extra_data_dir, FSEntry> extra_data_dir;
00076 NamedValue<n::fallback_environment, std::string> fallback_environment;
00077 NamedValue<n::name, std::string> name;
00078 NamedValue<n::paludis_package, std::string> paludis_package;
00079 NamedValue<n::support_old_style_virtuals, bool> support_old_style_virtuals;
00080 };
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 class PALUDIS_VISIBLE DistributionConfigurationError :
00091 public ConfigurationError
00092 {
00093 public:
00094
00095
00096
00097 DistributionConfigurationError(const std::string &) throw ();
00098
00099
00100 };
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 class PALUDIS_VISIBLE DistributionData :
00116 private PrivateImplementationPattern<DistributionData>,
00117 public InstantiationPolicy<DistributionData, instantiation_method::SingletonTag>
00118 {
00119 friend class InstantiationPolicy<DistributionData, instantiation_method::SingletonTag>;
00120
00121 private:
00122 DistributionData();
00123 ~DistributionData();
00124
00125 public:
00126
00127
00128
00129 std::tr1::shared_ptr<const Distribution> distribution_from_string(const std::string &) const;
00130 };
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141 template <typename Data_>
00142 class PALUDIS_VISIBLE ExtraDistributionData :
00143 private PrivateImplementationPattern<ExtraDistributionData<Data_> >,
00144 public InstantiationPolicy<ExtraDistributionData<Data_>, instantiation_method::SingletonTag>
00145 {
00146 friend class InstantiationPolicy<ExtraDistributionData<Data_>, instantiation_method::SingletonTag>;
00147
00148 private:
00149 ExtraDistributionData();
00150 ~ExtraDistributionData();
00151
00152 public:
00153
00154
00155
00156 const std::tr1::shared_ptr<const Data_> data_from_distribution(
00157 const Distribution &) const
00158 PALUDIS_ATTRIBUTE((warn_unused_result));
00159 };
00160 }
00161
00162 #endif