On Sun, 19 Jun 2011 11:28:22 +0200 (CEST) Michael Van Canneyt <mich...@freepascal.org> wrote:
> > > On Sat, 18 Jun 2011, Vladimir Zhirov wrote: > > > Hi, > > > > Reviewing a bunch of my string processing functions > > made me wonder what integer type should I use for > > position / length parameters. > > > > I used to plain "Integer" for this task, but looking through > > RTL and LCL code I noticed that sometimes SizeInt and > > even PtrInt are also used: > > - Length, Copy use Integer; > > - Pos, Delete, Insert use SizeInt; > > - UTF8Length, UTF8Pos, UTF8Copy, etc. use PtrInt. > > > > PtrInt use seems to be generally discouraged by FPC docs > > but does it apply to this particular case? > > > > The only benefit I see in SizeInt/PtrInt is larger size on 64-bit > > targets, that should theoretically make it possible to index > > larger strings. But is AnsiString type capable of holding more > > than High(Integer) bytes, or will it be so in the future? > > Ansistring is not capable of keeping more than High(Integer) bytes. That's not true. At least 3*high(integer) compiles and runs fine here on 64bit: var s: ansistring; begin SetLength(s,3*High(integer)); s[length(s)]:='A'; s[length(s)]:='B'; writeln(s[length(s)],' ',length(s)); end. I don't know where the real limit is. > > Thus, the question basically is: what integer type > > is recommended to be used as index/length > > for future-proof string processing functions? > > SizeInt should do just fine. Yes, because SizeInt is int64 under 64bit. Mattias _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal