##// END OF EJS Templates
smartset: micro optimize baseset.slice() to use slice of list...
Yuya Nishihara -
r32820:653d6045 default
parent child Browse files
Show More
@@ -372,6 +372,18 b' class baseset(abstractsmartset):'
372 372 def __sub__(self, other):
373 373 return self._fastsetop(other, '__sub__')
374 374
375 def _slice(self, start, stop):
376 # creating new list should be generally cheaper than iterating items
377 if self._ascending is None:
378 return baseset(self._list[start:stop], istopo=self._istopo)
379
380 data = self._asclist
381 if not self._ascending:
382 start, stop = max(len(data) - stop, 0), max(len(data) - start, 0)
383 s = baseset(data[start:stop], istopo=self._istopo)
384 s._ascending = self._ascending
385 return s
386
375 387 def __repr__(self):
376 388 d = {None: '', False: '-', True: '+'}[self._ascending]
377 389 s = _formatsetrepr(self._datarepr)
@@ -1037,6 +1037,49 b' Test smartset.slice() by first/last()'
1037 1037 6
1038 1038 7
1039 1039
1040 (using baseset)
1041
1042 $ hg debugrevspec --no-show-revs -s 0+1+2+3+4+5+6+7
1043 * set:
1044 <baseset [0, 1, 2, 3, 4, 5, 6, 7]>
1045 $ hg debugrevspec --no-show-revs -s 0::7
1046 * set:
1047 <baseset+ [0, 1, 2, 3, 4, 5, 6, 7]>
1048 $ log 'limit(0+1+2+3+4+5+6+7, 3, 4)'
1049 4
1050 5
1051 6
1052 $ log 'limit(sort(0::7, rev), 3, 4)'
1053 4
1054 5
1055 6
1056 $ log 'limit(sort(0::7, -rev), 3, 4)'
1057 3
1058 2
1059 1
1060 $ log 'last(sort(0::7, rev), 2)'
1061 6
1062 7
1063 $ hg debugrevspec -s 'limit(sort(0::7, rev), 3, 6)'
1064 * set:
1065 <baseset+ [6, 7]>
1066 6
1067 7
1068 $ hg debugrevspec -s 'limit(sort(0::7, rev), 3, 9)'
1069 * set:
1070 <baseset+ []>
1071 $ hg debugrevspec -s 'limit(sort(0::7, -rev), 3, 6)'
1072 * set:
1073 <baseset- [0, 1]>
1074 1
1075 0
1076 $ hg debugrevspec -s 'limit(sort(0::7, -rev), 3, 9)'
1077 * set:
1078 <baseset- []>
1079 $ hg debugrevspec -s 'limit(0::7, 0)'
1080 * set:
1081 <baseset+ []>
1082
1040 1083 Test order of first/last revisions
1041 1084
1042 1085 $ hg debugrevspec -s 'first(4:0, 3) & 3:'
@@ -1967,8 +2010,7 b' ordering defined by it.'
1967 2010 define)
1968 2011 * set:
1969 2012 <filteredset
1970 <baseset slice=0:1
1971 <baseset [1, 0, 2]>>,
2013 <baseset [1]>,
1972 2014 <spanset- 0:3>>
1973 2015 1
1974 2016
@@ -2003,8 +2045,7 b' ordering defined by it.'
2003 2045 <filteredset
2004 2046 <spanset- 0:3>,
2005 2047 <not
2006 <baseset slice=0:1
2007 <baseset [1, 2, 0]>>>>
2048 <baseset [1]>>>
2008 2049 2
2009 2050 0
2010 2051
@@ -3628,8 +3669,7 b' issue2549 - correct optimizations'
3628 3669 ('symbol', '2')))
3629 3670 * set:
3630 3671 <filteredset
3631 <baseset slice=0:2
3632 <baseset [1, 2, 3]>>,
3672 <baseset [1, 2]>,
3633 3673 <not
3634 3674 <baseset [2]>>>
3635 3675 1
@@ -3683,8 +3723,7 b' issue2549 - correct optimizations'
3683 3723 ('symbol', '2')))
3684 3724 * set:
3685 3725 <filteredset
3686 <baseset slice=0:1
3687 <baseset [2, 1]>>,
3726 <baseset [2]>,
3688 3727 <not
3689 3728 <baseset [2]>>>
3690 3729
General Comments 0
You need to be logged in to leave comments. Login now