00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PALUDIS_GUARD_PALUDIS_UTIL_MAP_HH
00021 #define PALUDIS_GUARD_PALUDIS_UTIL_MAP_HH 1
00022
00023 #include <paludis/util/map-fwd.hh>
00024 #include <paludis/util/attributes.hh>
00025 #include <paludis/util/instantiation_policy.hh>
00026 #include <paludis/util/private_implementation_pattern.hh>
00027 #include <paludis/util/wrapped_output_iterator-fwd.hh>
00028 #include <paludis/util/wrapped_forward_iterator-fwd.hh>
00029
00030 #include <utility>
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 namespace paludis
00043 {
00044
00045
00046
00047
00048
00049
00050
00051
00052 template <typename K_, typename V_, typename C_>
00053 class PALUDIS_VISIBLE Map :
00054 private PrivateImplementationPattern<Map<K_, V_, C_> >,
00055 private InstantiationPolicy<Map<K_, V_, C_>, instantiation_method::NonCopyableTag>
00056 {
00057 private:
00058 using PrivateImplementationPattern<Map<K_, V_, C_> >::_imp;
00059
00060 public:
00061
00062
00063
00064 Map();
00065 ~Map();
00066
00067
00068
00069
00070
00071
00072 struct ConstIteratorTag;
00073 typedef WrappedForwardIterator<ConstIteratorTag, const std::pair<const K_, V_> > ConstIterator;
00074 ConstIterator begin() const PALUDIS_ATTRIBUTE((warn_unused_result));
00075 ConstIterator end() const PALUDIS_ATTRIBUTE((warn_unused_result));
00076 ConstIterator find(const K_ &) const PALUDIS_ATTRIBUTE((warn_unused_result));
00077
00078 struct InserterTag;
00079 typedef WrappedOutputIterator<InserterTag, std::pair<const K_, V_> > Inserter;
00080 Inserter inserter() PALUDIS_ATTRIBUTE((warn_unused_result));
00081
00082
00083
00084
00085
00086
00087 bool empty() const PALUDIS_ATTRIBUTE((warn_unused_result));
00088 unsigned size() const PALUDIS_ATTRIBUTE((warn_unused_result));
00089
00090
00091
00092
00093
00094
00095 void insert(const K_ &, const V_ &);
00096 void erase(const ConstIterator &);
00097 void erase(const K_ &);
00098
00099
00100 };
00101 }
00102
00103 #endif