public virtual long GetRecordUid(bool allocate = true) { long result; result = -1; if (allocate) { if (FreeUids.Count > 0) { result = FreeUids[0]; FreeUids.RemoveAt(0); } else { CurrUid++; result = CurrUid; } } else { result = CurrUid; } return(result); }
public virtual void FreeRecordUid(long uid) { if (uid < 1) { // PrintError goto Cleanup; } if (CurrUid == uid) { CurrUid--; } else if (!FreeUids.Contains(uid)) { FreeUids.Add(uid); } Cleanup: ; }
public virtual RetCode FreeRecords(bool dispose = true) { if (dispose) { foreach (var record in Records) { record.Dispose(); } } Records.Clear(); for (var i = 0; i < Cache.Length; i++) { Cache[i] = default(T); } FreeUids.Clear(); CurrUid = 0; return(RetCode.Success); }