public bool Deq(ref long Counter, ref Chip Chip, ref EnmDataType Type, ref int Address, ref int Data, ref object ExData) { return(ringBuffer.Deq(ref Counter, ref Chip, ref Type, ref Address, ref Data, ref ExData)); }
public bool Enq(outDatum od, long Counter, Chip Chip, EnmDataType Type, int Address, int Data, object ExData) { //if (name != "") mml2vgmIDE.log.Write( // string.Format("[{0}]:Enqueue:Counter:{1}:Model:{2}:Device:{3}:Number:{4}:Type:{5}:Address:{6:x4}:Data:{7:x4}" // , name, Counter, Chip.Model, Chip.Device, Chip.Number, Type, Address, Data)); lock (lockObj) { if (enqPos.next == deqPos) { //if (!AutoExtend) //{ //return false; //} //自動拡張 try { CntPackData p = new CntPackData(); buf.Add(p); p.prev = enqPos; p.next = enqPos.next; enqPos.next = p; p.next.prev = p; } catch { return(false); } } bLength++; //データをセット enqPos.Counter = Counter; enqPos.pack.Copy(od, Chip, Type, Address, Data, ExData); if (Counter >= enqPos.prev.Counter) { enqPos = enqPos.next; //debugDispBuffer(); return(true); } CntPackData lastPos = enqPos.prev; //サーチ long bufCounter = buf.Count + 1; srcPos = enqPos.prev; while (Counter < srcPos.Counter && srcPos != deqPos && bufCounter > 0) { srcPos = srcPos.prev; bufCounter--; } if (Counter < srcPos.Counter && srcPos == deqPos) { srcPos = srcPos.prev; deqPos = enqPos; } //enqPosをリングから切り出す。 CntPackData nextPack = enqPos; enqPos.prev.next = enqPos.next; enqPos.next.prev = enqPos.prev; //enqPosを挿入する tmpPos = srcPos.next; tmpPos.prev = enqPos; srcPos.next = enqPos; enqPos.prev = srcPos; enqPos.next = tmpPos; enqPos = lastPos.next; //debugDispBuffer(); return(true); } }
public bool Enq(long Counter, Chip Chip, EnmDataType Type, int Address, int Data, object ExData) { return(ringBuffer.Enq(Counter, Chip, Type, Address, Data, ExData)); }