private void WriteBooleanArrayElements(bool[] array) { // convert bool array to bit array var bits = BitVector.Create(array.Length); for (var i = 0; i < array.Length; i++) { bits[i] = array[i]; } // send over bit array foreach (var word in bits.Words()) { _writer.Write(word); } }
public void CheckWords() { for (int capacity = 0; capacity < maxBits; capacity++) { BitVector b = BitVector.Create(capacity); for (int i = 0; i < capacity; i++) { b[i] = false; } var required = BitVector.WordsRequired(capacity); var count = BitVector.AllSet(capacity).Words().Count(); Assert.Equal(required, count); } }
private void CheckRandomDataCore(Random r1, Random r2, int capacity) { BitVector d = BitVector.Create(capacity); Assert.Equal(capacity, d.Capacity); for (int i1 = 0; i1 < capacity; i1++) { d[i1] = r1.NextBool(); } Assert.Equal(capacity, d.Capacity); for (int i2 = 0; i2 < capacity; i2++) { Assert.Equal(d[i2], r2.NextBool()); } }
private void CheckTrueBitsCore(int capacity, Random r1, Random r2) { BitVector b = BitVector.Create(capacity); for (int i = 0; i < capacity; i++) { b[i] = r1.NextBool(); } IEnumerable<int> i1 = b.TrueBits(); IEnumerator<int> i2 = i1.GetEnumerator(); for (int i = 0; i < capacity; i++) { if (r2.NextBool()) { Assert.True(i2.MoveNext()); Assert.Equal(i2.Current, i); } } Assert.False(i2.MoveNext()); i2.Dispose(); }
internal NamedTypeSymbol GetCallSiteDelegateType( TypeSymbol loweredReceiver, RefKind receiverRefKind, ImmutableArray <TypeSymbol> loweredArguments, ImmutableArray <RefKind> refKinds, TypeSymbol loweredRight, TypeSymbol resultType) { Debug.Assert(refKinds.IsDefaultOrEmpty || refKinds.Length == loweredArguments.Length); var callSiteType = this.CallSite; if (callSiteType.IsErrorType()) { return(null); } var delegateSignature = MakeCallSiteDelegateSignature(callSiteType, loweredReceiver, loweredArguments, loweredRight, resultType); bool returnsVoid = resultType.SpecialType == SpecialType.System_Void; bool hasByRefs = receiverRefKind != RefKind.None || !refKinds.IsDefaultOrEmpty; if (!hasByRefs) { var wkDelegateType = returnsVoid ? WellKnownTypes.GetWellKnownActionDelegate(invokeArgumentCount: delegateSignature.Length) : WellKnownTypes.GetWellKnownFunctionDelegate(invokeArgumentCount: delegateSignature.Length - 1); if (wkDelegateType != WellKnownType.Unknown) { var delegateType = _compilation.GetWellKnownType(wkDelegateType); if (delegateType != null && !delegateType.IsErrorType()) { return(delegateType.Construct(delegateSignature)); } } } BitVector byRefs; if (hasByRefs) { byRefs = BitVector.Create(1 + (loweredReceiver != null ? 1 : 0) + loweredArguments.Length + (loweredRight != null ? 1 : 0)); int j = 1; if (loweredReceiver != null) { byRefs[j++] = receiverRefKind != RefKind.None; } if (!refKinds.IsDefault) { for (int i = 0; i < refKinds.Length; i++, j++) { if (refKinds[i] != RefKind.None) { byRefs[j] = true; } } } } else { byRefs = default(BitVector); } int parameterCount = delegateSignature.Length - (returnsVoid ? 0 : 1); return(_compilation.AnonymousTypeManager.SynthesizeDelegate(parameterCount, byRefs, returnsVoid).Construct(delegateSignature)); }
internal NamedTypeSymbol GetDelegateType( BoundExpression loweredReceiver, RefKind receiverRefKind, ImmutableArray <BoundExpression> loweredArguments, ImmutableArray <RefKind> refKinds, BoundExpression loweredRight, TypeSymbol resultType) { Debug.Assert(refKinds.IsDefaultOrEmpty || refKinds.Length == loweredArguments.Length); var callSiteType = _factory.WellKnownType(WellKnownType.core_runtime_compiler_CallSite); if (callSiteType.IsErrorType()) { return(null); } var delegateSignature = MakeCallSiteDelegateSignature(callSiteType, loweredReceiver, loweredArguments, loweredRight, resultType); bool returnsVoid = resultType.SpecialType == SpecialType.System_Void; bool hasByRefs = receiverRefKind != RefKind.None || !refKinds.IsDefaultOrEmpty; if (!hasByRefs) { var wkDelegateType = returnsVoid ? WellKnownTypes.GetWellKnownActionDelegate(invokeArgumentCount: delegateSignature.Length) : WellKnownTypes.GetWellKnownFunctionDelegate(invokeArgumentCount: delegateSignature.Length - 1); if (wkDelegateType != WellKnownType.Unknown) { var delegateType = _factory.Compilation.GetWellKnownType(wkDelegateType); if (!delegateType.HasUseSiteError) { return(delegateType.Construct(delegateSignature)); } } } BitVector byRefs; if (hasByRefs) { byRefs = BitVector.Create(1 + (loweredReceiver != null ? 1 : 0) + loweredArguments.Length + (loweredRight != null ? 1 : 0)); int j = 1; if (loweredReceiver != null) { byRefs[j++] = receiverRefKind != RefKind.None; } if (!refKinds.IsDefault) { for (int i = 0; i < refKinds.Length; i++, j++) { if (refKinds[i] != RefKind.None) { byRefs[j] = true; } } } } else { byRefs = default(BitVector); } int parameterCount = delegateSignature.Length - (returnsVoid ? 0 : 1); int generation = _factory.CompilationState.ModuleBuilderOpt.CurrentGenerationOrdinal; var synthesizedType = _factory.Compilation.AnonymousTypeManager.SynthesizeDelegate(parameterCount, byRefs, returnsVoid, generation); return(synthesizedType.Construct(delegateSignature)); }
private RefKindVector(int capacity) { _bits = BitVector.Create(capacity * 2); }