/// <summary> /// Builds a tuple with the items set to the given tuple elements. /// The tuple represents a value of user defined type if a name is specified. /// Registers the value with the scope manager, unless registerWithScopeManager is set to false. /// Increases the reference count for the tuple elements. /// </summary> /// <param name="typeName">The name of the user defined typed that the tuple represents</param> /// <param name="registerWithScopeManager">Whether or not to register the built tuple with the scope manager</param> /// <param name="tupleElements">The tuple elements</param> private TupleValue CreateTuple(UserDefinedType?typeName, bool registerWithScopeManager, params IValue[] tupleElements) { var elementTypes = tupleElements.Select(v => v.QSharpType).ToImmutableArray(); TupleValue tuple = new TupleValue(typeName, elementTypes, this.sharedState, registerWithScopeManager); PointerValue[] itemPointers = tuple.GetTupleElementPointers(); for (var i = 0; i < itemPointers.Length; ++i) { itemPointers[i].StoreValue(tupleElements[i]); this.sharedState.ScopeMgr.IncreaseReferenceCount(tupleElements[i]); } return(tuple); }
/// <summary> /// Builds a tuple with the items set to the given tuple elements. /// Registers the value with the scope manager, unless registerWithScopeManager is set to false. /// </summary> /// <param name="tupleElements">The tuple elements</param> internal TupleValue CreateTuple(ImmutableArray <TypedExpression> tupleElements, bool registerWithScopeManager = true) { var elementTypes = tupleElements.Select(v => v.ResolvedType).ToImmutableArray(); TupleValue tuple = new TupleValue(null, elementTypes, this.sharedState, registerWithScopeManager); PointerValue[] itemPointers = tuple.GetTupleElementPointers(); var elements = tupleElements.Select(this.sharedState.BuildSubitem).ToArray(); for (var i = 0; i < itemPointers.Length; ++i) { itemPointers[i].StoreValue(elements[i]); } return(tuple); }