~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/intset.py

Add bzrlib.pyutils, which has get_named_object, a wrapper around __import__.

This is used to replace various ad hoc implementations of the same logic,
notably the version used in registry's _LazyObjectGetter which had a bug when
getting a module without also getting a member.  And of course, this new
function has unit tests, unlike the replaced code.

This also adds a KnownHooksRegistry subclass to provide a more natural home for
some other logic.

I'm not thrilled about the name of the new module or the new functions, but it's
hard to think of good names for such generic functionality.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
# Author: Martin Pool <mbp@canonical.com>
18
18
 
60
60
    True
61
61
    >>> list(a)
62
62
    [10]
63
 
    
 
63
 
64
64
    """
65
65
    __slots__ = ['_val']
66
66
 
80
80
 
81
81
        >>> bool(IntSet())
82
82
        False
83
 
        
 
83
 
84
84
        >>> bool(IntSet([0]))
85
85
        True
86
86
        """
129
129
        """
130
130
        if not isinstance(other, IntSet):
131
131
            raise NotImplementedError(type(other))
132
 
        return IntSet(bitmask=(self._val | other._val))        
 
132
        return IntSet(bitmask=(self._val | other._val))
133
133
 
134
134
 
135
135
    def __eq__(self, other):
149
149
 
150
150
 
151
151
    def __contains__(self, i):
152
 
        assert i >= 0
153
152
        return self._val & (1L << i)
154
153
 
155
154
 
170
169
            v = v >> 1
171
170
            o = o + 1
172
171
 
173
 
        
 
172
 
174
173
    def update(self, to_add):
175
174
        """Add all the values from the sequence or intset to_add"""
176
175
        if isinstance(to_add, IntSet):
177
176
            self._val |= to_add._val
178
177
        else:
179
178
            for i in to_add:
180
 
                assert i >= 0
181
179
                self._val |= (1L << i)
182
180
 
183
181
 
184
182
    def add(self, to_add):
185
 
        assert 0 <= to_add
186
183
        self._val |= (1L << to_add)
187
184
 
188
185
 
203
200
        >>> not a
204
201
        True
205
202
        """
206
 
        assert 0 <= to_remove
207
203
        m = 1L << to_remove
208
204
        if not self._val & m:
209
205
            raise KeyError(to_remove)