[Lazarus] Easiest way to "case" strings

Hans-Peter Diettrich DrDiettrich1 at aol.com
Fri Mar 27 01:51:52 CET 2009


Alexander Klenin schrieb:

> 2) Iterating over characters in string -- at first, it seems no
> different from any other array,
> but consider UTF-8 strings. Using s[i] notation in a loop will lead to
> O(n^2) time,
> while 'for ... in' can generate linear-time code.

Please note that for an iteration over UTF-8 strings the data type 
'string' is required, to hold the equivalent of a multi-byte UTF 
"character". Unless there exist data types for both UTF8String and 
UTF8Char, or MBCSString and MBCSChar etc., a 'for ... in' construct is 
rather useless.

> 3) Iterating over hash, tree, dataset, or really anything more complex
> than an array --
> there is currently no language support for that, which leads to many
> awkward, buggy and incompatible implementations.

IMO the same as for strings. As is, the compiler can only handle basic 
types, where e.g. a string is an array of fixed size elements (Char, 
WideChar), with consequently a fixed length. Everything else can be 
supported only by according class methods or user-supplied operators, 
which again open the chance for different operators in different units, 
projects, libraries...


> [regarding 'case of string']
>> Yes. But since this is not a simple type, but a complex type, it goes to a
>> different class. If that is your argument, make sure it works for arrays, records,
>> classes, interfaces and the other complex types too.
> I definitely agree that 'case' should work for classes --
> perhaps even more important than for strings. For records and static arrays
> it could be implemented, but the value of such feature would be truly marginal.

How would you define the equality and ranges of such types? I.e. what's 
the literal value and representation of the case label for an record? 
What for 'RecA..RecX:'?

DoDi




More information about the Lazarus mailing list