Updated documentation regarding arrays

This commit is contained in:
Neil Brown 2007-07-31 21:27:51 +00:00
parent 231b3042ac
commit a72224728a

View File

@ -45,7 +45,7 @@ Code that has been imported verbatim from GenerateC (reason 2) has been tagged a
{- {-
For the array handling I am currently using the Blitz++ library: http://www.oonumerics.org/blitz/ For the array handling I am currently using a combination of std::vector and an array view class (tockArrayView) I built myself
I considered the following options: I considered the following options:
1. in-built C arrays 1. in-built C arrays
@ -59,13 +59,13 @@ Option 1 is what Adam used in GenerateC, but it involves carrying around the arr
Options 2 and 3 are fairly similar (boost::array is possible because arrays are of constant size in occam) but neither supports multiple dimensions Options 2 and 3 are fairly similar (boost::array is possible because arrays are of constant size in occam) but neither supports multiple dimensions
nor array slicing, so that would have been awkward. nor array slicing, so that would have been awkward.
Option 4 does support multiple dimensions and array slicing - but the latter would involve keeping tabs of the dimensions of the *original* array Option 4 does support multiple dimensions and array slicing - but the latter would involve keeping tabs of the dimensions of the *original* array
(that was sliced *from*), even through multiple slices, which would have been a nightmare. (that was sliced *from*), even through multiple slices and indexes, which would have been a nightmare.
Option 5 makes slicing nice and simple, and multiple dimensions are easy too. Hence, although it adds another dependency (boost would not have counted, Option 5 makes slicing nice and simple, and multiple dimensions are easy too. However, things like retyping are still a big problem, so in the end
as it is already a dependency of C++CSP) it is definitely the easiest solution for code generation. The dependency could be removed through option 6 it became untenable.
(even to the point of taking some GPL Blitz++ code) but that seems a step too far just to remove a dependency.
ADDENDUM: I have wrapped blitz::Array into tockArray in order to make the assignment work correctly (resizing before copy) and also provide Therefore the only remaining option was 6. I use std::vector (although this may become boost::array) to actually store each array, and then
some useful constructors use tockArrayView to work with the array. tockArrayView represents a view of an array, and never allocates or deallocates any memory. Thus they
can be passed around freely, which makes them easy to work with.
-} -}