Ignore:
Timestamp:
Jan 15, 2011, 10:03:27 PM (14 years ago)
Author:
george
Message:
  • Added: Generating encoded numbers for DynNumber demo.
Location:
CoolStreaming/Demo/DynNumber
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CoolStreaming/Demo/DynNumber

    • Property svn:ignore
      •  

        old new  
        11DynNumberDemo.exe
        22lib
         3heaptrclog.trc
         4DynNumberDemo
  • CoolStreaming/Demo/DynNumber/UMainForm.pas

    r125 r126  
    77uses
    88  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
    9   UDynNumber;
     9  ComCtrls, UDynNumber, Math;
    1010
    1111type
     
    1515  TMainForm = class(TForm)
    1616    Button1: TButton;
     17    Button2: TButton;
    1718    Edit1: TEdit;
    18     Memo1: TMemo;
     19    ListView1: TListView;
    1920    procedure Button1Click(Sender: TObject);
     21    procedure Button2Click(Sender: TObject);
    2022    procedure FormCreate(Sender: TObject);
    2123    procedure FormDestroy(Sender: TObject);
     
    4345  N: TDynamicNumber;
    4446  Line: string;
     47  NewItem: TListItem;
    4548begin
    46   Memo1.Clear;
    4749  try
    4850    N := TDynamicNumber.Create;
     51    ListView1.BeginUpdate;
     52    ListView1.Clear;
    4953    for I := 0 to 16 do begin
    5054      N.Stream.Size := 0;
     
    5458      for J := 0 to N.Stream.Size - 1 do
    5559        Line := Line + IntToStr(Integer(N.Stream.ReadBit));
    56       Memo1.Lines.Add(Line);
     60      NewItem := ListView1.Items.Add;
     61      NewItem.Caption := IntToStr(I);
     62      NewItem.SubItems.Add('');
     63      NewItem.SubItems.Add(Line);
    5764    end;
    5865  finally
     66    ListView1.EndUpdate;
     67    N.Free;
     68  end;
     69end;
     70
     71procedure TMainForm.Button2Click(Sender: TObject);
     72var
     73  I: Integer;
     74  Count: Integer;
     75  Parts: array of Integer;
     76  PartIndex: Integer;
     77  MaxValue: Integer;
     78  J: Integer;
     79  Line: string;
     80  NewItem: TListItem;
     81  N: TDynamicNumber;
     82begin
     83  Count := 1;
     84  SetLength(Parts, Count);
     85  try
     86    N := TDynamicNumber.Create;
     87    ListView1.BeginUpdate;
     88    ListView1.Clear;
     89    for I := 0 to 1000 do begin
     90
     91    // Write
     92    N.Stream.Size := 0;
     93    for J := 0 to Count - 2 do
     94      N.Stream.WriteNumber(1, 1);
     95    N.Stream.WriteNumber(0, 1);
     96    for PartIndex := 0 to Count - 1 do begin
     97      if PartIndex > 0 then MaxValue := Parts[PartIndex - 1] + 1
     98        else MaxValue := 1;
     99      for J := MaxValue - 1 downto 0 do
     100        if ((Parts[PartIndex] shr J) and 1) = 1 then N.Stream.WriteNumber(1, 1)
     101          else N.Stream.WriteNumber(0, 1);
     102    end;
     103    NewItem := ListView1.Items.Add;
     104    NewItem.Caption := IntToStr(I);
     105    J := Floor(Log2(I)) + 1;
     106    NewItem.SubItems.Add(FloatToStr(1 - (J / N.Stream.Size)));
     107    Line := '';
     108    N.Stream.Position := 0;
     109    for J := 0 to N.Stream.Size - 1 do
     110      Line := Line + IntToStr(Integer(N.Stream.ReadBit));
     111    NewItem.SubItems.Add(Line);
     112
     113    // Increment value
     114    PartIndex := Count - 1;
     115    repeat
     116      Parts[PartIndex] := Parts[PartIndex] + 1;
     117      if PartIndex > 0 then MaxValue := 1 shl (Parts[PartIndex - 1] + 1)
     118        else MaxValue := 2;
     119      if Parts[PartIndex] >= MaxValue then begin
     120        Parts[PartIndex] := 0;
     121        PartIndex := PartIndex - 1;
     122        if PartIndex < 0 then begin
     123          Count := Count + 1;
     124          SetLength(Parts, Count);
     125          for PartIndex := 0 to Count - 1 do
     126            Parts[PartIndex] := 0;
     127          Break;
     128        end;
     129      end else Break;
     130    until False;
     131    end;
     132  finally
     133    ListView1.EndUpdate;
    59134    N.Free;
    60135  end;
Note: See TracChangeset for help on using the changeset viewer.