[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
displaced arrays
Date: Thu, 3 Sep 1992 13:00 EDT
From: robin@jarrett.den.mmc.com (Robin Kladke (303-977-9760))
Can someone tell me if this is a bug (or i am just reading the documentation wrong based on
how i think it should be)?
I am taking messages in "binary" form and parsing off integers and strings. I declare one
array to be of element type 'string-char and to be of a length that allows 4 bytes (string-chars)
per integer and one byte (string-char) per character. This works peachy. In order to
parse the array, i displace an integer array to it using the following code:
Be careful doing this, as it exposes the byte order of the machine. If
you're using this for network communication, you can have portability
problems.
On the other hand, if this code only needs to run in Genera, there are
some existing macro packages that provide this functionality. They are
called DEFSTORAGE, and there's a version in the SYS package and another
(incompatible) one in LMFS. They let you use a syntax similar to
DEFSTRUCT to describe the layout of objects in byte arrays and define
accessors for them.
(make-array num-ints
:element-type 'integer
:displaced-to binary-msg
:displaced-index-offset start-byte)
For example, if the binary message contains 6 integers followed by a string and i want to parse off
the 3rd integer, num-ints will be 1, start-byte will be 8 (because there are 4 bytes per int).
Well, this doesn't work at all. I assumed that :displaced-index-offset was the index in the primary
array. This code works if i use start-int (in this example, 2), the index into the displaced integer
array.
The Symbolics documentation section "Displaced and Indirect Arrays with
Offsets" says that the index offset "is added to the subscript given."
It doesn't say that it's first scaled by the ratio of the element sizes
of the two arrays.
barmar