In the Swarm libraries, the spatial information of an agent (such as location and proximity to other agents) is associated with an object called a Discrete2D, which is at its core a two-dimensional array. The coordinates inside the two dimensions represent the location of a grid cell in a raster world. An agent is associated with this 2D object by the Discrete2D storing a pointer to the agent at the coordinates corresponding to the agent's location in the world.
In the GIS-CA, every location is occupied by a cell object, which has already been described in some detail. When a free-roaming agent is associated with the GIS-CA surface, it in fact is associated with the cell-object that occupies the coordinates on the cell surface (figure 6); it is the cell-object that contains the pointer to the free-roaming agent. This gives the free-roaming agent immediate access to all of the cell-object's attributes, including methods for modifying the cell's attributes. Thus, if the free-roaming agent were a cow, and the cell a piece of ground, the cow may send messages to the cell informing it that it has eaten some of its grass, trampled other grass, compacted its soil, etc. The messaging can work both way; the cell is perfectly capable of sending messages to the cow along the lines that it is a hole and the cow must now fall in.
Once agents are added to the cellsurface, the number of potential messages between objects increases dramatically. Agents must communicate with other agents, as well as with the cells on which they ``stand''. Cells must communicate with the agents ``on top'' of them, with their neighboring cells, with their cellsurface, and possibly with any embedded models that they may contain. If more than one kind of agent inhabits this world, then the number of potential messages being passed goes up again, possibly exponentially. As one contemplates this, the advantages of using established software libraries of proven stability for list management and message passing become more apparent.