private void UpdateAtomicCompositionQueryForPartInHashSet(
            AtomicComposition atomicComposition,
            HashSet <ComposablePartDefinition> hashset,
            AtomicCompositionQueryState state)
        {
            PartQueryStateNode previousNode = GetPartQueryStateNode(atomicComposition);

            atomicComposition.SetValue(this, new PartInHashSetQueryStateNode(hashset, previousNode, state));
        }
        private void UpdateAtomicCompositionQueryForPartEquals(
            AtomicComposition atomicComposition,
            ComposablePartDefinition part,
            AtomicCompositionQueryState state)
        {
            PartQueryStateNode previousNode = GetPartQueryStateNode(atomicComposition);

            atomicComposition.SetValue(this, new PartEqualsQueryStateNode(part, previousNode, state));
        }
        private AtomicCompositionQueryState QueryPartState(AtomicComposition atomicComposition, ComposablePartDefinition definition)
        {
            PartQueryStateNode node = GetPartQueryStateNode(atomicComposition);

            if (node == null)
            {
                return(AtomicCompositionQueryState.Unknown);
            }
            else
            {
                return(node.GetQueryState(definition));
            }
        }
            public AtomicCompositionQueryState GetQueryState(ComposablePartDefinition definition)
            {
                int hashCode            = definition.GetHashCode();
                PartQueryStateNode node = this;

                do
                {
                    if (node.IsMatchingDefinition(definition, hashCode))
                    {
                        return(node._state);
                    }
                    node = node._previousNode;
                }while (node != null);

                return(AtomicCompositionQueryState.Unknown);
            }
 protected PartQueryStateNode(PartQueryStateNode previousNode, AtomicCompositionQueryState state)
 {
     _previousNode = previousNode;
     _state        = state;
 }
 public PartInHashSetQueryStateNode(HashSet <ComposablePartDefinition> parts, PartQueryStateNode previousNode, AtomicCompositionQueryState state) :
     base(previousNode, state)
 {
     _parts = parts;
 }
 public PartEqualsQueryStateNode(ComposablePartDefinition part, PartQueryStateNode previousNode, AtomicCompositionQueryState state) :
     base(previousNode, state)
 {
     _part     = part;
     _hashCode = part.GetHashCode();
 }