public static FlatExpression Not(FlatExpression a) { if (a._operands.Count >= 64) { throw new NotImplementedException(); } var maxLines = 1ul << a._operands.Count; var expectedLines = (1ul << a._operands.Count) - (ulong)a._lines.Length; var lines = new FlatExpressionLine[expectedLines]; long index = 0; long j = 0; ulong i = 0; for (; i < maxLines && index < a._lines.LongLength; ++i) { if (i < a._lines[index].Mask) { lines[j] = new FlatExpressionLine(i); ++j; } else { ++index; } } for (; i < maxLines; ++i) { lines[j] = new FlatExpressionLine(i); ++j; } return(new FlatExpression(a.Operands, lines.ToArray())); }
public override FlatExpressionLine[] GetVariations(IReadOnlyList <FlatExpressionLine> lines) { var newValues = new FlatExpressionLine[lines.Count * (1 << _map.UnusedCount)]; var index = 0; foreach (var flatExpressionLine in lines) { var mask = _map.Remap(flatExpressionLine.Mask); foreach (var variation in _variations) { newValues[index] = new FlatExpressionLine(mask | variation); ++index; } } return(newValues); }
public override FlatExpressionLine[] GetVariations(IReadOnlyList <FlatExpressionLine> lines) { var values = new FlatExpressionLine[lines.Count * (1 << _map._varitationBits)]; var step = 1ul << _map._varitationOffset; var end = step << _map._varitationBits; var index = 0; foreach (var flatExpressionLine in lines) { for (ulong i = 0; i < end; i += step) { values[index] = new FlatExpressionLine(flatExpressionLine.Mask | i); ++index; } } return(values); }