I have a function in C++ that I am attempting to replicate in delphi:
typedef double ANNcoord; // coordinate data type
typedef ANNcoord* ANNpoint; // a point
typedef ANNpoint* ANNpointArray; // an array of points
bool readPt(istream &in, ANNpoint p) // read point (false on EOF)
{
for (int i = 0; i < dim; i++) {
if(!(in >> p[i])) return false;
}
return true;
}
In Delphi I believe that I have correctly declared the data types.. (I could be wrong):
type
IPtr = ^IStream; // pointer to Istream
ANNcoord = Double;
ANNpoint = ^ANNcoord;
function readPt(inpt: IPtr; p: ANNpoint): boolean;
var
i: integer;
begin
for i := 0 to dim do
begin
end;
end;
But I cannot figure out how to mimic the behavior in the C++ function (probably because I do not understand the bitshift operator).
Also, I need to eventually figure out how to transfer the set of points from a Zeos TZQuery object to the same datatype – so if anyone has some any input on that I would really appreciate it.
Try:
There is no need to read each ANNcoord separately. Note that istream is a stream class, not an IStream interface, in C++. Delphi’s equivalent is TStream. The code assumes the stream is opened for reading (Create-d with the proper parameters) and the current stream pointer points to a number (dim) of ANNcoords, just like the C++ code does.
FWIW
in >> p[i]reads anANNcoordfrom the input streamintop[i], interpretingpas a pointer to an array ofANNcoords.Update
As Rob Kennedy pointed out,
in >> myDoublereads a double from the input stream, but the stream is interpreted as text stream, not binary, i.e. it looks like:There is, AFAIK, no equivalent method or operation in Delphi for streams. There is only
System.ReadandSystem.Readlnfor this purpose. Apparently Peter Below once wrote aunit StreamIOwhich makes it possible to useSystem.ReadandSystem.Readlnfor streams. I could only find one version, in a newsgroup post.It would probably make sense to write a wrapper for streams that can read doubles, integers, singles, etc. from their text representations. I haven’t seen one yet.