public RelationAdvancedOrderedEnumerator(RelationDBManipulator <TValue> manipulator, ByteBuffer prefixBytes, uint prefixFieldCount, EnumerationOrder order, KeyProposition startKeyProposition, ByteBuffer startKeyBytes, KeyProposition endKeyProposition, ByteBuffer endKeyBytes, bool initKeyReader = true) { _prefixFieldCount = prefixFieldCount; _manipulator = manipulator; _tr = manipulator.Transaction; _ascending = order == EnumerationOrder.Ascending; _keyValueTr = _tr.KeyValueDBTransaction; _keyValueTrProtector = _tr.TransactionProtector; _prevProtectionCounter = _keyValueTrProtector.ProtectionCounter; _keyBytes = prefixBytes; _keyValueTr.SetKeyPrefix(_keyBytes); long startIndex; long endIndex; if (endKeyProposition == KeyProposition.Ignored) { endIndex = _keyValueTr.GetKeyValueCount() - 1; } else { switch (_keyValueTr.Find(endKeyBytes)) { case FindResult.Exact: endIndex = _keyValueTr.GetKeyIndex(); if (endKeyProposition == KeyProposition.Excluded) { endIndex--; } break; case FindResult.Previous: endIndex = _keyValueTr.GetKeyIndex(); break; case FindResult.Next: endIndex = _keyValueTr.GetKeyIndex() - 1; break; case FindResult.NotFound: endIndex = -1; break; default: throw new ArgumentOutOfRangeException(); } } if (startKeyProposition == KeyProposition.Ignored) { startIndex = 0; } else { switch (_keyValueTr.Find(startKeyBytes)) { case FindResult.Exact: startIndex = _keyValueTr.GetKeyIndex(); if (startKeyProposition == KeyProposition.Excluded) { startIndex++; } break; case FindResult.Previous: startIndex = _keyValueTr.GetKeyIndex() + 1; break; case FindResult.Next: startIndex = _keyValueTr.GetKeyIndex(); break; case FindResult.NotFound: startIndex = 0; break; default: throw new ArgumentOutOfRangeException(); } } _count = (uint)Math.Max(0, endIndex - startIndex + 1); _startPos = (uint)(_ascending ? startIndex : endIndex); _pos = 0; _seekNeeded = true; if (initKeyReader) { var primaryKeyFields = manipulator.RelationInfo.ClientRelationVersionInfo.GetPrimaryKeyFields(); var advancedEnumParamField = primaryKeyFields.ToList()[(int)_prefixFieldCount]; if (advancedEnumParamField.Handler.NeedsCtx()) { throw new BTDBException("Not supported."); } _keyReader = (Func <AbstractBufferedReader, IReaderCtx, TKey>)manipulator.RelationInfo .GetSimpleLoader(new RelationInfo.SimpleLoaderType(advancedEnumParamField.Handler, typeof(TKey))); _lengthOfNonDataPrefix = ObjectDB.AllRelationsPKPrefix.Length + PackUnpack.LengthVUInt(manipulator.RelationInfo.Id); } }
public RelationAdvancedOrderedSecondaryKeyEnumerator(RelationDBManipulator <TValue> manipulator, ByteBuffer prefixBytes, uint prefixFieldCount, EnumerationOrder order, KeyProposition startKeyProposition, ByteBuffer startKeyBytes, KeyProposition endKeyProposition, ByteBuffer endKeyBytes, uint secondaryKeyIndex) : base(manipulator, prefixBytes, prefixFieldCount, order, startKeyProposition, startKeyBytes, endKeyProposition, endKeyBytes, false) { _secondaryKeyIndex = secondaryKeyIndex; var secKeyFields = manipulator.RelationInfo.ClientRelationVersionInfo.GetSecondaryKeyFields(secondaryKeyIndex); var advancedEnumParamField = secKeyFields.ToList()[(int)_prefixFieldCount]; if (advancedEnumParamField.Handler.NeedsCtx()) { throw new BTDBException("Not supported."); } _keyReader = (Func <AbstractBufferedReader, IReaderCtx, TKey>)manipulator.RelationInfo .GetSimpleLoader(new RelationInfo.SimpleLoaderType(advancedEnumParamField.Handler, typeof(TKey))); }
public RelationAdvancedEnumerator( RelationDBManipulator <T> manipulator, ByteBuffer prefixBytes, uint prefixFieldCount, EnumerationOrder order, KeyProposition startKeyProposition, ByteBuffer startKeyBytes, KeyProposition endKeyProposition, ByteBuffer endKeyBytes) { _prefixFieldCount = prefixFieldCount; _manipulator = manipulator; _ascending = order == EnumerationOrder.Ascending; _tr = manipulator.Transaction; _keyValueTr = _tr.KeyValueDBTransaction; _keyValueTrProtector = _tr.TransactionProtector; _prevProtectionCounter = _keyValueTrProtector.ProtectionCounter; _keyBytes = prefixBytes; _keyValueTr.SetKeyPrefix(_keyBytes); _relationInfo = manipulator.RelationInfo; _prevModificationCounter = _relationInfo.ModificationCounter; long startIndex; long endIndex; if (endKeyProposition == KeyProposition.Ignored) { endIndex = _keyValueTr.GetKeyValueCount() - 1; } else { switch (_keyValueTr.Find(endKeyBytes)) { case FindResult.Exact: endIndex = _keyValueTr.GetKeyIndex(); if (endKeyProposition == KeyProposition.Excluded) { endIndex--; } break; case FindResult.Previous: endIndex = _keyValueTr.GetKeyIndex(); break; case FindResult.Next: endIndex = _keyValueTr.GetKeyIndex() - 1; break; case FindResult.NotFound: endIndex = -1; break; default: throw new ArgumentOutOfRangeException(); } } if (startKeyProposition == KeyProposition.Ignored) { startIndex = 0; } else { switch (_keyValueTr.Find(startKeyBytes)) { case FindResult.Exact: startIndex = _keyValueTr.GetKeyIndex(); if (startKeyProposition == KeyProposition.Excluded) { startIndex++; } break; case FindResult.Previous: startIndex = _keyValueTr.GetKeyIndex() + 1; break; case FindResult.Next: startIndex = _keyValueTr.GetKeyIndex(); break; case FindResult.NotFound: startIndex = 0; break; default: throw new ArgumentOutOfRangeException(); } } _count = (uint)Math.Max(0, endIndex - startIndex + 1); _startPos = (uint)(_ascending ? startIndex : endIndex); _pos = 0; _seekNeeded = true; _lengthOfNonDataPrefix = ObjectDB.AllRelationsPKPrefix.Length + PackUnpack.LengthVUInt(manipulator.RelationInfo.Id); }
public IAsyncEnumerable <IRow> Enumerate(ReadOnlyMemory <byte> startsWith, EnumerationOrder order = EnumerationOrder.Ordered) { return(new DeferredAsyncEnumerable(GetTrie(), t => t.EnumerateStartsWith(startsWith, order))); }
public IAsyncEnumerable <IRow> Enumerate(string?startsWith = null, EnumerationOrder order = EnumerationOrder.Ordered) { return(new DeferredAsyncEnumerable(GetTrie(), t => t.EnumerateStartsWith(startsWith ?? string.Empty, order))); }
public AdvancedEnumeratorParam(EnumerationOrder order) { Order = order; StartProposition = KeyProposition.Ignored; EndProposition = KeyProposition.Ignored; }
public double[] As1DArray(EnumerationOrder order = EnumerationOrder.ByRow) { switch (order) { case EnumerationOrder.ByColumn: return _enumerateByColumn(); case EnumerationOrder.ByRow: return _enumerateByRow(); default: throw new NotSupportedException(); } }
/// <summary> /// Construct a matrix from a 1 Dimensional array either building row by row, or column by column. /// </summary> public Matrix(double[] array, int numRows, int numCols, EnumerationOrder order = EnumerationOrder.ByColumn) { this._matrix = DenseMatrix.OfColumnMajor(numRows, numCols, array); if (order == EnumerationOrder.ByRow) { this._matrix = _matrix.Transpose(); } }