1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/sat/Map.h
11 #ifndef ZYPP_SAT_MAP_H
12 #define ZYPP_SAT_MAP_H
21 #include "zypp/base/PtrTypes.h"
23 ///////////////////////////////////////////////////////////////////
26 ///////////////////////////////////////////////////////////////////
29 ///////////////////////////////////////////////////////////////////
31 /// \brief Libsolv (bit)Map wrapper.
33 /// \Note Requested sizes are filled up to the next multiple of eight.
34 /// Libsolv bitmaps are not shrinkable.
35 ///////////////////////////////////////////////////////////////////
39 typedef unsigned long size_type;
42 /** Default ctor: empty Map */
45 /** Ctor taking the Map size */
46 explicit Map( size_type size_r );
52 /** Whether Map is empty. */
55 /** Size of the Map. */
56 size_type size() const;
58 /** Grow the Map if necessary. */
59 void grow( size_type size_r );
65 /** Clear all bits. */
68 /** Assign \c val_r to all bits. */
69 void assignAll( bool val_r );
71 /** Set bit \c idx_r. */
72 void set( size_type idx_r );
74 /** Clear bit \c idx_r. */
75 void clear( size_type idx_r );
77 /** Assign \c val_r to bit \c idx_r. */
78 void assign( size_type idx_r, bool val_r );
81 /** Test bit \c idx_r.*/
82 bool test( size_type idx_r ) const;
84 /** Test bit \c idx_r.*/
85 bool operator[]( size_type idx_r ) const
86 { return test( idx_r ); }
89 /** String representation */
90 std::string asString( const char on_r = '1', const char off_r = '0' ) const;
93 operator struct ::_Map *(); ///< libsolv backdoor
94 operator const struct ::_Map *() const ///< libsolv backdoor
95 { return _pimpl.get(); }
97 RWCOW_pointer<struct ::_Map> _pimpl; ///< Pointer to implementation
100 /** \relates Map Stream output */
101 inline std::ostream & operator<<( std::ostream & str, const Map & obj )
102 { return str << obj.asString(); }
105 bool operator==( const Map & lhs, const Map & rhs );
108 inline bool operator!=( const Map & lhs, const Map & rhs )
109 { return !( lhs == rhs ); }
112 ///////////////////////////////////////////////////////////////////
114 /** \relates Map Clone function for RWCOW_pointer */
115 template<> struct ::_Map * rwcowClone<struct ::_Map>( const struct ::_Map * rhs );
118 ///////////////////////////////////////////////////////////////////
119 #endif // ZYPP_SAT_MAP_H