AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Größenveränderung bei dyn. Arrays auf Pointerbasis
Thema durchsuchen
Ansicht
Themen-Optionen

Größenveränderung bei dyn. Arrays auf Pointerbasis

Ein Thema von MStoll · begonnen am 3. Sep 2006 · letzter Beitrag vom 4. Sep 2006
 
MStoll

Registriert seit: 15. Nov 2005
131 Beiträge
 
Turbo Delphi für Win32
 
#1

Größenveränderung bei dyn. Arrays auf Pointerbasis

  Alt 3. Sep 2006, 23:45
Hallo

derzeit bin ich dabei, Array-Operationen (Sortieren, Austauschen, Vergleichen, Löschen, Einfügen) zu verallgemeinern, indem ich Prozeduren schreiben, denen ich ein dyn. Array als Zeiger übergebe (Siehe auch bei den Vorschlägen zur Code-Library, Thread "Shellsort für beliebige Arrays"). Sortieren, Austauschen und Vergleichen (bei statischen Typen!) geht soweit ganz gut allgemein, da sie keine Größenveränderungen am Array verursachen. Hab auch schon ne Basis für eine Lösch-Prozedur. Allerdings will es mir nicht gelingen, dabei die Größe des Arrays innerhalb der Prozedur zu verändern. Deshalb muss ich das immer so aufrufen:
Delphi-Quellcode:
ArrDelete(Arr, Length(Arr), SizeOf(Arr), idx);
SetLength(Arr, Length(Arr)-1);
Die ArrDelete-Prozedur sieht so aus:
Delphi-Quellcode:
procedure Exch(P : Pointer; ElSize : integer; a, b : integer);
var P1, P2 : Pointer;
    B1 : byte;
    x : integer;
begin
     P1 := Pointer(Integer(P) + ElSize * a);
     P2 := Pointer(Integer(P) + ElSize * b);
     
     for x := 0 to ElSize-1 do
     begin
          b1 := Byte(Pointer(Integer(P1)+x)^);
          Byte(Pointer(Integer(P1)+x)^) := Byte(Pointer(Integer(P2)+x)^);
          Byte(Pointer(Integer(P2)+x)^) := b1;
     end;
end;

procedure ArrDelete(P : Pointer; Size, ElSize, Idx : integer);
var x : integer;
begin
     if (Idx < 0) or (Idx >= Size) then
        exit;

     for x := Idx to Size-2 do
         Exch(P, ElSize, x, x+1);
end;
Ich würde nun gern letzteres SetLength irgendwie in die ArrDelete-Prozedur mit reintun.

Hat jemand eine Idee?

Danke
Michael
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz