@@ -1474,145 +1474,24 @@ details and examples.
1474
1474
"""
1475
1475
(>>> )(B:: BitVector , i:: Int ) = (i >= 0 ? B >> unsigned (i) : B << unsigned (- i))
1476
1476
1477
- """
1478
- rol!(dest::BitVector, src::BitVector, i::Integer) -> BitVector
1479
-
1480
- Performs a left rotation operation on `src` and puts the result into `dest`.
1481
- `i` controls how far to rotate the bits.
1482
- """
1483
- function rol! (dest:: BitVector , src:: BitVector , i:: Integer )
1484
- length (dest) == length (src) || throw (ArgumentError (" destination and source should be of same size" ))
1485
- n = length (dest)
1486
- i %= n
1487
- i == 0 && return (src === dest ? src : copy! (dest, src))
1488
- i < 0 && return ror! (dest, src, - i)
1489
- Bc = (src === dest ? copy (src. chunks) : src. chunks)
1490
- copy_chunks! (dest. chunks, 1 , Bc, i+ 1 , n- i)
1491
- copy_chunks! (dest. chunks, n- i+ 1 , Bc, 1 , i)
1492
- return dest
1493
- end
1494
-
1495
- """
1496
- rol!(B::BitVector, i::Integer) -> BitVector
1497
-
1498
- Performs a left rotation operation in-place on `B`.
1499
- `i` controls how far to rotate the bits.
1500
- """
1501
- rol! (B:: BitVector , i:: Integer ) = rol! (B, B, i)
1502
-
1503
- """
1504
- rol(B::BitVector, i::Integer) -> BitVector
1505
-
1506
- Performs a left rotation operation, returning a new `BitVector`.
1507
- `i` controls how far to rotate the bits.
1508
- See also [`rol!`](@ref).
1509
-
1510
- # Examples
1511
- ```jldoctest
1512
- julia> A = BitArray([true, true, false, false, true])
1513
- 5-element BitArray{1}:
1514
- true
1515
- true
1516
- false
1517
- false
1518
- true
1519
-
1520
- julia> rol(A,1)
1521
- 5-element BitArray{1}:
1522
- true
1523
- false
1524
- false
1525
- true
1526
- true
1527
-
1528
- julia> rol(A,2)
1529
- 5-element BitArray{1}:
1530
- false
1531
- false
1532
- true
1533
- true
1534
- true
1535
-
1536
- julia> rol(A,5)
1537
- 5-element BitArray{1}:
1538
- true
1539
- true
1540
- false
1541
- false
1542
- true
1543
- ```
1544
- """
1545
- rol (B:: BitVector , i:: Integer ) = rol! (similar (B), B, i)
1546
-
1547
- """
1548
- ror!(dest::BitVector, src::BitVector, i::Integer) -> BitVector
1549
-
1550
- Performs a right rotation operation on `src` and puts the result into `dest`.
1551
- `i` controls how far to rotate the bits.
1552
- """
1553
- function ror! (dest:: BitVector , src:: BitVector , i:: Integer )
1477
+ function circshift! (dest:: BitVector , src:: BitVector , i:: Integer )
1554
1478
length (dest) == length (src) || throw (ArgumentError (" destination and source should be of same size" ))
1555
1479
n = length (dest)
1556
1480
i %= n
1557
1481
i == 0 && return (src === dest ? src : copy! (dest, src))
1558
- i < 0 && return rol! (dest, src, - i)
1559
1482
Bc = (src === dest ? copy (src. chunks) : src. chunks)
1560
- copy_chunks! (dest. chunks, i+ 1 , Bc, 1 , n- i)
1561
- copy_chunks! (dest. chunks, 1 , Bc, n- i+ 1 , i)
1483
+ if i > 0 # right
1484
+ copy_chunks! (dest. chunks, i+ 1 , Bc, 1 , n- i)
1485
+ copy_chunks! (dest. chunks, 1 , Bc, n- i+ 1 , i)
1486
+ else # left
1487
+ i = - i
1488
+ copy_chunks! (dest. chunks, 1 , Bc, i+ 1 , n- i)
1489
+ copy_chunks! (dest. chunks, n- i+ 1 , Bc, 1 , i)
1490
+ end
1562
1491
return dest
1563
1492
end
1564
1493
1565
- """
1566
- ror!(B::BitVector, i::Integer) -> BitVector
1567
-
1568
- Performs a right rotation operation in-place on `B`.
1569
- `i` controls how far to rotate the bits.
1570
- """
1571
- ror! (B:: BitVector , i:: Integer ) = ror! (B, B, i)
1572
-
1573
- """
1574
- ror(B::BitVector, i::Integer) -> BitVector
1575
-
1576
- Performs a right rotation operation on `B`, returning a new `BitVector`.
1577
- `i` controls how far to rotate the bits.
1578
- See also [`ror!`](@ref).
1579
-
1580
- # Examples
1581
- ```jldoctest
1582
- julia> A = BitArray([true, true, false, false, true])
1583
- 5-element BitArray{1}:
1584
- true
1585
- true
1586
- false
1587
- false
1588
- true
1589
-
1590
- julia> ror(A,1)
1591
- 5-element BitArray{1}:
1592
- true
1593
- true
1594
- true
1595
- false
1596
- false
1597
-
1598
- julia> ror(A,2)
1599
- 5-element BitArray{1}:
1600
- false
1601
- true
1602
- true
1603
- true
1604
- false
1605
-
1606
- julia> ror(A,5)
1607
- 5-element BitArray{1}:
1608
- true
1609
- true
1610
- false
1611
- false
1612
- true
1613
- ```
1614
- """
1615
- ror (B:: BitVector , i:: Integer ) = ror! (similar (B), B, i)
1494
+ circshift! (B:: BitVector , i:: Integer ) = circshift! (B, B, i)
1616
1495
1617
1496
# # countnz & find ##
1618
1497
0 commit comments