Class SubSubtraction
Implements binary subtraction for two numbers a, b stored in the same chain.
Computes a new binary number c := a - b
and optionally determines
whether an overflow occurred, i.e., the result was less than 0.
This procedure requires at least 1 pin and it always uses the "outermost / leftmost" pin when traversing the chain. If an amoebot occurs on the chain multiple times, its predecessor and successor directions must be different for all occurrences.
Usage:
-
Establish a chain of amoebots such that each amoebot knows its predecessor and successor
(except the start and end amoebots). Each amoebot should store a bit
a
and a bitb
. -
Initialize using the Init(bool, bool, Direction, Direction) method.
You must pass the bits
a
andb
and the two chain directions. The chain start should have no predecessor and the end should have no successor. - Call SetupPinConfig(PinConfiguration) to modify the pin configuration.
- Call ActivateSend() in the same round to start the procedure.
- After this, call ActivateReceive(), SetupPinConfig(PinConfiguration) and ActivateSend() in this order in every round.
- The procedure can be paused after each ActivateReceive() call and resumed by continuing with SetupPinConfig(PinConfiguration) in some future round.
-
Call IsFinishedSub() after ActivateReceive() to check whether the
subtraction is finished. Running another iteration after this, until IsFinishedOverflow()
returns
true
, will make the overflow result available. -
The subtraction result
c
is thereafter available through Bit_C() for each amoebot on the chain.
Namespace: AS2.Subroutines.BinaryOps
Assembly: .dll
Syntax
public class SubSubtraction : Subroutine
Constructors
| Edit this page View SourceSubSubtraction(Particle, ParticleAttribute<int>)
Declaration
public SubSubtraction(Particle p, ParticleAttribute<int> stateAttr = null)
Parameters
Type | Name | Description |
---|---|---|
Particle | p | |
ParticleAttribute<int> | stateAttr |
Fields
| Edit this page View Sourcebit_A
Declaration
private const int bit_A = 2
Field Value
Type | Description |
---|---|
int |
bit_B
Declaration
private const int bit_B = 3
Field Value
Type | Description |
---|---|
int |
bit_C
Declaration
private const int bit_C = 4
Field Value
Type | Description |
---|---|
int |
bit_FinishedOverflow
Declaration
private const int bit_FinishedOverflow = 12
Field Value
Type | Description |
---|---|
int |
bit_FinishedSub
Declaration
private const int bit_FinishedSub = 11
Field Value
Type | Description |
---|---|
int |
bit_Overflow
Declaration
private const int bit_Overflow = 13
Field Value
Type | Description |
---|---|
int |
state
Declaration
private ParticleAttribute<int> state
Field Value
Type | Description |
---|---|
ParticleAttribute<int> |
Methods
| Edit this page View SourceActivateReceive()
Activation during ActivateBeep() to receive the beeps sent in the last round. Should always be called before SetupPinConfig(PinConfiguration) and ActivateSend(), except in the very first activation, where it should not be called.
Declaration
public void ActivateReceive()
ActivateSend()
Activation during ActivateBeep() to send the beeps required for this step. Must be called after ActivateReceive() and SetupPinConfig(PinConfiguration).
Declaration
public void ActivateSend()
Bit_A()
This amoebot's bit of a
.
Declaration
public bool Bit_A()
Returns
Type | Description |
---|---|
bool | Whether this amoebot's bit of |
Bit_B()
This amoebot's bit of b
.
Declaration
public bool Bit_B()
Returns
Type | Description |
---|---|
bool | Whether this amoebot's bit of |
Bit_C()
This amoebot's bit of c
.
Declaration
public bool Bit_C()
Returns
Type | Description |
---|---|
bool | Whether this amoebot's bit of |
GetStateBit(int)
Helper for reading a single bit from the state integer.
Declaration
private bool GetStateBit(int bit)
Parameters
Type | Name | Description |
---|---|---|
int | bit | The position of the bit. |
Returns
Type | Description |
---|---|
bool | The value of the state bit at position |
HaveOverflow()
Checks whether an overflow occurred during the subtraction. Should only be called once the procedure has finished completely.
Declaration
public bool HaveOverflow()
Returns
Type | Description |
---|---|
bool |
|
Init(bool, bool, Direction, Direction)
Initializes the subroutine. Must be called by each
amoebot on the chain that stores a
and b
.
Declaration
public void Init(bool a, bool b, Direction predDir, Direction succDir)
Parameters
Type | Name | Description |
---|---|---|
bool | a | This amoebot's bit of |
bool | b | This amoebot's bit of |
Direction | predDir | The direction of the predecessor. Should be NONE only at the start of the chain. |
Direction | succDir | The direction of the successor. Should be NONE only at the end of the chain. |
IsFinishedOverflow()
Checks whether the procedure including overflow detection is finished. Should be called after ActivateReceive().
Declaration
public bool IsFinishedOverflow()
Returns
Type | Description |
---|---|
bool |
|
IsFinishedSub()
Checks whether the subtraction procedure is finished. Should be called after ActivateReceive(). If an overflow should be detected, another iteration has to be run.
Declaration
public bool IsFinishedSub()
Returns
Type | Description |
---|---|
bool |
|
PredDir()
Helper for reading the predecessor direction from the state integer.
Declaration
private Direction PredDir()
Returns
Type | Description |
---|---|
Direction | The direction of the chain predecessor. |
Round()
Helper for reading the round number from the state integer.
Declaration
private int Round()
Returns
Type | Description |
---|---|
int | The current round number. |
SetRound(int)
Helper for setting the round counter.
Declaration
private void SetRound(int round)
Parameters
Type | Name | Description |
---|---|---|
int | round | The new value of the round counter. |
SetStateBit(int, bool)
Helper for setting a single bit from the state integer.
Declaration
private void SetStateBit(int bit, bool value)
Parameters
Type | Name | Description |
---|---|---|
int | bit | The position of the bit. |
bool | value | The new value of the bit. |
SetupPinConfig(PinConfiguration)
Sets up the required circuits for the next step in the given pin configuration. This must be called after ActivateReceive() and before ActivateSend().
Declaration
public void SetupPinConfig(PinConfiguration pc)
Parameters
Type | Name | Description |
---|---|---|
PinConfiguration | pc | The pin configuration to set up. Partition set IDs will always equal one of the IDs of the contained pins. |
SuccDir()
Helper for reading the successor direction from the state integer.
Declaration
private Direction SuccDir()
Returns
Type | Description |
---|---|
Direction | The direction of the chain successor. |