-
Notifications
You must be signed in to change notification settings - Fork 446
Expand file tree
/
Copy pathInputCollectionMutator.php
More file actions
100 lines (84 loc) · 2.2 KB
/
InputCollectionMutator.php
File metadata and controls
100 lines (84 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php
declare(strict_types=1);
namespace BitWasp\Bitcoin\Transaction\Mutator;
use BitWasp\Bitcoin\Transaction\TransactionInputInterface;
class InputCollectionMutator extends AbstractCollectionMutator
{
/**
* @param TransactionInputInterface[] $inputs
*/
public function __construct(array $inputs)
{
/** @var InputMutator[] $set */
$set = [];
foreach ($inputs as $i => $input) {
$set[$i] = new InputMutator($input);
}
$this->set = \SplFixedArray::fromArray($set, false);
}
/**
* @param int $offset
* @return InputMutator
*/
public function offsetGet($offset): InputMutator
{
if (!$this->set->offsetExists($offset)) {
throw new \OutOfRangeException('Input does not exist');
}
return $this->set->offsetGet($offset);
}
/**
* @return TransactionInputInterface[]
*/
public function done(): array
{
$set = [];
foreach ($this->set as $mutator) {
$set[] = $mutator->done();
}
return $set;
}
/**
* @param int $start
* @param int $length
* @return $this
*/
public function slice(int $start, int $length)
{
$end = $this->set->getSize();
if ($start > $end || $length > $end) {
throw new \RuntimeException('Invalid start or length');
}
$this->set = \SplFixedArray::fromArray(array_slice($this->set->toArray(), $start, $length), false);
return $this;
}
/**
* @return $this
*/
public function null()
{
$this->slice(0, 0);
return $this;
}
/**
* @param TransactionInputInterface $input
* @return $this
*/
public function add(TransactionInputInterface $input)
{
$size = $this->set->getSize();
$this->set->setSize($size + 1);
$this->set[$size] = new InputMutator($input);
return $this;
}
/**
* @param int $i
* @param TransactionInputInterface $input
* @return $this
*/
public function set(int $i, TransactionInputInterface $input)
{
$this->set[$i] = new InputMutator($input);
return $this;
}
}