Circular buffer test.
uses MtxExpr, Math387, MtxVec, SignalUtils, MtxVecTee, MtxVecEdit; procedure TForm1.Button1Click(Sender: TObject); var h1,h,c,b: Vector; i,n: integer; State: TCircularBufferState; begin h1 := Ramp(30, mvDouble, 0,1); c.Size(h1); c.SetZero; h.Size(h1); h.SetZero; n := 6; InitCircularBuffer(11,2,State); for i := 0 to (h1.Length div n) - 1 do begin h1.SetSubRange(i*n,n); h.SetSubRange(i*n,n); c.SetSubRange(i*n,n); WriteToCircularBuffer(b,h1,State); n := PeekCircularBuffer(State); MonitorCircularBuffer(b,h,State); ReadFromCircularBuffer(b,c,State); end; h1.SetFullRange; h.SetFullRange; c.SetFullRange; DrawIt([h1,h,c],['Original','Monitored','Read']); //must be all equal, if right end;
#include "MtxExpr.hpp" #include "MtxVecEdit.hpp" #include "MtxVecTee.hpp" #include "SignalUtils.hpp" void __fastcall TForm1::BitBtn1Click(TObject *Sender) { sVector h1,h,c,b; int n,i,k; TCircularBufferState State; h1 = Ramp(30, mvDouble, 0,1); c.Size(h1); c.SetZero(); h.Size(h1); h.SetZero(); n = 6; InitCircularBuffer(11,2,State); k = h1.Length/n; for (i = 0; i < k; i++) //must use k here, otherwise h1.Length is evaluated for every iteration { h1.SetSubRange(i*n,n); h.SetSubRange(i*n,n); c.SetSubRange(i*n,n); WriteToCircularBuffer(b,h1,State); PeekCircularBuffer(State); MonitorCircularBuffer(b,h,State); ReadFromCircularBuffer(b,c,State); } h1.SetFullRange(); h.SetFullRange(); c.SetFullRange(); DrawIt(OPENARRAY(TVec*,(h1,h,c)),OPENARRAY(AnsiString,("Original","Monitored","Read"))); //must be all equal, if right }
Copyright (c) 1999-2025 by Dew Research. All rights reserved.
|