{-# language OverloadedStrings #-}

module FastDownward.SAS.VariableAssignment ( VariableAssignment(..), toSAS ) where

import qualified Data.Text.Lazy.Builder
import FastDownward.SAS.DomainIndex ( DomainIndex )
import qualified FastDownward.SAS.DomainIndex as DomainIndex
import FastDownward.SAS.VariableIndex ( VariableIndex )
import qualified FastDownward.SAS.VariableIndex as VariableIndex


data VariableAssignment =
  VariableAssignment VariableIndex DomainIndex
  deriving
    ( VariableAssignment -> VariableAssignment -> Bool
(VariableAssignment -> VariableAssignment -> Bool)
-> (VariableAssignment -> VariableAssignment -> Bool)
-> Eq VariableAssignment
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VariableAssignment -> VariableAssignment -> Bool
$c/= :: VariableAssignment -> VariableAssignment -> Bool
== :: VariableAssignment -> VariableAssignment -> Bool
$c== :: VariableAssignment -> VariableAssignment -> Bool
Eq, Eq VariableAssignment
Eq VariableAssignment
-> (VariableAssignment -> VariableAssignment -> Ordering)
-> (VariableAssignment -> VariableAssignment -> Bool)
-> (VariableAssignment -> VariableAssignment -> Bool)
-> (VariableAssignment -> VariableAssignment -> Bool)
-> (VariableAssignment -> VariableAssignment -> Bool)
-> (VariableAssignment -> VariableAssignment -> VariableAssignment)
-> (VariableAssignment -> VariableAssignment -> VariableAssignment)
-> Ord VariableAssignment
VariableAssignment -> VariableAssignment -> Bool
VariableAssignment -> VariableAssignment -> Ordering
VariableAssignment -> VariableAssignment -> VariableAssignment
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: VariableAssignment -> VariableAssignment -> VariableAssignment
$cmin :: VariableAssignment -> VariableAssignment -> VariableAssignment
max :: VariableAssignment -> VariableAssignment -> VariableAssignment
$cmax :: VariableAssignment -> VariableAssignment -> VariableAssignment
>= :: VariableAssignment -> VariableAssignment -> Bool
$c>= :: VariableAssignment -> VariableAssignment -> Bool
> :: VariableAssignment -> VariableAssignment -> Bool
$c> :: VariableAssignment -> VariableAssignment -> Bool
<= :: VariableAssignment -> VariableAssignment -> Bool
$c<= :: VariableAssignment -> VariableAssignment -> Bool
< :: VariableAssignment -> VariableAssignment -> Bool
$c< :: VariableAssignment -> VariableAssignment -> Bool
compare :: VariableAssignment -> VariableAssignment -> Ordering
$ccompare :: VariableAssignment -> VariableAssignment -> Ordering
$cp1Ord :: Eq VariableAssignment
Ord, Int -> VariableAssignment -> ShowS
[VariableAssignment] -> ShowS
VariableAssignment -> String
(Int -> VariableAssignment -> ShowS)
-> (VariableAssignment -> String)
-> ([VariableAssignment] -> ShowS)
-> Show VariableAssignment
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [VariableAssignment] -> ShowS
$cshowList :: [VariableAssignment] -> ShowS
show :: VariableAssignment -> String
$cshow :: VariableAssignment -> String
showsPrec :: Int -> VariableAssignment -> ShowS
$cshowsPrec :: Int -> VariableAssignment -> ShowS
Show )


toSAS :: VariableAssignment -> Data.Text.Lazy.Builder.Builder
toSAS :: VariableAssignment -> Builder
toSAS ( VariableAssignment VariableIndex
x DomainIndex
y ) =
  VariableIndex -> Builder
VariableIndex.toSAS VariableIndex
x Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Builder
" " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> DomainIndex -> Builder
DomainIndex.toSAS DomainIndex
y