internal static void VisitBinaryVectorValueChange(VCDLexer lexer, ReadOnlySpan <byte> valueText, IDToVarDef idToVariable, SimPass pass, BitAllocator bitAlloc) { (UnsafeMemory <BitState> bits, bool isValidBinary) = ToBitStates(valueText, bitAlloc); var id = lexer.NextWordAsMem(); if (idToVariable.TryGetValue(id, out List <VarDef>?variables)) { pass.BinValue = new BinaryVarValue(bits, variables, isValidBinary); } else { throw new Exception($"Unknown variable identifier: {id}"); } }
internal static void VisitScalarValueChange(ReadOnlyMemory <byte> text, IDToVarDef idToVariable, SimPass pass, BitAllocator bitAlloc) { UnsafeMemory <BitState> bits = bitAlloc.GetBits(1); BitState bit = ToBitState(text.Span[0]); var id = text.Slice(1); bits.Span[0] = bit; if (idToVariable.TryGetValue(id, out List <VarDef>?variable)) { pass.BinValue = new BinaryVarValue(bits, variable, ((int)bit & 0b10) == 0); } else { throw new Exception($"Unknown variable identifier: {id}"); } }
internal static void VisitRealVectorValueChange(VCDLexer lexer, ReadOnlySpan <byte> valueText, IDToVarDef idToVariable, SimPass pass, BitAllocator bitAlloc) { Span <char> chars = stackalloc char[valueText.Length]; valueText.CopyToCharArray(chars); double value = double.Parse(chars, NumberStyles.Float, CultureInfo.InvariantCulture); var id = lexer.NextWordAsMem(); if (idToVariable.TryGetValue(id, out List <VarDef>?variable)) { pass.RealValue = new RealVarValue(value, variable); } else { throw new Exception($"Unknown variable identifier: {id}"); } }