Arch

The Arch is an Esoteric data structure devised by Areallycoolusername. It's similar to a deque that has arched into the form of a circle. 
== Specifics ==
There are 4 basic commands required for the proper use of an Arch. These being:
Command	Function
PUSH 	Pushes element onto position of pointer.
POP 	Pops element off of position under pointer.
POINT 	Points to integer position.
SPLIT 	Splits cell at position pointed to by pointer.
These 4 commands are the basis of Arch data manipulation, with extensions allowed for languages implementing the use of an Arch as its data structure. This page will use a pseudo-language called "ASL", Arch System Language, in the code examples.
 
=== Cells & SPLIT ===
In an Arch, there are an arbitrary amount of cells. Depending on the amount of cells specified, each cell can hold anywhere between and including, 8 to 64 bits of data. The minimum and default amount of cells in an Arch is 64, where each cell can hold 64 bits of data. That's a total amount of 4096 bits of memory. In order to create more cells, a cell has to be split using the SPLIT command, followed by either, 2, 4, or 8. Splitting a cell by 2 will create 2 cells with 32 bits of memory, splitting it by 4 will produce 4 cells with 16 bits of memory, and splitting it by 8 will produce 8 cells with 8 bits of memory. e.g SPLIT 8, will make 8 cells with 8 bits of memory each. An Arch with all its cells split by 8, will have 512 cells with 8 bits of memory each. An Arch cannot have infinite length, or an infinite number of cells, as this goes against the definition of an Arch.
=== POINT ===
Before the Arch can actually perform the tasks you wan to do to the cells, it need to know the position of the cell in question. This is where the POINT command comes in. It's used to point to the integer position of a cell, where it will then be manipulated by the other 3 commands. You have to declare the keyword before any data manipulation keywords are specified, followed by an integer value between and including 64 to 512. e.g POINT 512, points to cell position 512. The POINT command is needed since there is no front, back, top, or bottom in a circle, therefore just using the commands can't do anything.
=== Properties ===
You may be asking, "if the Arch is a circle, then what happens when the cells are all full, and the PUSH command is used?" If this is the case, the element being pushed should replace the value in front of the cell being pointed to. This process is repeated every time the PUSH command is used when the Arch is full, and also happens when you push a value into a cell that already has a value. When an element is POPped from the Arch, unless the cell is filled again with the PUSH command, the elements of all the cells behind the initial cell are pushed forward one cell, filling the gap, and leaving a gap in the first cell, where it will not be affected.
=== POP ===
The POP command is used, after the cell position is specified, to remove an element from the cell. e.g 
POINT 512
PUSH 3
POP
This program points to cell 512, pushes the value 3 in it, and then pops the value.
=== PUSH ===
The PUSH command pushes a value into the cell. e.g
POINT 69
PUSH AB
 
This program points to cell 69, and pushes value AB into it.
== Computational Properties ==
Arch based languages aren't Turing complete, as the amount of data in an Arch is limited. They can be capable of creating infinite loops, however.
== Languages ==
When more languages implement the use of an arch, they'll be added here.
Languages 	Loops
Char 	No
Doug 	Yes
An arch is simply a curve.	Yes
Force of Arch 	Yes
Category: Data Types and Structures
Category: 2019