00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PALUDIS_GUARD_PALUDIS_REPOSITORIES_UNPACKAGED_NDBAM_HH
00021 #define PALUDIS_GUARD_PALUDIS_REPOSITORIES_UNPACKAGED_NDBAM_HH 1
00022
00023 #include <paludis/ndbam-fwd.hh>
00024 #include <paludis/util/private_implementation_pattern.hh>
00025 #include <paludis/util/attributes.hh>
00026 #include <paludis/util/fs_entry.hh>
00027 #include <paludis/util/sequence-fwd.hh>
00028 #include <paludis/util/mutex.hh>
00029 #include <paludis/util/named_value.hh>
00030 #include <paludis/name.hh>
00031 #include <paludis/version_spec.hh>
00032 #include <paludis/package_id-fwd.hh>
00033 #include <paludis/contents-fwd.hh>
00034 #include <tr1/functional>
00035
00036 namespace paludis
00037 {
00038 namespace n
00039 {
00040 struct fs_location;
00041 struct magic;
00042 struct mutex;
00043 struct name;
00044 struct package_id;
00045 struct slot;
00046 struct version;
00047 }
00048
00049 struct NDBAMEntry
00050 {
00051 NamedValue<n::fs_location, FSEntry> fs_location;
00052 NamedValue<n::magic, std::string> magic;
00053 NamedValue<n::mutex, std::tr1::shared_ptr<Mutex> > mutex;
00054 NamedValue<n::name, QualifiedPackageName> name;
00055 NamedValue<n::package_id, std::tr1::shared_ptr<PackageID> > package_id;
00056 NamedValue<n::slot, SlotName> slot;
00057 NamedValue<n::version, VersionSpec> version;
00058 };
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 class PALUDIS_VISIBLE NDBAM :
00070 private PrivateImplementationPattern<NDBAM>
00071 {
00072 public:
00073
00074
00075
00076
00077
00078
00079
00080
00081 NDBAM(const FSEntry &,
00082 const std::tr1::function<bool (const std::string &)> & check_format,
00083 const std::string & preferred_format, const VersionSpecOptions & version_options);
00084 ~NDBAM();
00085
00086
00087
00088
00089
00090
00091 std::tr1::shared_ptr<const CategoryNamePartSet> category_names()
00092 PALUDIS_ATTRIBUTE((warn_unused_result));
00093
00094 std::tr1::shared_ptr<const QualifiedPackageNameSet> package_names(
00095 const CategoryNamePart & c)
00096 PALUDIS_ATTRIBUTE((warn_unused_result));
00097
00098 std::tr1::shared_ptr<const CategoryNamePartSet> category_names_containing_package(
00099 const PackageNamePart &) const
00100 PALUDIS_ATTRIBUTE((warn_unused_result));
00101
00102 bool has_package_named(const QualifiedPackageName &)
00103 PALUDIS_ATTRIBUTE((warn_unused_result));
00104
00105 bool has_category_named(const CategoryNamePart &)
00106 PALUDIS_ATTRIBUTE((warn_unused_result));
00107
00108 std::tr1::shared_ptr<NDBAMEntrySequence> entries(const QualifiedPackageName &)
00109 PALUDIS_ATTRIBUTE((warn_unused_result));
00110
00111 void add_entry(const QualifiedPackageName &, const FSEntry &);
00112 void remove_entry(const QualifiedPackageName &, const FSEntry &);
00113
00114
00115
00116
00117
00118
00119 void parse_contents(const PackageID &,
00120 const std::tr1::function<void (const std::tr1::shared_ptr<const ContentsEntry> &)> & on_file,
00121 const std::tr1::function<void (const std::tr1::shared_ptr<const ContentsEntry> &)> & on_dir,
00122 const std::tr1::function<void (const std::tr1::shared_ptr<const ContentsEntry> &)> & on_sym
00123 ) const;
00124
00125
00126
00127
00128
00129 void index(const QualifiedPackageName &, const std::string &) const;
00130
00131
00132
00133
00134 void deindex(const QualifiedPackageName &) const;
00135 };
00136 }
00137
00138 #endif