--
You received this message because you are subscribed to the Google Groups "firebird-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email to firebird-deve...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/firebird-devel/eaa86c89-3df0-47b9-a54d-8c4839186239%40ibphoenix.com.
The impetus for the Interface array feature set was a requirement from the Boeing Aircraft noise group. They collected large number of sound samples from microphone arrays and needed to store and crunch these. They had been using an ad hoc database with array support and didn't like having to use to two different database systems.
In retrospect, I'm inclined to think that it was seriously over designed, but it had to work in an environments of tiny main memory (by today's standards) and networks that topped out at 10mbs. Then, a complete transfer of a large array was problem; now, not much.
When I revisited the issues for Amorphous, I decided that single dimension arrays were good enough (am I completely sure? No.).
In today's AI obsessed world, arrays, hierarchical navigable small world indexes, and a nearest operator are sine quo non if you want to play with the state of the art.
The Amorphous array info call and array descriptors are:
virtual int getArray(Array* descriptor) = 0; // returns length of array in bytes
struct Array
{
int size; // number of elements
int type; // data type of element
union
{
const double* doubles;
const float* floats;
const int* ints;
const unsigned char* bytes;
const void* data; // used for generic references
} array;
};
But, like I said, I may extend/redefine this for a vector of
array bounds. And, incidentally, for AI stuff, 16 bit floats are
very important; similarity vectors care a great deal more about
magnitude than precision.