[PD-dev] strings

Martin Peach martin.peach at sympatico.ca
Sun Dec 17 21:44:08 CET 2006


Mathieu Bouchard wrote:
> On Sat, 16 Dec 2006, Martin Peach wrote:
>
>> Yes, and it's also easier to limit strings to word (16-bit) lengths, 
>> while 8-bit is too short. So a t_string would look like:
>> typedef struct _string /* pointer to a string */
>> {
>>  unsigned short s_length; /* length of string in bytes */
>>  unsigned char *s_data; /* pointer to 1st byte of string */
>> } t_string;
>
> If you're not compiling in 16-bit mode, then there will be 2 or 6 
> bytes between the first and second field, so that the second field can 
> be aligned to a word boundary, supposing that the struct as a whole is 
> itself aligned to a word boundary. (By word, I strictly mean something 
> that is the same size as a pointer.)
>
> What I mean is that it's useless to not use the whole a length field 
> that is not the same size as the pointer field, if you have only those 
> two fields. If you have more than two fields, then you can put several 
> short fields in the space of a word (2 or 4).
I suppose we could do like Apple or Microsoft and have something like:

typedef struct _string /* pointer to a string */
{
    unsigned short s_length; /* length of string in bytes */
    unsigned short s_reserved; /* filler */
    unsigned char *s_data; /* pointer to 1st byte of string */
} t_string;

but in the long term it would be best to just use long lengths for when 
we all have teraflop laptops:

typedef struct _string /* pointer to a string */
{
    unsigned long s_length; /* length of string in bytes */
    unsigned char *s_data; /* pointer to 1st byte of string */
} t_string;

...but restrict the maximum string length using a #define 
MAX_STRING_LENGTH so that pd doesn't bite off more than it can chew...

Martin




More information about the Pd-dev mailing list