A giant hack to cut down code needed for runtime block serialization by 50%

this also avoids repeated information and inconsistencies.
This commit is contained in:
Dylan K. Taylor
2022-07-18 18:25:41 +01:00
parent cf34f88a67
commit 6d4279671e
90 changed files with 380 additions and 717 deletions

View File

@ -107,7 +107,7 @@ class Block{
$givenBits = $typeBits;
$reader = new RuntimeDataReader($givenBits, $data);
$this->decodeType($reader);
$this->describeType($reader);
$readBits = $reader->getOffset();
if($typeBits !== $readBits){
throw new \LogicException(get_class($this) . ": Exactly $typeBits bits of type data were provided, but $readBits were read");
@ -124,21 +124,13 @@ class Block{
$reader = new RuntimeDataReader($givenBits, $data);
$this->decodeTypeData($reader->readInt($typeBits));
$this->decodeState($reader);
$this->describeState($reader);
$readBits = $reader->getOffset() - $typeBits;
if($stateBits !== $readBits){
throw new \LogicException(get_class($this) . ": Exactly $stateBits bits of state data were provided, but $readBits were read");
}
}
protected function decodeType(RuntimeDataReader $r) : void{
//NOOP
}
protected function decodeState(RuntimeDataReader $r) : void{
//NOOP
}
/**
* @internal
*/
@ -147,7 +139,7 @@ class Block{
$requiredBits = $typeBits;
$writer = new RuntimeDataWriter($requiredBits);
$this->encodeType($writer);
$this->describeType($writer);
$writtenBits = $writer->getOffset();
if($typeBits !== $writtenBits){
throw new \LogicException(get_class($this) . ": Exactly $typeBits bits of type data were expected, but $writtenBits were written");
@ -164,9 +156,9 @@ class Block{
$stateBits = $this->getRequiredStateDataBits();
$requiredBits = $typeBits + $stateBits;
$writer = new RuntimeDataWriter($requiredBits);
$writer->writeInt($typeBits, $this->computeTypeData());
$writer->int($typeBits, $this->computeTypeData());
$this->encodeState($writer);
$this->describeState($writer);
$writtenBits = $writer->getOffset() - $typeBits;
if($stateBits !== $writtenBits){
throw new \LogicException(get_class($this) . ": Exactly $stateBits bits of state data were expected, but $writtenBits were written");
@ -175,11 +167,11 @@ class Block{
return $writer->getValue();
}
protected function encodeType(RuntimeDataWriter $w) : void{
protected function describeType(RuntimeDataReader|RuntimeDataWriter $w) : void{
//NOOP
}
protected function encodeState(RuntimeDataWriter $w) : void{
protected function describeState(RuntimeDataReader|RuntimeDataWriter $w) : void{
//NOOP
}