Option Strict On
Option Explicit On

Namespace Nexamas.UI.Architecture

    Friend Structure MASInteractionStateSet

        Private ReadOnly _value As MASInteractionState

        Friend Sub New(value As MASInteractionState)
            _value = value
        End Sub

        Friend ReadOnly Property Value As MASInteractionState
            Get
                Return _value
            End Get
        End Property

        Friend Function Has(state As MASInteractionState) As Boolean
            Return (_value And state) = state
        End Function

        Friend Function Add(state As MASInteractionState) As MASInteractionStateSet
            Return New MASInteractionStateSet(_value Or state)
        End Function

        Friend Function Remove(state As MASInteractionState) As MASInteractionStateSet
            Return New MASInteractionStateSet(_value And Not state)
        End Function

        Public Overrides Function ToString() As String
            Return _value.ToString()
        End Function

    End Structure

End Namespace