Moving structs containing strings ...

Bob W nospam at
Mon Apr 24 08:11:14 PDT 2006

"Derek Parnell" <derek at psych.ward> wrote in message 
news:op.s8if7ipr6b8z09 at
> .........
> However, there's a typo in it. Here is a fuller test of it ...
> .........

While I like your source in principal, I am
somewhat allergic to sequential memory
allocations. Therefore I have made some
modifications (see sample below). is probably still not working
properly with large files due to a similar

Please note that this is my last post about
the subject and I definitely do not intend to
start anything like a programming competition
(I wish I had the time for it though).

My own program, which looks completely
different than the simplified examples, was
fixed in a couple of minutes after reading
kris' post. So I won't concentrate on this
issue any further.


import std.stdio;

alias std.stdio.writefln wrl;

struct Sc {
  uint val;  char[2] idz;  char[] id;
  void opCall() { id=idz; }
  void opCall(char[] z, uint v) { idz[]=z;  val=v;  id=idz; }

Sc[] arr;

void ShowMe(char[] msg) {
  wrl("\n%s ...", msg);
  foreach (uint i, Sc s; arr)
    wrl("arr[%d] - val:%d, id:'%s'", i,s.val,;

void main() {
  // DmD documentation - quote: " ... Resizing a dynamic
  //   array is a relatively expensive operation ..."

  arr.length=99;  // leave enough space for ev. additions

  uint n=0;
  arr.length=n;   // now cut it's size back


  // delete 1st item

  for (uint i=1; i<arr.length; i++) {
    arr[i-1]=arr[i];  arr[i-1]();
  arr.length=arr.length-1;   // adjust length


More information about the Digitalmars-d-bugs mailing list