{-# LANGUAGE TypeFamilies, Rank2Types #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE PostfixOperators #-}
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleContexts #-}

-- | The logic to render C++ code is contained in this module
module Drasil.GOOL.LanguageRenderer.CppRenderer (
  -- * C++ Code Configuration -- defines syntax of all C++ code
  CppSrcCode(..), CppHdrCode(..), CppCode(..), unCPPC, cppName, cppVersion
) where

import Drasil.FileHandling.Legacy (blank, indent, indentList)

import Drasil.Shared.CodeType (CodeType(..))
import Drasil.Shared.InterfaceCommon (UnRepr(..), SharedProg, SharedStatement,
  Label, Body, Variable, SVariable, Value, SValue, NamedArgs, BodySym(..),
  oneLiner, BlockSym(..), TypeSym(..), TypeElim(..), getTypeString,
  VariableSym(..), VisibilitySym(..), VariableElim(..), ValueSym(..),
  Argument(..), Literal(..), MathConstant(..), VariableValue(..),
  CommandLineArgs(..), NumericExpression(..), BooleanExpression(..),
  Comparison(..), ValueExpression(..), funcApp, extFuncApp, IndexTranslator(..),
  Reference(..), Array(..), List(..), Set(..), InternalList(..),
  StatementSym(..), AssignStatement(..), DeclStatement(..), IOStatement(..),
  StringStatement(..), FunctionSym, FuncAppStatement(..), BinderSym(..),
  CommentStatement(..), ControlStatement(..), ScopeSym(..), ParameterSym(..),
  MethodSym(..), convScope, BinderElim (..), (&=))
import Drasil.GOOL.InterfaceGOOL (CSStateVar, OOProg, OOStatement, Class,
  ProgramSym(..), FileSym(..), ModuleSym(..), ClassSym(..), OOTypeSym(..),
  OOVariableSym(..), SelfSym(..), AttachmentSym(..), StateVarSym(..), OOValueSym,
  OOVariableValue, OOValueExpression(..), selfMethodCall, InternalValueExp(..),
  objMethodCall, OOFunctionSym(..), ($.), GetSet(..), OODeclStatement(..),
  OOFuncAppStatement(..), ObserverPattern(..), StrategyPattern(..),
  OOMethodSym(..), convTypeOO)
import Drasil.GOOL.Renderers (renderType, renderParam,)
import Drasil.Shared.RendererClassesCommon (CommonRenderSym, ImportSym(..),
  RenderBody(..), BodyElim, RenderBlock(..), BlockElim, RenderType(..),
  UnaryOpSym(..), BinaryOpSym(..), OpElim(uOpPrec, bOpPrec), RenderVariable(..),
  InternalVarElim(variableBind), InternalBinderElim(..), RenderValue(..),
  ValueElim(valuePrec, valueInt), InternalListFunc(..), RenderFunction(..),
  FunctionElim(functionType), InternalAssignStmt(..), InternalIOStmt(..),
  InternalControlStmt(..), RenderStatement(..), StatementElim(statementTerm),
  RenderVisibility(..), VisibilityElim, MSMthdType, MethodTypeSym(..),
  RenderParam(..), ParamElim(parameterName, parameterType), RenderMethod(..),
  MethodElim, BlockCommentSym(..), BlockCommentElim, ScopeElim(..))
import qualified Drasil.Shared.RendererClassesCommon as RC (import', body, block,
  uOp, bOp, variable, value, function, statement, visibility, parameter,
  method, blockComment', InternalBinderElim(binderElim), RenderValue(call))
import Drasil.GOOL.RendererClassesOO (OORenderSym, RenderFile(..),
  PermElim(binding), InternalGetSet(..), OOMethodTypeSym(..),
  OORenderMethod(..), StateVarElim, ParentSpec, RenderClass(..), ClassElim,
  RenderMod(..), ModuleElim)
import qualified Drasil.GOOL.RendererClassesOO as RC (perm, stateVar, class',
  module')

import Drasil.Shared.LanguageRenderer (addExt, classDec, blockCmtStart,
  blockCmtEnd, docCmtStart, bodyStart, bodyEnd, endStatement, commentStart,
  returnLabel, elseIfLabel, tryLabel, catchLabel, throwLabel, array', constDec',
  listSep', argc, argv, constDec, mainFunc, containing, functionDox, valueList,
  parameterList, appendToBody, surroundBody, getterName, setterName)
import qualified Drasil.Shared.LanguageRenderer as R (this', this, sqrt, fabs,
  log10, log, exp, sin, cos, tan, asin, acos, atan, floor, ceil, pow, multiStmt,
  body, stateVar, constVar, cast, castObj, classLevel, instanceLevel,
  break, continue, private, public, blockCmt, docCmt, addComments, commentedMod,
  commentedItem)
import Drasil.Shared.LanguageRenderer.Constructors (mkStmt, mkStmtNoEnd,
  mkStateVal, mkVal, mkStateVar, mkVar, typeFromData, VSOp, mkOp, unOpPrec,
  powerPrec, unExpr, unExpr', typeUnExpr, binExpr, binExpr', typeBinExpr)
import qualified Drasil.Shared.LanguageRenderer.LanguagePolymorphic as G (
  multiBody, block, multiBlock, obj, negateOp, csc, sec, cot, equalOp,
  notEqualOp, greaterOp, greaterEqualOp, lessOp, lessEqualOp, plusOp, minusOp,
  multOp, divideOp, moduloOp, var, classVar, instanceVarAccess, arrayElem,
  litChar, litDouble, litInt, litString, valueOf, arg, objAccess, objMethodCall,
  funcAppMixedArgs, newObjMixedArgs, lambda, func, get, set, listAccess, getFunc,
  setFunc, stmt, loopStmt, emptyStmt, assign, subAssign, objDecNew, print,
  closeFile, returnStmt, valStmt, comment, throw, ifCond, tryCatch, construct,
  param, method, getMethod, setMethod, function, buildClass, implementingClass,
  commentedClass, modFromData, fileDoc, fileFromData, defaultOptSpace, local)
import Drasil.Shared.LanguageRenderer.LanguagePolymorphic (classVarAccessCheck)
import qualified Drasil.Shared.LanguageRenderer.CommonPseudoOO as CP (int,
  constructor, doxFunc, doxClass, doxMod, buildModule, litArray,
  call', listAccessFunc', containsInt, string, docInOutFunc, extraClass,
  intToIndex, indexToInt, global, setMethodCall, destructorError)
import qualified Drasil.GOOL.LanguageRenderer.CommonGOOL as CG (constDecDef,
  listAppend, innerType)
import qualified Drasil.Shared.LanguageRenderer.CLike as C (charRender, float,
  double, char, listType, void, notOp, andOp, orOp, litTrue, litFalse, litFloat,
  inlineIf, libFuncAppMixedArgs, libNewObjMixedArgs, listSize, increment,
  increment1, decrement1, varDec, setType, varDecDef, listDec, extObjDecNew,
  switch, for, while, multiAssignError, multiReturnError, multiTypeError)
import qualified Drasil.Shared.LanguageRenderer.Macros as M (runStrategy,
  listSlice, stringListVals, stringListLists, forRange, notifyObservers)
import Drasil.Shared.AST (Terminator(..), VisibilityTag(..), AttachmentTag(..),
  onAttachment, AttachmentData(..), ad, FileType(..), FileData(..), fileD,
  FuncData(..), fd, ModData(..), md, updateMod, OpData(..), ParamData(..), pd,
  ProgData(..), progD, emptyProg, StateVarData(..), svd, TypeData(..),
  ValData(..), vd, VarData(..), vard, BinderD(..), bindFormD, ScopeData)
import Drasil.Shared.Classes (Pair(..))
import Drasil.Shared.Helpers (angles, doubleQuotedText, hicat, vibcat,
  emptyIfEmpty, toCode, toState, onCodeValue, onStateValue, on2CodeValues,
  on2StateValues, on3CodeValues, on3StateValues, onCodeList, onStateList,
  on2StateLists, on2StateWrapped)
import Drasil.Shared.State (CS, MS, VS, lensGStoFS, lensFStoCS, lensFStoMS,
  lensCStoMS, lensCStoVS, lensCStoFS, lensMStoVS, lensVStoMS, modifyReturn,
  revFiles, addLangImport, addLangImportVS, getLangImports, getLibImports,
  addModuleImportVS, getModuleImports, addHeaderLangImport, getHeaderLangImports,
  addHeaderModImport, getHeaderLibImports, getHeaderModImports, addDefine,
  getDefines, addHeaderDefine, getHeaderDefines, addUsing, getUsing,
  addHeaderUsing, getHeaderUsing, setFileType, getModuleName, setModuleName,
  setClassName, getClassName, setCurrMain, getCurrMain, getClassMap,
  setVisibility, getVisibility, setCurrMainFunc, getCurrMainFunc, useVarName,
  setVarScope, getVarScope)

import Prelude hiding (break,print,(<>),sin,cos,tan,floor,pi,log,exp,mod,max)
import Control.Lens.Zoom (zoom)
import Control.Monad (join)
import Control.Monad.State (State, modify)
import Data.Composition ((.:))
import Data.List (sort)
import qualified Data.Map as Map (lookup)
import Text.PrettyPrint.HughesPJ (Doc, text, (<>), (<+>), ($$), hcat, braces,
  parens, empty, equals, vcat, lbrace, rbrace, colon, isEmpty, quotes, semi, render)

import qualified Drasil.Shared.LanguageRenderer.Common as CS

cppHdrExt, cppSrcExt :: String
cppHdrExt :: ClassName
cppHdrExt = ClassName
"hpp"
cppSrcExt :: ClassName
cppSrcExt = ClassName
"cpp"

data CppCode x y a = CPPC {forall (x :: * -> *) (y :: * -> *) a. CppCode x y a -> x a
src :: x a, forall (x :: * -> *) (y :: * -> *) a. CppCode x y a -> y a
hdr :: y a}

instance Pair CppCode where
  pfst :: forall (x :: * -> *) (y :: * -> *) a. CppCode x y a -> x a
pfst (CPPC x a
xa y a
_) = x a
xa
  psnd :: forall (x :: * -> *) (y :: * -> *) a. CppCode x y a -> y a
psnd (CPPC x b
_ y b
yb) = y b
yb
  pair :: forall (x :: * -> *) a (y :: * -> *). x a -> y a -> CppCode x y a
pair = x a -> y a -> CppCode x y a
forall (x :: * -> *) (y :: * -> *) a. x a -> y a -> CppCode x y a
CPPC

unCPPC :: CppCode CppSrcCode CppHdrCode a -> a
unCPPC :: forall a. CppCode CppSrcCode CppHdrCode a -> a
unCPPC (CPPC (CPPSC a
a) CppHdrCode a
_) = a
a

hdrToSrc :: CppHdrCode a -> CppSrcCode a
hdrToSrc :: forall a. CppHdrCode a -> CppSrcCode a
hdrToSrc (CPPHC a
a) = a -> CppSrcCode a
forall a. a -> CppSrcCode a
CPPSC a
a

instance (Pair p) => SharedProg (p CppSrcCode CppHdrCode)
  (Doc, VisibilityTag) (Doc, Terminator) MethodData
instance (Pair p) => SharedStatement (p CppSrcCode CppHdrCode) (Doc, Terminator)
instance (Pair p) => OOStatement (p CppSrcCode CppHdrCode) (Doc, Terminator)
instance (Pair p) => OOProg (p CppSrcCode CppHdrCode)
  (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData ProgData

instance (Pair p) => ProgramSym (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData ProgData where
  prog :: ClassName
-> ClassName
-> [FS (p CppSrcCode CppHdrCode File)]
-> GSProgram (p CppSrcCode CppHdrCode) ProgData
prog ClassName
n ClassName
st [FS (p CppSrcCode CppHdrCode File)]
mods = do
    [p CppSrcCode CppHdrCode File]
m <-  (FS (p CppSrcCode CppHdrCode File)
 -> StateT GOOLState Identity (p CppSrcCode CppHdrCode File))
-> [FS (p CppSrcCode CppHdrCode File)]
-> StateT GOOLState Identity [p CppSrcCode CppHdrCode File]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM (LensLike'
  (Zoomed (StateT FileState Identity) (p CppSrcCode CppHdrCode File))
  GOOLState
  FileState
-> FS (p CppSrcCode CppHdrCode File)
-> StateT GOOLState Identity (p CppSrcCode CppHdrCode File)
forall c.
LensLike'
  (Zoomed (StateT FileState Identity) c) GOOLState FileState
-> StateT FileState Identity c -> StateT GOOLState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT FileState Identity) (p CppSrcCode CppHdrCode File))
  GOOLState
  FileState
(FileState
 -> Focusing Identity (p CppSrcCode CppHdrCode File) FileState)
-> GOOLState
-> Focusing Identity (p CppSrcCode CppHdrCode File) GOOLState
Lens' GOOLState FileState
lensGStoFS) [FS (p CppSrcCode CppHdrCode File)]
mods
    let fm :: [CppSrcCode File]
fm = (p CppSrcCode CppHdrCode File -> CppSrcCode File)
-> [p CppSrcCode CppHdrCode File] -> [CppSrcCode File]
forall a b. (a -> b) -> [a] -> [b]
map p CppSrcCode CppHdrCode File -> CppSrcCode File
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst [p CppSrcCode CppHdrCode File]
m
        sm :: [CppSrcCode File]
sm = (p CppSrcCode CppHdrCode File -> CppSrcCode File)
-> [p CppSrcCode CppHdrCode File] -> [CppSrcCode File]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode File -> CppSrcCode File
forall a. CppHdrCode a -> CppSrcCode a
hdrToSrc (CppHdrCode File -> CppSrcCode File)
-> (p CppSrcCode CppHdrCode File -> CppHdrCode File)
-> p CppSrcCode CppHdrCode File
-> CppSrcCode File
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode File -> CppHdrCode File
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode File]
m
    CppSrcCode ProgData
p1 <- ClassName
-> ClassName
-> [FS (CppSrcCode File)]
-> GSProgram CppSrcCode ProgData
forall (r :: * -> *) vis smt md svr att prg.
ProgramSym r vis smt md svr att prg =>
ClassName -> ClassName -> [FS (r File)] -> GSProgram r prg
prog ClassName
n ClassName
st ([FS (CppSrcCode File)] -> GSProgram CppSrcCode ProgData)
-> [FS (CppSrcCode File)] -> GSProgram CppSrcCode ProgData
forall a b. (a -> b) -> a -> b
$ (CppSrcCode File -> FS (CppSrcCode File))
-> [CppSrcCode File] -> [FS (CppSrcCode File)]
forall a b. (a -> b) -> [a] -> [b]
map CppSrcCode File -> FS (CppSrcCode File)
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure [CppSrcCode File]
sm [FS (CppSrcCode File)]
-> [FS (CppSrcCode File)] -> [FS (CppSrcCode File)]
forall a. [a] -> [a] -> [a]
++ (CppSrcCode File -> FS (CppSrcCode File))
-> [CppSrcCode File] -> [FS (CppSrcCode File)]
forall a b. (a -> b) -> [a] -> [b]
map CppSrcCode File -> FS (CppSrcCode File)
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure [CppSrcCode File]
fm
    (GOOLState -> GOOLState) -> StateT GOOLState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify GOOLState -> GOOLState
revFiles
    p CppSrcCode CppHdrCode ProgData
-> GSProgram (p CppSrcCode CppHdrCode) ProgData
forall a. a -> StateT GOOLState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (p CppSrcCode CppHdrCode ProgData
 -> GSProgram (p CppSrcCode CppHdrCode) ProgData)
-> p CppSrcCode CppHdrCode ProgData
-> GSProgram (p CppSrcCode CppHdrCode) ProgData
forall a b. (a -> b) -> a -> b
$ CppSrcCode ProgData
-> CppHdrCode ProgData -> p CppSrcCode CppHdrCode ProgData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode ProgData
p1 (ProgData -> CppHdrCode ProgData
forall (r :: * -> *) a. Monad r => a -> r a
toCode ProgData
emptyProg)

instance (Pair p) => CommonRenderSym (p CppSrcCode CppHdrCode)
  (Doc, VisibilityTag) (Doc, Terminator) MethodData

instance (Pair p) => UnRepr (p CppSrcCode CppHdrCode) contents where
  unRepr :: p CppSrcCode CppHdrCode contents -> contents
unRepr p CppSrcCode CppHdrCode contents
c = CppSrcCode contents -> contents
forall a. CppSrcCode a -> a
unCPPSC (CppSrcCode contents -> contents)
-> CppSrcCode contents -> contents
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode contents -> CppSrcCode contents
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode contents
c

instance (Pair p) => FileSym (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData where
  fileDoc :: FS (p CppSrcCode CppHdrCode Module)
-> FS (p CppSrcCode CppHdrCode File)
fileDoc = (SrcState FileState Module -> FS (CppSrcCode File))
-> (HdrState FileState Module -> HdrState FileState File)
-> FS (p CppSrcCode CppHdrCode Module)
-> FS (p CppSrcCode CppHdrCode File)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState FileState Module -> FS (CppSrcCode File)
forall (r :: * -> *) vis smt md svr att.
FileSym r vis smt md svr att =>
FS (r Module) -> FS (r File)
fileDoc HdrState FileState Module -> HdrState FileState File
forall (r :: * -> *) vis smt md svr att.
FileSym r vis smt md svr att =>
FS (r Module) -> FS (r File)
fileDoc

  docMod :: ClassName
-> ClassName
-> [ClassName]
-> ClassName
-> FS (p CppSrcCode CppHdrCode File)
-> FS (p CppSrcCode CppHdrCode File)
docMod ClassName
d ClassName
wm [ClassName]
a ClassName
dt = (FS (CppSrcCode File) -> FS (CppSrcCode File))
-> (HdrState FileState File -> HdrState FileState File)
-> FS (p CppSrcCode CppHdrCode File)
-> FS (p CppSrcCode CppHdrCode File)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (ClassName
-> ClassName
-> [ClassName]
-> ClassName
-> FS (CppSrcCode File)
-> FS (CppSrcCode File)
forall (r :: * -> *) vis smt md svr att.
FileSym r vis smt md svr att =>
ClassName
-> ClassName
-> [ClassName]
-> ClassName
-> FS (r File)
-> FS (r File)
docMod ClassName
d ClassName
wm [ClassName]
a ClassName
dt) (ClassName
-> ClassName
-> [ClassName]
-> ClassName
-> HdrState FileState File
-> HdrState FileState File
forall (r :: * -> *) vis smt md svr att.
FileSym r vis smt md svr att =>
ClassName
-> ClassName
-> [ClassName]
-> ClassName
-> FS (r File)
-> FS (r File)
docMod ClassName
d ClassName
wm [ClassName]
a ClassName
dt)

instance (Pair p) => RenderFile (p CppSrcCode CppHdrCode) where
  top :: p CppSrcCode CppHdrCode Module -> p CppSrcCode CppHdrCode Doc
top p CppSrcCode CppHdrCode Module
m = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (CppSrcCode Module -> CppSrcCode Doc
forall (r :: * -> *). RenderFile r => r Module -> r Doc
top (CppSrcCode Module -> CppSrcCode Doc)
-> CppSrcCode Module -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Module -> CppSrcCode Module
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Module
m) (CppHdrCode Module -> CppHdrCode Doc
forall (r :: * -> *). RenderFile r => r Module -> r Doc
top (CppHdrCode Module -> CppHdrCode Doc)
-> CppHdrCode Module -> CppHdrCode Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Module -> CppHdrCode Module
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode Module
m)
  bottom :: p CppSrcCode CppHdrCode Doc
bottom = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode Doc
forall (r :: * -> *). RenderFile r => r Doc
bottom CppHdrCode Doc
forall (r :: * -> *). RenderFile r => r Doc
bottom

  commentedMod :: FS (p CppSrcCode CppHdrCode File)
-> FS (p CppSrcCode CppHdrCode Doc)
-> FS (p CppSrcCode CppHdrCode File)
commentedMod = (FS (CppSrcCode File)
 -> SrcState FileState Doc -> FS (CppSrcCode File))
-> (HdrState FileState File
    -> HdrState FileState Doc -> HdrState FileState File)
-> FS (p CppSrcCode CppHdrCode File)
-> FS (p CppSrcCode CppHdrCode Doc)
-> FS (p CppSrcCode CppHdrCode File)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 FS (CppSrcCode File)
-> SrcState FileState Doc -> FS (CppSrcCode File)
forall (r :: * -> *).
RenderFile r =>
FS (r File) -> FS (r Doc) -> FS (r File)
commentedMod HdrState FileState File
-> HdrState FileState Doc -> HdrState FileState File
forall (r :: * -> *).
RenderFile r =>
FS (r File) -> FS (r Doc) -> FS (r File)
commentedMod

  fileFromData :: ClassName
-> FS (p CppSrcCode CppHdrCode Module)
-> FS (p CppSrcCode CppHdrCode File)
fileFromData ClassName
fp = (SrcState FileState Module -> FS (CppSrcCode File))
-> (HdrState FileState Module -> HdrState FileState File)
-> FS (p CppSrcCode CppHdrCode Module)
-> FS (p CppSrcCode CppHdrCode File)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (ClassName -> SrcState FileState Module -> FS (CppSrcCode File)
forall (r :: * -> *).
RenderFile r =>
ClassName -> FS (r Module) -> FS (r File)
fileFromData ClassName
fp) (ClassName -> HdrState FileState Module -> HdrState FileState File
forall (r :: * -> *).
RenderFile r =>
ClassName -> FS (r Module) -> FS (r File)
fileFromData ClassName
fp)

instance (Pair p) => ImportSym (p CppSrcCode CppHdrCode) where
  langImport :: ClassName -> p CppSrcCode CppHdrCode Doc
langImport ClassName
n = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (ClassName -> CppSrcCode Doc
forall (r :: * -> *). ImportSym r => ClassName -> r Doc
langImport ClassName
n) (ClassName -> CppHdrCode Doc
forall (r :: * -> *). ImportSym r => ClassName -> r Doc
langImport ClassName
n)
  modImport :: ClassName -> p CppSrcCode CppHdrCode Doc
modImport ClassName
n = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (ClassName -> CppSrcCode Doc
forall (r :: * -> *). ImportSym r => ClassName -> r Doc
modImport ClassName
n) (ClassName -> CppHdrCode Doc
forall (r :: * -> *). ImportSym r => ClassName -> r Doc
modImport ClassName
n)

instance (Pair p) => AttachmentSym (p CppSrcCode CppHdrCode) AttachmentData where
  classLevel :: p CppSrcCode CppHdrCode AttachmentData
classLevel = CppSrcCode AttachmentData
-> CppHdrCode AttachmentData
-> p CppSrcCode CppHdrCode AttachmentData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
classLevel CppHdrCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
classLevel
  instanceLevel :: p CppSrcCode CppHdrCode AttachmentData
instanceLevel = CppSrcCode AttachmentData
-> CppHdrCode AttachmentData
-> p CppSrcCode CppHdrCode AttachmentData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
instanceLevel CppHdrCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
instanceLevel

instance (Pair p) => PermElim (p CppSrcCode CppHdrCode) AttachmentData where
  perm :: p CppSrcCode CppHdrCode AttachmentData -> Doc
perm p CppSrcCode CppHdrCode AttachmentData
p = CppSrcCode AttachmentData -> Doc
forall (r :: * -> *) att. PermElim r att => r att -> Doc
RC.perm (CppSrcCode AttachmentData -> Doc)
-> CppSrcCode AttachmentData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p
  binding :: p CppSrcCode CppHdrCode AttachmentData -> AttachmentTag
binding p CppSrcCode CppHdrCode AttachmentData
p = CppSrcCode AttachmentData -> AttachmentTag
forall (r :: * -> *) att. PermElim r att => r att -> AttachmentTag
binding (CppSrcCode AttachmentData -> AttachmentTag)
-> CppSrcCode AttachmentData -> AttachmentTag
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p

instance (Pair p) => BodySym (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  body :: [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
body = ([SrcState MethodState Doc] -> SrcState MethodState Doc)
-> ([HdrState MethodState Doc] -> HdrState MethodState Doc)
-> [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState MethodState Doc] -> SrcState MethodState Doc
forall (r :: * -> *) smt.
BodySym r smt =>
[MS (r Doc)] -> MS (r Doc)
body [HdrState MethodState Doc] -> HdrState MethodState Doc
forall (r :: * -> *) smt.
BodySym r smt =>
[MS (r Doc)] -> MS (r Doc)
body

  addComments :: ClassName
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
addComments ClassName
s = (SrcState MethodState Doc -> SrcState MethodState Doc)
-> (HdrState MethodState Doc -> HdrState MethodState Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (ClassName -> SrcState MethodState Doc -> SrcState MethodState Doc
forall (r :: * -> *) smt.
BodySym r smt =>
ClassName -> MS (r Doc) -> MS (r Doc)
addComments ClassName
s) (ClassName -> HdrState MethodState Doc -> HdrState MethodState Doc
forall (r :: * -> *) smt.
BodySym r smt =>
ClassName -> MS (r Doc) -> MS (r Doc)
addComments ClassName
s)

instance (Pair p) => RenderBody (p CppSrcCode CppHdrCode) where
  multiBody :: [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
multiBody = ([SrcState MethodState Doc] -> SrcState MethodState Doc)
-> ([HdrState MethodState Doc] -> HdrState MethodState Doc)
-> [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState MethodState Doc] -> SrcState MethodState Doc
forall (r :: * -> *). RenderBody r => [MS (r Doc)] -> MS (r Doc)
multiBody [HdrState MethodState Doc] -> HdrState MethodState Doc
forall (r :: * -> *). RenderBody r => [MS (r Doc)] -> MS (r Doc)
multiBody

instance (Pair p) => BodyElim (p CppSrcCode CppHdrCode) where
  body :: p CppSrcCode CppHdrCode Doc -> Doc
body p CppSrcCode CppHdrCode Doc
b = CppSrcCode Doc -> Doc
forall (r :: * -> *). BodyElim r => r Doc -> Doc
RC.body (CppSrcCode Doc -> Doc) -> CppSrcCode Doc -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
b

instance (Pair p) => BlockSym (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  block :: [MS (p CppSrcCode CppHdrCode (Doc, Terminator))]
-> MS (p CppSrcCode CppHdrCode Doc)
block = ([SrcState MethodState (Doc, Terminator)]
 -> SrcState MethodState Doc)
-> ([HdrState MethodState (Doc, Terminator)]
    -> HdrState MethodState Doc)
-> [MS (p CppSrcCode CppHdrCode (Doc, Terminator))]
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState MethodState (Doc, Terminator)]
-> SrcState MethodState Doc
forall (r :: * -> *) smt.
BlockSym r smt =>
[MS (r smt)] -> MS (r Doc)
block [HdrState MethodState (Doc, Terminator)]
-> HdrState MethodState Doc
forall (r :: * -> *) smt.
BlockSym r smt =>
[MS (r smt)] -> MS (r Doc)
block

instance (Pair p) => RenderBlock (p CppSrcCode CppHdrCode) where
  multiBlock :: [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
multiBlock = ([SrcState MethodState Doc] -> SrcState MethodState Doc)
-> ([HdrState MethodState Doc] -> HdrState MethodState Doc)
-> [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState MethodState Doc] -> SrcState MethodState Doc
forall (r :: * -> *). RenderBlock r => [MS (r Doc)] -> MS (r Doc)
multiBlock [HdrState MethodState Doc] -> HdrState MethodState Doc
forall (r :: * -> *). RenderBlock r => [MS (r Doc)] -> MS (r Doc)
multiBlock

instance (Pair p) => BlockElim (p CppSrcCode CppHdrCode) where
  block :: p CppSrcCode CppHdrCode Doc -> Doc
block p CppSrcCode CppHdrCode Doc
b = CppSrcCode Doc -> Doc
forall (r :: * -> *). BlockElim r => r Doc -> Doc
RC.block (CppSrcCode Doc -> Doc) -> CppSrcCode Doc -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
b

instance (Pair p) => TypeSym (p CppSrcCode CppHdrCode) where
  bool :: VS (p CppSrcCode CppHdrCode TypeData)
bool = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
bool State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
bool
  int :: VS (p CppSrcCode CppHdrCode TypeData)
int = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
int State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
int
  float :: VS (p CppSrcCode CppHdrCode TypeData)
float = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
float State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
float
  double :: VS (p CppSrcCode CppHdrCode TypeData)
double = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
double State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
double
  char :: VS (p CppSrcCode CppHdrCode TypeData)
char = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
char State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
char
  string :: VS (p CppSrcCode CppHdrCode TypeData)
string = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
string State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
string
  infile :: VS (p CppSrcCode CppHdrCode TypeData)
infile = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
infile State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
infile
  outfile :: VS (p CppSrcCode CppHdrCode TypeData)
outfile = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
outfile State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
outfile
  referenceType :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
referenceType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
referenceType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
referenceType
  listType :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
listType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
listType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
listType
  setType :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
setType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
setType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
setType
  arrayType :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
arrayType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
arrayType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
arrayType
  innerType :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
innerType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
innerType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
innerType
  funcType :: [VS (p CppSrcCode CppHdrCode TypeData)]
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
funcType = ([State ValueState (CppSrcCode TypeData)]
 -> State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> ([State ValueState (CppHdrCode TypeData)]
    -> State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> [VS (p CppSrcCode CppHdrCode TypeData)]
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> SrcState s b -> SrcState t c)
-> ([HdrState r a] -> HdrState s b -> HdrState t c)
-> [PairState t p a]
-> PairState t p b
-> PairState t p c
pair1List1Val [State ValueState (CppSrcCode TypeData)]
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
TypeSym r =>
[VS (r TypeData)] -> VS (r TypeData) -> VS (r TypeData)
funcType [State ValueState (CppHdrCode TypeData)]
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
TypeSym r =>
[VS (r TypeData)] -> VS (r TypeData) -> VS (r TypeData)
funcType
  void :: VS (p CppSrcCode CppHdrCode TypeData)
void = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void

instance (Pair p) => TypeElim (p CppSrcCode CppHdrCode) where
  getCodeType :: p CppSrcCode CppHdrCode TypeData -> CodeType
getCodeType p CppSrcCode CppHdrCode TypeData
tp = CppSrcCode TypeData -> CodeType
forall (r :: * -> *). TypeElim r => r TypeData -> CodeType
getCodeType (CppSrcCode TypeData -> CodeType)
-> CppSrcCode TypeData -> CodeType
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode TypeData -> CppSrcCode TypeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode TypeData
tp

instance (Pair p) => OOTypeSym (p CppSrcCode CppHdrCode) where
  obj :: ClassName -> VS (p CppSrcCode CppHdrCode TypeData)
obj ClassName
t = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (ClassName -> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). OOTypeSym r => ClassName -> VS (r TypeData)
obj ClassName
t) (ClassName -> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). OOTypeSym r => ClassName -> VS (r TypeData)
obj ClassName
t)

instance (Pair p) => RenderType (p CppSrcCode CppHdrCode) where
  multiType :: [VS (p CppSrcCode CppHdrCode TypeData)]
-> VS (p CppSrcCode CppHdrCode TypeData)
multiType = ([State ValueState (CppSrcCode TypeData)]
 -> State ValueState (CppSrcCode TypeData))
-> ([State ValueState (CppHdrCode TypeData)]
    -> State ValueState (CppHdrCode TypeData))
-> [VS (p CppSrcCode CppHdrCode TypeData)]
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [State ValueState (CppSrcCode TypeData)]
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
RenderType r =>
[VS (r TypeData)] -> VS (r TypeData)
multiType [State ValueState (CppHdrCode TypeData)]
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
RenderType r =>
[VS (r TypeData)] -> VS (r TypeData)
multiType

instance (Pair p) => UnaryOpSym (p CppSrcCode CppHdrCode) where
  notOp :: VSUnOp (p CppSrcCode CppHdrCode)
notOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
notOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
notOp
  negateOp :: VSUnOp (p CppSrcCode CppHdrCode)
negateOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
negateOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
negateOp
  sqrtOp :: VSUnOp (p CppSrcCode CppHdrCode)
sqrtOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sqrtOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sqrtOp
  absOp :: VSUnOp (p CppSrcCode CppHdrCode)
absOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
absOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
absOp
  logOp :: VSUnOp (p CppSrcCode CppHdrCode)
logOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
logOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
logOp
  lnOp :: VSUnOp (p CppSrcCode CppHdrCode)
lnOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
lnOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
lnOp
  expOp :: VSUnOp (p CppSrcCode CppHdrCode)
expOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
expOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
expOp
  sinOp :: VSUnOp (p CppSrcCode CppHdrCode)
sinOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sinOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sinOp
  cosOp :: VSUnOp (p CppSrcCode CppHdrCode)
cosOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
cosOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
cosOp
  tanOp :: VSUnOp (p CppSrcCode CppHdrCode)
tanOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
tanOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
tanOp
  asinOp :: VSUnOp (p CppSrcCode CppHdrCode)
asinOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
asinOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
asinOp
  acosOp :: VSUnOp (p CppSrcCode CppHdrCode)
acosOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
acosOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
acosOp
  atanOp :: VSUnOp (p CppSrcCode CppHdrCode)
atanOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
atanOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
atanOp
  floorOp :: VSUnOp (p CppSrcCode CppHdrCode)
floorOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
floorOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
floorOp
  ceilOp :: VSUnOp (p CppSrcCode CppHdrCode)
ceilOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
ceilOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
ceilOp

instance (Pair p) => BinaryOpSym (p CppSrcCode CppHdrCode) where
  equalOp :: VSBinOp (p CppSrcCode CppHdrCode)
equalOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
equalOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
equalOp
  notEqualOp :: VSBinOp (p CppSrcCode CppHdrCode)
notEqualOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
notEqualOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
notEqualOp
  greaterOp :: VSBinOp (p CppSrcCode CppHdrCode)
greaterOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterOp
  greaterEqualOp :: VSBinOp (p CppSrcCode CppHdrCode)
greaterEqualOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterEqualOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterEqualOp
  lessOp :: VSBinOp (p CppSrcCode CppHdrCode)
lessOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessOp
  lessEqualOp :: VSBinOp (p CppSrcCode CppHdrCode)
lessEqualOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessEqualOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessEqualOp
  plusOp :: VSBinOp (p CppSrcCode CppHdrCode)
plusOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
plusOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
plusOp
  minusOp :: VSBinOp (p CppSrcCode CppHdrCode)
minusOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
minusOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
minusOp
  multOp :: VSBinOp (p CppSrcCode CppHdrCode)
multOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
multOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
multOp
  divideOp :: VSBinOp (p CppSrcCode CppHdrCode)
divideOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
divideOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
divideOp
  powerOp :: VSBinOp (p CppSrcCode CppHdrCode)
powerOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
powerOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
powerOp
  moduloOp :: VSBinOp (p CppSrcCode CppHdrCode)
moduloOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
moduloOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
moduloOp
  andOp :: VSBinOp (p CppSrcCode CppHdrCode)
andOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
andOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
andOp
  orOp :: VSBinOp (p CppSrcCode CppHdrCode)
orOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
orOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
orOp

instance (Pair p) => OpElim (p CppSrcCode CppHdrCode) where
  uOp :: p CppSrcCode CppHdrCode OpData -> Doc
uOp p CppSrcCode CppHdrCode OpData
o = CppSrcCode OpData -> Doc
forall (r :: * -> *). OpElim r => r OpData -> Doc
RC.uOp (CppSrcCode OpData -> Doc) -> CppSrcCode OpData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode OpData -> CppSrcCode OpData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode OpData
o
  bOp :: p CppSrcCode CppHdrCode OpData -> Doc
bOp p CppSrcCode CppHdrCode OpData
o = CppSrcCode OpData -> Doc
forall (r :: * -> *). OpElim r => r OpData -> Doc
RC.bOp (CppSrcCode OpData -> Doc) -> CppSrcCode OpData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode OpData -> CppSrcCode OpData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode OpData
o
  uOpPrec :: p CppSrcCode CppHdrCode OpData -> Int
uOpPrec p CppSrcCode CppHdrCode OpData
o = CppSrcCode OpData -> Int
forall (r :: * -> *). OpElim r => r OpData -> Int
uOpPrec (CppSrcCode OpData -> Int) -> CppSrcCode OpData -> Int
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode OpData -> CppSrcCode OpData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode OpData
o
  bOpPrec :: p CppSrcCode CppHdrCode OpData -> Int
bOpPrec p CppSrcCode CppHdrCode OpData
o = CppSrcCode OpData -> Int
forall (r :: * -> *). OpElim r => r OpData -> Int
bOpPrec (CppSrcCode OpData -> Int) -> CppSrcCode OpData -> Int
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode OpData -> CppSrcCode OpData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode OpData
o

instance (Pair p) => ScopeSym (p CppSrcCode CppHdrCode) where
  global :: p CppSrcCode CppHdrCode ScopeData
global = CppSrcCode ScopeData
-> CppHdrCode ScopeData -> p CppSrcCode CppHdrCode ScopeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
global CppHdrCode ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
global
  mainFn :: p CppSrcCode CppHdrCode ScopeData
mainFn = CppSrcCode ScopeData
-> CppHdrCode ScopeData -> p CppSrcCode CppHdrCode ScopeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
mainFn CppHdrCode ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
mainFn
  local :: p CppSrcCode CppHdrCode ScopeData
local = CppSrcCode ScopeData
-> CppHdrCode ScopeData -> p CppSrcCode CppHdrCode ScopeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
local CppHdrCode ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
local

instance (Pair p) => ScopeElim (p CppSrcCode CppHdrCode) where
  scopeData :: p CppSrcCode CppHdrCode ScopeData -> ScopeData
scopeData = CppSrcCode ScopeData -> ScopeData
forall a. CppSrcCode a -> a
unCPPSC (CppSrcCode ScopeData -> ScopeData)
-> (p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData)
-> p CppSrcCode CppHdrCode ScopeData
-> ScopeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst

instance (Pair p) => VariableSym (p CppSrcCode CppHdrCode) where
  var :: ClassName
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
var ClassName
n       = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
VariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
var ClassName
n) (ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall (r :: * -> *).
VariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
var ClassName
n)
  constant :: ClassName
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
constant ClassName
n  = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
VariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
constant ClassName
n) (ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall (r :: * -> *).
VariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
constant ClassName
n)
  extVar :: ClassName
-> ClassName
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
extVar ClassName
l ClassName
n  = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (ClassName
-> ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
VariableSym r =>
ClassName -> ClassName -> VS (r TypeData) -> SVariable r
extVar ClassName
l ClassName
n) (ClassName
-> ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall (r :: * -> *).
VariableSym r =>
ClassName -> ClassName -> VS (r TypeData) -> SVariable r
extVar ClassName
l ClassName
n)

instance (Pair p) => OOVariableSym (p CppSrcCode CppHdrCode) where
  classVar :: ClassName
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
classVar ClassName
n = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
classVar ClassName
n) (ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
classVar ClassName
n)
  classConst :: ClassName
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
classConst ClassName
n = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
classConst ClassName
n) (ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
classConst ClassName
n)
  classVarAccess :: VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
classVarAccess = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
VS (r TypeData) -> SVariable r -> SVariable r
classVarAccess State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable -> HdrState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
VS (r TypeData) -> SVariable r -> SVariable r
classVarAccess
  extClassVarAccess :: VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
extClassVarAccess = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
VS (r TypeData) -> SVariable r -> SVariable r
extClassVarAccess State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable -> HdrState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
VS (r TypeData) -> SVariable r -> SVariable r
extClassVarAccess
  instanceVarAccess :: SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
instanceVarAccess = (SrcState ValueState Value
 -> SrcState ValueState Variable -> SrcState ValueState Variable)
-> (HdrState ValueState Value
    -> HdrState ValueState Variable -> HdrState ValueState Variable)
-> SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
SValue r -> SVariable r -> SVariable r
instanceVarAccess HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
SValue r -> SVariable r -> SVariable r
instanceVarAccess

instance (Pair p) => SelfSym (p CppSrcCode CppHdrCode) where
  self :: SVariable (p CppSrcCode CppHdrCode)
self = (CppSrcCode Variable
 -> CppHdrCode Variable -> p CppSrcCode CppHdrCode Variable)
-> SrcState ValueState Variable
-> HdrState ValueState Variable
-> SVariable (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Variable
-> CppHdrCode Variable -> p CppSrcCode CppHdrCode Variable
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState Variable
forall (r :: * -> *). SelfSym r => SVariable r
self HdrState ValueState Variable
forall (r :: * -> *). SelfSym r => SVariable r
self

instance (Pair p) => VariableElim (p CppSrcCode CppHdrCode) where
  variableName :: p CppSrcCode CppHdrCode Variable -> ClassName
variableName p CppSrcCode CppHdrCode Variable
v = CppSrcCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName (CppSrcCode Variable -> ClassName)
-> CppSrcCode Variable -> ClassName
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Variable -> CppSrcCode Variable
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Variable
v
  variableType :: p CppSrcCode CppHdrCode Variable
-> p CppSrcCode CppHdrCode TypeData
variableType p CppSrcCode CppHdrCode Variable
v = CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType (CppSrcCode Variable -> CppSrcCode TypeData)
-> CppSrcCode Variable -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Variable -> CppSrcCode Variable
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Variable
v) (CppHdrCode Variable -> CppHdrCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType (CppHdrCode Variable -> CppHdrCode TypeData)
-> CppHdrCode Variable -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Variable -> CppHdrCode Variable
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode Variable
v)

instance (Pair p) => InternalVarElim (p CppSrcCode CppHdrCode) where
  variableBind :: p CppSrcCode CppHdrCode Variable -> AttachmentTag
variableBind p CppSrcCode CppHdrCode Variable
v = CppSrcCode Variable -> AttachmentTag
forall (r :: * -> *).
InternalVarElim r =>
r Variable -> AttachmentTag
variableBind (CppSrcCode Variable -> AttachmentTag)
-> CppSrcCode Variable -> AttachmentTag
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Variable -> CppSrcCode Variable
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Variable
v
  variable :: p CppSrcCode CppHdrCode Variable -> Doc
variable p CppSrcCode CppHdrCode Variable
v = CppSrcCode Variable -> Doc
forall (r :: * -> *). InternalVarElim r => r Variable -> Doc
RC.variable (CppSrcCode Variable -> Doc) -> CppSrcCode Variable -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Variable -> CppSrcCode Variable
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Variable
v

instance (Pair p) => RenderVariable (p CppSrcCode CppHdrCode) where
  varFromData :: AttachmentTag
-> ClassName
-> VS (p CppSrcCode CppHdrCode TypeData)
-> Doc
-> SVariable (p CppSrcCode CppHdrCode)
varFromData AttachmentTag
b ClassName
n VS (p CppSrcCode CppHdrCode TypeData)
t' Doc
d = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (\State ValueState (CppSrcCode TypeData)
t ->AttachmentTag
-> ClassName
-> State ValueState (CppSrcCode TypeData)
-> Doc
-> SrcState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
AttachmentTag -> ClassName -> VS (r TypeData) -> Doc -> SVariable r
varFromData AttachmentTag
b ClassName
n State ValueState (CppSrcCode TypeData)
t Doc
d)
    (\State ValueState (CppHdrCode TypeData)
t -> AttachmentTag
-> ClassName
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
AttachmentTag -> ClassName -> VS (r TypeData) -> Doc -> SVariable r
varFromData AttachmentTag
b ClassName
n State ValueState (CppHdrCode TypeData)
t Doc
d) VS (p CppSrcCode CppHdrCode TypeData)
t'

instance (Pair p) => ValueSym (p CppSrcCode CppHdrCode) where
  valueType :: p CppSrcCode CppHdrCode Value -> p CppSrcCode CppHdrCode TypeData
valueType p CppSrcCode CppHdrCode Value
v = CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (CppSrcCode Value -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r Value -> r TypeData
valueType (CppSrcCode Value -> CppSrcCode TypeData)
-> CppSrcCode Value -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Value
v) (CppHdrCode Value -> CppHdrCode TypeData
forall (r :: * -> *). ValueSym r => r Value -> r TypeData
valueType (CppHdrCode Value -> CppHdrCode TypeData)
-> CppHdrCode Value -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Value -> CppHdrCode Value
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode Value
v)

instance (Pair p) => OOValueSym (p CppSrcCode CppHdrCode)

instance (Pair p) => Argument (p CppSrcCode CppHdrCode) where
  pointerArg :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
pointerArg = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). Argument r => SValue r -> SValue r
pointerArg HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). Argument r => SValue r -> SValue r
pointerArg

instance (Pair p) => Literal (p CppSrcCode CppHdrCode) where
  litTrue :: SValue (p CppSrcCode CppHdrCode)
litTrue = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState Value
forall (r :: * -> *). Literal r => SValue r
litTrue HdrState ValueState Value
forall (r :: * -> *). Literal r => SValue r
litTrue
  litFalse :: SValue (p CppSrcCode CppHdrCode)
litFalse = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState Value
forall (r :: * -> *). Literal r => SValue r
litFalse HdrState ValueState Value
forall (r :: * -> *). Literal r => SValue r
litFalse
  litChar :: Char -> SValue (p CppSrcCode CppHdrCode)
litChar Char
c = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Char -> SrcState ValueState Value
forall (r :: * -> *). Literal r => Char -> SValue r
litChar Char
c) (Char -> HdrState ValueState Value
forall (r :: * -> *). Literal r => Char -> SValue r
litChar Char
c)
  litDouble :: Double -> SValue (p CppSrcCode CppHdrCode)
litDouble Double
v = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Double -> SrcState ValueState Value
forall (r :: * -> *). Literal r => Double -> SValue r
litDouble Double
v) (Double -> HdrState ValueState Value
forall (r :: * -> *). Literal r => Double -> SValue r
litDouble Double
v)
  litFloat :: Float -> SValue (p CppSrcCode CppHdrCode)
litFloat Float
v = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Float -> SrcState ValueState Value
forall (r :: * -> *). Literal r => Float -> SValue r
litFloat Float
v) (Float -> HdrState ValueState Value
forall (r :: * -> *). Literal r => Float -> SValue r
litFloat Float
v)
  litInt :: Integer -> SValue (p CppSrcCode CppHdrCode)
litInt Integer
v =(CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues  CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Integer -> SrcState ValueState Value
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt Integer
v) (Integer -> HdrState ValueState Value
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt Integer
v)
  litString :: ClassName -> SValue (p CppSrcCode CppHdrCode)
litString ClassName
s = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (ClassName -> SrcState ValueState Value
forall (r :: * -> *). Literal r => ClassName -> SValue r
litString ClassName
s) (ClassName -> HdrState ValueState Value
forall (r :: * -> *). Literal r => ClassName -> SValue r
litString ClassName
s)
  litArray :: VS (p CppSrcCode CppHdrCode TypeData)
-> [SValue (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
litArray = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value] -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value] -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [SValue (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value] -> SrcState ValueState Value
forall (r :: * -> *).
Literal r =>
VS (r TypeData) -> [SValue r] -> SValue r
litArray State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
forall (r :: * -> *).
Literal r =>
VS (r TypeData) -> [SValue r] -> SValue r
litArray
  litSet :: VS (p CppSrcCode CppHdrCode TypeData)
-> [SValue (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
litSet = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value] -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value] -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [SValue (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value] -> SrcState ValueState Value
forall (r :: * -> *).
Literal r =>
VS (r TypeData) -> [SValue r] -> SValue r
litSet State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
forall (r :: * -> *).
Literal r =>
VS (r TypeData) -> [SValue r] -> SValue r
litSet
  litList :: VS (p CppSrcCode CppHdrCode TypeData)
-> [SValue (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
litList = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value] -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value] -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [SValue (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value] -> SrcState ValueState Value
forall (r :: * -> *).
Literal r =>
VS (r TypeData) -> [SValue r] -> SValue r
litList State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
forall (r :: * -> *).
Literal r =>
VS (r TypeData) -> [SValue r] -> SValue r
litList

instance (Pair p) => MathConstant (p CppSrcCode CppHdrCode) where
  pi :: SValue (p CppSrcCode CppHdrCode)
pi = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState Value
forall (r :: * -> *). MathConstant r => SValue r
pi HdrState ValueState Value
forall (r :: * -> *). MathConstant r => SValue r
pi

instance (Pair p) => VariableValue (p CppSrcCode CppHdrCode) where
  valueOf :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
valueOf = (SrcState ValueState Variable -> SrcState ValueState Value)
-> (HdrState ValueState Variable -> HdrState ValueState Value)
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf HdrState ValueState Variable -> HdrState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf

instance (Pair p) => OOVariableValue (p CppSrcCode CppHdrCode)

instance (Pair p) => CommandLineArgs (p CppSrcCode CppHdrCode) where
  arg :: Integer -> SValue (p CppSrcCode CppHdrCode)
arg Integer
n = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Integer -> SrcState ValueState Value
forall (r :: * -> *). CommandLineArgs r => Integer -> SValue r
arg Integer
n) (Integer -> HdrState ValueState Value
forall (r :: * -> *). CommandLineArgs r => Integer -> SValue r
arg Integer
n)
  argsList :: SValue (p CppSrcCode CppHdrCode)
argsList = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState Value
forall (r :: * -> *). CommandLineArgs r => SValue r
argsList HdrState ValueState Value
forall (r :: * -> *). CommandLineArgs r => SValue r
argsList
  argExists :: Integer -> SValue (p CppSrcCode CppHdrCode)
argExists Integer
i = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Integer -> SrcState ValueState Value
forall (r :: * -> *). CommandLineArgs r => Integer -> SValue r
argExists Integer
i) (Integer -> HdrState ValueState Value
forall (r :: * -> *). CommandLineArgs r => Integer -> SValue r
argExists Integer
i)

instance (Pair p) => NumericExpression (p CppSrcCode CppHdrCode) where
  #~ :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#~) = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#~) HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#~)
  #/^ :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#/^) = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#/^) HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#/^)
  #| :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#|) = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#|) HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#|)
  #+ :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#+) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#+) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#+)
  #- :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#-) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#-) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#-)
  #* :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#*) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#*) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#*)
  #/ :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#/) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#/) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#/)
  #% :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#%) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#%) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#%)
  #^ :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#^) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#^) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#^)

  log :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
log = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
log HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
log
  ln :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
ln = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
ln HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
ln
  exp :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
exp = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
exp HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
exp
  sin :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
sin = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
sin HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
sin
  cos :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
cos = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
cos HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
cos
  tan :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
tan = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
tan HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
tan
  csc :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
csc = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
csc HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
csc
  sec :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
sec = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
sec HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
sec
  cot :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
cot = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
cot HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
cot
  arcsin :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
arcsin = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arcsin HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arcsin
  arccos :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
arccos = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arccos HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arccos
  arctan :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
arctan = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arctan HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arctan
  floor :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
floor = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
floor HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
floor
  ceil :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
ceil = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
ceil HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
ceil

instance (Pair p) => BooleanExpression (p CppSrcCode CppHdrCode) where
  ?! :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?!) = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). BooleanExpression r => SValue r -> SValue r
(?!) HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). BooleanExpression r => SValue r -> SValue r
(?!)
  ?&& :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?&&) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
BooleanExpression r =>
SValue r -> SValue r -> SValue r
(?&&) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
BooleanExpression r =>
SValue r -> SValue r -> SValue r
(?&&)
  ?|| :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?||) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
BooleanExpression r =>
SValue r -> SValue r -> SValue r
(?||) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
BooleanExpression r =>
SValue r -> SValue r -> SValue r
(?||)

instance (Pair p) => Comparison (p CppSrcCode CppHdrCode) where
  ?< :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?<) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?<) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?<)
  ?<= :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?<=) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?<=) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?<=)
  ?> :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?>) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?>) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?>)
  ?>= :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?>=) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?>=) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?>=)
  ?== :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?==) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?==) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?==)
  ?!= :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?!=) = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?!=) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?!=)

instance (Pair p) => ValueExpression (p CppSrcCode CppHdrCode) where
  inlineIf :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
inlineIf = (SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
ValueExpression r =>
SValue r -> SValue r -> SValue r -> SValue r
inlineIf HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
forall (r :: * -> *).
ValueExpression r =>
SValue r -> SValue r -> SValue r -> SValue r
inlineIf

  funcAppMixedArgs :: MixedCall (p CppSrcCode CppHdrCode)
funcAppMixedArgs ClassName
n = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value]
 -> [(SrcState ValueState Variable, SrcState ValueState Value)]
 -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> PairState ValueState p TypeData
-> [SValue (p CppSrcCode CppHdrCode)]
-> [(PairState ValueState p Variable,
     SValue (p CppSrcCode CppHdrCode))]
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists (MixedCall CppSrcCode
forall (r :: * -> *). ValueExpression r => MixedCall r
funcAppMixedArgs ClassName
n) (MixedCall CppHdrCode
forall (r :: * -> *). ValueExpression r => MixedCall r
funcAppMixedArgs ClassName
n)
  extFuncAppMixedArgs :: ClassName -> MixedCall (p CppSrcCode CppHdrCode)
extFuncAppMixedArgs ClassName
l ClassName
n = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value]
 -> [(SrcState ValueState Variable, SrcState ValueState Value)]
 -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> PairState ValueState p TypeData
-> [SValue (p CppSrcCode CppHdrCode)]
-> [(PairState ValueState p Variable,
     SValue (p CppSrcCode CppHdrCode))]
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists
    (ClassName -> MixedCall CppSrcCode
forall (r :: * -> *). ValueExpression r => ClassName -> MixedCall r
extFuncAppMixedArgs ClassName
l ClassName
n)
    (ClassName -> MixedCall CppHdrCode
forall (r :: * -> *). ValueExpression r => ClassName -> MixedCall r
extFuncAppMixedArgs ClassName
l ClassName
n)
  libFuncAppMixedArgs :: ClassName -> MixedCall (p CppSrcCode CppHdrCode)
libFuncAppMixedArgs ClassName
l ClassName
n = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value]
 -> [(SrcState ValueState Variable, SrcState ValueState Value)]
 -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> PairState ValueState p TypeData
-> [SValue (p CppSrcCode CppHdrCode)]
-> [(PairState ValueState p Variable,
     SValue (p CppSrcCode CppHdrCode))]
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists
    (ClassName -> MixedCall CppSrcCode
forall (r :: * -> *). ValueExpression r => ClassName -> MixedCall r
extFuncAppMixedArgs ClassName
l ClassName
n)
    (ClassName -> MixedCall CppHdrCode
forall (r :: * -> *). ValueExpression r => ClassName -> MixedCall r
extFuncAppMixedArgs ClassName
l ClassName
n)

  lambda :: [VSBinder (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
lambda = ([SrcState ValueState BinderD]
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> ([HdrState ValueState BinderD]
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> [VSBinder (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> SrcState s b -> SrcState t c)
-> ([HdrState r a] -> HdrState s b -> HdrState t c)
-> [PairState t p a]
-> PairState t p b
-> PairState t p c
pair1List1Val [SrcState ValueState BinderD]
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
ValueExpression r =>
[VSBinder r] -> SValue r -> SValue r
lambda [HdrState ValueState BinderD]
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
ValueExpression r =>
[VSBinder r] -> SValue r -> SValue r
lambda

  notNull :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
notNull = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). ValueExpression r => SValue r -> SValue r
notNull HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). ValueExpression r => SValue r -> SValue r
notNull

instance (Pair p) => OOValueExpression (p CppSrcCode CppHdrCode) where
  newObjMixedArgs :: MixedCtorCall (p CppSrcCode CppHdrCode)
newObjMixedArgs = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value]
 -> [(SrcState ValueState Variable, SrcState ValueState Value)]
 -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> MixedCtorCall (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState ValueState Value
forall (r :: * -> *). OOValueExpression r => MixedCtorCall r
newObjMixedArgs State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState ValueState Value
forall (r :: * -> *). OOValueExpression r => MixedCtorCall r
newObjMixedArgs
  extNewObjMixedArgs :: ClassName -> MixedCtorCall (p CppSrcCode CppHdrCode)
extNewObjMixedArgs ClassName
l = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value]
 -> [(SrcState ValueState Variable, SrcState ValueState Value)]
 -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> MixedCtorCall (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists
    (MixedCall CppSrcCode
forall (r :: * -> *).
OOValueExpression r =>
ClassName -> MixedCtorCall r
extNewObjMixedArgs ClassName
l)
    (MixedCall CppHdrCode
forall (r :: * -> *).
OOValueExpression r =>
ClassName -> MixedCtorCall r
extNewObjMixedArgs ClassName
l)
  libNewObjMixedArgs :: ClassName -> MixedCtorCall (p CppSrcCode CppHdrCode)
libNewObjMixedArgs ClassName
l = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value]
 -> [(SrcState ValueState Variable, SrcState ValueState Value)]
 -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> MixedCtorCall (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists
    (MixedCall CppSrcCode
forall (r :: * -> *).
OOValueExpression r =>
ClassName -> MixedCtorCall r
extNewObjMixedArgs ClassName
l)
    (MixedCall CppHdrCode
forall (r :: * -> *).
OOValueExpression r =>
ClassName -> MixedCtorCall r
extNewObjMixedArgs ClassName
l)

instance (Pair p) => RenderValue (p CppSrcCode CppHdrCode) where
  inputFunc :: SValue (p CppSrcCode CppHdrCode)
inputFunc = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r
inputFunc HdrState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r
inputFunc
  printFunc :: SValue (p CppSrcCode CppHdrCode)
printFunc = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r
printFunc HdrState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r
printFunc
  printLnFunc :: SValue (p CppSrcCode CppHdrCode)
printLnFunc = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> SrcState ValueState Value
-> HdrState ValueState Value
-> SValue (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r
printLnFunc HdrState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r
printLnFunc
  printFileFunc :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
printFileFunc = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileFunc HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileFunc
  printFileLnFunc :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
printFileLnFunc = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileLnFunc HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileLnFunc

  cast :: VS (p CppSrcCode CppHdrCode TypeData)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
cast = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> SValue r -> SValue r
cast State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> SValue r -> SValue r
cast

  call :: Maybe ClassName -> Maybe Doc -> MixedCall (p CppSrcCode CppHdrCode)
call Maybe ClassName
l Maybe Doc
o ClassName
n = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value]
 -> [(SrcState ValueState Variable, SrcState ValueState Value)]
 -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [SValue (p CppSrcCode CppHdrCode)]
-> [(PairState ValueState p Variable,
     SValue (p CppSrcCode CppHdrCode))]
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists (Maybe ClassName -> Maybe Doc -> MixedCall CppSrcCode
forall (r :: * -> *).
RenderValue r =>
Maybe ClassName -> Maybe Doc -> MixedCall r
call Maybe ClassName
l Maybe Doc
o ClassName
n) (Maybe ClassName -> Maybe Doc -> MixedCall CppHdrCode
forall (r :: * -> *).
RenderValue r =>
Maybe ClassName -> Maybe Doc -> MixedCall r
call Maybe ClassName
l Maybe Doc
o ClassName
n)

  valFromData :: Maybe Int
-> Maybe Integer
-> VS (p CppSrcCode CppHdrCode TypeData)
-> Doc
-> SValue (p CppSrcCode CppHdrCode)
valFromData Maybe Int
p Maybe Integer
i VS (p CppSrcCode CppHdrCode TypeData)
t' Doc
d = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (\State ValueState (CppSrcCode TypeData)
t -> Maybe Int
-> Maybe Integer
-> State ValueState (CppSrcCode TypeData)
-> Doc
-> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
Maybe Int -> Maybe Integer -> VS (r TypeData) -> Doc -> SValue r
valFromData Maybe Int
p Maybe Integer
i State ValueState (CppSrcCode TypeData)
t Doc
d)
    (\State ValueState (CppHdrCode TypeData)
t -> Maybe Int
-> Maybe Integer
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
Maybe Int -> Maybe Integer -> VS (r TypeData) -> Doc -> SValue r
valFromData Maybe Int
p Maybe Integer
i State ValueState (CppHdrCode TypeData)
t Doc
d) VS (p CppSrcCode CppHdrCode TypeData)
t'

instance (Pair p) => ValueElim (p CppSrcCode CppHdrCode) where
  valuePrec :: p CppSrcCode CppHdrCode Value -> Maybe Int
valuePrec p CppSrcCode CppHdrCode Value
v = CppSrcCode Value -> Maybe Int
forall (r :: * -> *). ValueElim r => r Value -> Maybe Int
valuePrec (CppSrcCode Value -> Maybe Int) -> CppSrcCode Value -> Maybe Int
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Value
v
  valueInt :: p CppSrcCode CppHdrCode Value -> Maybe Integer
valueInt p CppSrcCode CppHdrCode Value
v = CppSrcCode Value -> Maybe Integer
forall (r :: * -> *). ValueElim r => r Value -> Maybe Integer
valueInt (CppSrcCode Value -> Maybe Integer)
-> CppSrcCode Value -> Maybe Integer
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Value
v
  value :: p CppSrcCode CppHdrCode Value -> Doc
value p CppSrcCode CppHdrCode Value
v = CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value (CppSrcCode Value -> Doc) -> CppSrcCode Value -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Value
v

instance (Pair p) => InternalValueExp (p CppSrcCode CppHdrCode) where
  objMethodCallMixedArgs' :: ClassName
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SValue (p CppSrcCode CppHdrCode)
-> [SValue (p CppSrcCode CppHdrCode)]
-> NamedArgs (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
objMethodCallMixedArgs' ClassName
f = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Value
 -> [SrcState ValueState Value]
 -> [(SrcState ValueState Variable, SrcState ValueState Value)]
 -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Value
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SValue (p CppSrcCode CppHdrCode)
-> [SValue (p CppSrcCode CppHdrCode)]
-> NamedArgs (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e w
       f.
Pair p =>
(SrcState r a
 -> SrcState s b
 -> [SrcState t c]
 -> [(SrcState u d, SrcState v e)]
 -> SrcState w f)
-> (HdrState r a
    -> HdrState s b
    -> [HdrState t c]
    -> [(HdrState u d, HdrState v e)]
    -> HdrState w f)
-> PairState w p a
-> PairState w p b
-> [PairState w p c]
-> [(PairState w p d, PairState w p e)]
-> PairState w p f
pair2Vals3Lists
    (ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> [SrcState ValueState Value]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState ValueState Value
forall (r :: * -> *).
InternalValueExp r =>
ClassName
-> VS (r TypeData)
-> SValue r
-> [SValue r]
-> NamedArgs r
-> SValue r
objMethodCallMixedArgs' ClassName
f)
    (ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Value
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState ValueState Value
forall (r :: * -> *).
InternalValueExp r =>
ClassName
-> VS (r TypeData)
-> SValue r
-> [SValue r]
-> NamedArgs r
-> SValue r
objMethodCallMixedArgs' ClassName
f)
  classMethodCallMixedArgs' :: ClassName
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [SValue (p CppSrcCode CppHdrCode)]
-> NamedArgs (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
classMethodCallMixedArgs' ClassName
f = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value]
 -> [(SrcState ValueState Variable, SrcState ValueState Value)]
 -> SrcState ValueState Value)
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [SValue (p CppSrcCode CppHdrCode)]
-> NamedArgs (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e w
       f.
Pair p =>
(SrcState r a
 -> SrcState s b
 -> [SrcState t c]
 -> [(SrcState u d, SrcState v e)]
 -> SrcState w f)
-> (HdrState r a
    -> HdrState s b
    -> [HdrState t c]
    -> [(HdrState u d, HdrState v e)]
    -> HdrState w f)
-> PairState w p a
-> PairState w p b
-> [PairState w p c]
-> [(PairState w p d, PairState w p e)]
-> PairState w p f
pair2Vals3Lists
    (ClassName
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState ValueState Value
forall (r :: * -> *).
InternalValueExp r =>
ClassName
-> VS (r TypeData)
-> VS (r TypeData)
-> [SValue r]
-> NamedArgs r
-> SValue r
classMethodCallMixedArgs' ClassName
f)
    (ClassName
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState ValueState Value
forall (r :: * -> *).
InternalValueExp r =>
ClassName
-> VS (r TypeData)
-> VS (r TypeData)
-> [SValue r]
-> NamedArgs r
-> SValue r
classMethodCallMixedArgs' ClassName
f)

instance (Pair p) => FunctionSym (p CppSrcCode CppHdrCode) where

instance (Pair p) => OOFunctionSym (p CppSrcCode CppHdrCode) where
  func :: ClassName
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [SValue (p CppSrcCode CppHdrCode)]
-> VS (p CppSrcCode CppHdrCode FuncData)
func ClassName
l = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value] -> SrcState ValueState FuncData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value] -> HdrState ValueState FuncData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [SValue (p CppSrcCode CppHdrCode)]
-> VS (p CppSrcCode CppHdrCode FuncData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List (ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState FuncData
forall (r :: * -> *).
OOFunctionSym r =>
ClassName -> VS (r TypeData) -> [SValue r] -> VS (r FuncData)
func ClassName
l) (ClassName
-> State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> HdrState ValueState FuncData
forall (r :: * -> *).
OOFunctionSym r =>
ClassName -> VS (r TypeData) -> [SValue r] -> VS (r FuncData)
func ClassName
l)
  objAccess :: SValue (p CppSrcCode CppHdrCode)
-> VS (p CppSrcCode CppHdrCode FuncData)
-> SValue (p CppSrcCode CppHdrCode)
objAccess = (SrcState ValueState Value
 -> SrcState ValueState FuncData -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState FuncData -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> VS (p CppSrcCode CppHdrCode FuncData)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState FuncData -> SrcState ValueState Value
forall (r :: * -> *).
OOFunctionSym r =>
SValue r -> VS (r FuncData) -> SValue r
objAccess HdrState ValueState Value
-> HdrState ValueState FuncData -> HdrState ValueState Value
forall (r :: * -> *).
OOFunctionSym r =>
SValue r -> VS (r FuncData) -> SValue r
objAccess

instance (Pair p) => GetSet (p CppSrcCode CppHdrCode) where
  get :: SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
get = (SrcState ValueState Value
 -> SrcState ValueState Variable -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Variable -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *).
GetSet r =>
SValue r -> SVariable r -> SValue r
get HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState ValueState Value
forall (r :: * -> *).
GetSet r =>
SValue r -> SVariable r -> SValue r
get
  set :: SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
set = (SrcState ValueState Value
 -> SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 SrcState ValueState Value
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
GetSet r =>
SValue r -> SVariable r -> SValue r -> SValue r
set HdrState ValueState Value
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ValueState Value
forall (r :: * -> *).
GetSet r =>
SValue r -> SVariable r -> SValue r -> SValue r
set

instance (Pair p) => IndexTranslator (p CppSrcCode CppHdrCode) where
  intToIndex :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
intToIndex = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). IndexTranslator r => SValue r -> SValue r
intToIndex HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). IndexTranslator r => SValue r -> SValue r
intToIndex
  indexToInt :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
indexToInt = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). IndexTranslator r => SValue r -> SValue r
indexToInt HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). IndexTranslator r => SValue r -> SValue r
indexToInt

instance (Pair p) => Reference (p CppSrcCode CppHdrCode) where
  makeRef :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
makeRef = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). Reference r => SValue r -> SValue r
makeRef HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). Reference r => SValue r -> SValue r
makeRef
  maybeDeref :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
maybeDeref = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). Reference r => SValue r -> SValue r
maybeDeref HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). Reference r => SValue r -> SValue r
maybeDeref

instance (Pair p) => Array (p CppSrcCode CppHdrCode) where
  arrayElem :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
arrayElem = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Variable)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Variable)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Variable
forall (r :: * -> *).
Array r =>
SValue r -> SValue r -> SVariable r
arrayElem HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Variable
forall (r :: * -> *).
Array r =>
SValue r -> SValue r -> SVariable r
arrayElem
  arrayLength :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
arrayLength = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). Array r => SValue r -> SValue r
arrayLength HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). Array r => SValue r -> SValue r
arrayLength
  arrayCopy :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
arrayCopy = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). Array r => SValue r -> SValue r
arrayCopy HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). Array r => SValue r -> SValue r
arrayCopy

instance (Pair p) => List (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  listSize :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
listSize = (SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *) smt. List r smt => SValue r -> SValue r
listSize HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *) smt. List r smt => SValue r -> SValue r
listSize
  listAdd :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
listAdd SValue (p CppSrcCode CppHdrCode)
l SValue (p CppSrcCode CppHdrCode)
i SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r -> MS (r smt)
listAdd HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r -> MS (r smt)
listAdd (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
l) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
i) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v)
  listAppend :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
listAppend SValue (p CppSrcCode CppHdrCode)
l SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> MS (r smt)
listAppend HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> MS (r smt)
listAppend (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
l) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v)
  listAccess :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
listAccess = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r
listAccess HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r
listAccess
  listSet :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
listSet SValue (p CppSrcCode CppHdrCode)
l SValue (p CppSrcCode CppHdrCode)
i SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r -> MS (r smt)
listSet HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r -> MS (r smt)
listSet (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
l) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
i) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v)
  indexOf :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
indexOf = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r
indexOf HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r
indexOf

instance (Pair p) => Set (p CppSrcCode CppHdrCode) where
  contains :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
contains = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). Set r => SValue r -> SValue r -> SValue r
contains HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). Set r => SValue r -> SValue r -> SValue r
contains
  setAdd :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
setAdd = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). Set r => SValue r -> SValue r -> SValue r
setAdd HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). Set r => SValue r -> SValue r -> SValue r
setAdd
  setRemove :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
setRemove = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). Set r => SValue r -> SValue r -> SValue r
setRemove HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). Set r => SValue r -> SValue r -> SValue r
setRemove
  setUnion :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
setUnion = (SrcState ValueState Value
 -> SrcState ValueState Value -> SrcState ValueState Value)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). Set r => SValue r -> SValue r -> SValue r
setUnion HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *). Set r => SValue r -> SValue r -> SValue r
setUnion

instance (Pair p) => InternalList (p CppSrcCode CppHdrCode) where
  listSlice' :: Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode Doc)
listSlice' Maybe (SValue (p CppSrcCode CppHdrCode))
b Maybe (SValue (p CppSrcCode CppHdrCode))
e Maybe (SValue (p CppSrcCode CppHdrCode))
s SVariable (p CppSrcCode CppHdrCode)
vr SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState Variable
 -> SrcState ValueState Value -> SrcState MethodState Doc)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Doc)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2
    (Maybe (SrcState ValueState Value)
-> Maybe (SrcState ValueState Value)
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState Doc
forall (r :: * -> *).
InternalList r =>
Maybe (SValue r)
-> Maybe (SValue r)
-> Maybe (SValue r)
-> SVariable r
-> SValue r
-> MS (r Doc)
listSlice' ((SValue (p CppSrcCode CppHdrCode) -> SrcState ValueState Value)
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (SrcState ValueState Value)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode Value -> CppSrcCode Value)
-> SValue (p CppSrcCode CppHdrCode) -> SrcState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) Maybe (SValue (p CppSrcCode CppHdrCode))
b) ((SValue (p CppSrcCode CppHdrCode) -> SrcState ValueState Value)
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (SrcState ValueState Value)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode Value -> CppSrcCode Value)
-> SValue (p CppSrcCode CppHdrCode) -> SrcState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) Maybe (SValue (p CppSrcCode CppHdrCode))
e)
      ((SValue (p CppSrcCode CppHdrCode) -> SrcState ValueState Value)
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (SrcState ValueState Value)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode Value -> CppSrcCode Value)
-> SValue (p CppSrcCode CppHdrCode) -> SrcState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) Maybe (SValue (p CppSrcCode CppHdrCode))
s))
    (Maybe (HdrState ValueState Value)
-> Maybe (HdrState ValueState Value)
-> Maybe (HdrState ValueState Value)
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState Doc
forall (r :: * -> *).
InternalList r =>
Maybe (SValue r)
-> Maybe (SValue r)
-> Maybe (SValue r)
-> SVariable r
-> SValue r
-> MS (r Doc)
listSlice' ((SValue (p CppSrcCode CppHdrCode) -> HdrState ValueState Value)
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (HdrState ValueState Value)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode Value -> CppHdrCode Value)
-> SValue (p CppSrcCode CppHdrCode) -> HdrState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppHdrCode Value
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) Maybe (SValue (p CppSrcCode CppHdrCode))
b) ((SValue (p CppSrcCode CppHdrCode) -> HdrState ValueState Value)
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (HdrState ValueState Value)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode Value -> CppHdrCode Value)
-> SValue (p CppSrcCode CppHdrCode) -> HdrState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppHdrCode Value
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) Maybe (SValue (p CppSrcCode CppHdrCode))
e)
      ((SValue (p CppSrcCode CppHdrCode) -> HdrState ValueState Value)
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (HdrState ValueState Value)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode Value -> CppHdrCode Value)
-> SValue (p CppSrcCode CppHdrCode) -> HdrState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppHdrCode Value
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) Maybe (SValue (p CppSrcCode CppHdrCode))
s))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
vl)

instance (Pair p) => InternalGetSet (p CppSrcCode CppHdrCode) where
  getFunc :: SVariable (p CppSrcCode CppHdrCode)
-> VS (p CppSrcCode CppHdrCode FuncData)
getFunc = (SrcState ValueState Variable -> SrcState ValueState FuncData)
-> (HdrState ValueState Variable -> HdrState ValueState FuncData)
-> SVariable (p CppSrcCode CppHdrCode)
-> VS (p CppSrcCode CppHdrCode FuncData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState ValueState FuncData
forall (r :: * -> *).
InternalGetSet r =>
SVariable r -> VS (r FuncData)
getFunc HdrState ValueState Variable -> HdrState ValueState FuncData
forall (r :: * -> *).
InternalGetSet r =>
SVariable r -> VS (r FuncData)
getFunc
  setFunc :: VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> VS (p CppSrcCode CppHdrCode FuncData)
setFunc = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState ValueState FuncData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState ValueState FuncData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> VS (p CppSrcCode CppHdrCode FuncData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ValueState FuncData
forall (r :: * -> *).
InternalGetSet r =>
VS (r TypeData) -> SVariable r -> SValue r -> VS (r FuncData)
setFunc State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ValueState FuncData
forall (r :: * -> *).
InternalGetSet r =>
VS (r TypeData) -> SVariable r -> SValue r -> VS (r FuncData)
setFunc

instance (Pair p) => InternalListFunc (p CppSrcCode CppHdrCode) where
  listAccessFunc :: VS (p CppSrcCode CppHdrCode TypeData)
-> SValue (p CppSrcCode CppHdrCode)
-> VS (p CppSrcCode CppHdrCode FuncData)
listAccessFunc = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Value -> SrcState ValueState FuncData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Value -> HdrState ValueState FuncData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> SValue (p CppSrcCode CppHdrCode)
-> VS (p CppSrcCode CppHdrCode FuncData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value -> SrcState ValueState FuncData
forall (r :: * -> *).
InternalListFunc r =>
VS (r TypeData) -> SValue r -> VS (r FuncData)
listAccessFunc State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Value -> HdrState ValueState FuncData
forall (r :: * -> *).
InternalListFunc r =>
VS (r TypeData) -> SValue r -> VS (r FuncData)
listAccessFunc

instance Pair p => BinderSym (p CppSrcCode CppHdrCode) where
  binder :: ClassName
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VSBinder (p CppSrcCode CppHdrCode)
binder ClassName
nm = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState BinderD)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState BinderD)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VSBinder (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState BinderD
forall (r :: * -> *).
BinderSym r =>
ClassName -> VS (r TypeData) -> VSBinder r
binder ClassName
nm) (ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState BinderD
forall (r :: * -> *).
BinderSym r =>
ClassName -> VS (r TypeData) -> VSBinder r
binder ClassName
nm)

instance (Pair p) => BinderElim (p CppSrcCode CppHdrCode) where
  binderName :: p CppSrcCode CppHdrCode BinderD -> ClassName
binderName p CppSrcCode CppHdrCode BinderD
b = BinderD -> ClassName
bindName (BinderD -> ClassName) -> BinderD -> ClassName
forall a b. (a -> b) -> a -> b
$ CppSrcCode BinderD -> BinderD
forall a. CppSrcCode a -> a
unCPPSC (CppSrcCode BinderD -> BinderD) -> CppSrcCode BinderD -> BinderD
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode BinderD -> CppSrcCode BinderD
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode BinderD
b
  binderType :: p CppSrcCode CppHdrCode BinderD -> p CppSrcCode CppHdrCode TypeData
binderType p CppSrcCode CppHdrCode BinderD
b = CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (CppSrcCode BinderD -> CppSrcCode TypeData
forall (r :: * -> *). BinderElim r => r BinderD -> r TypeData
binderType (CppSrcCode BinderD -> CppSrcCode TypeData)
-> CppSrcCode BinderD -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode BinderD -> CppSrcCode BinderD
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode BinderD
b) (CppHdrCode BinderD -> CppHdrCode TypeData
forall (r :: * -> *). BinderElim r => r BinderD -> r TypeData
binderType (CppHdrCode BinderD -> CppHdrCode TypeData)
-> CppHdrCode BinderD -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode BinderD -> CppHdrCode BinderD
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode BinderD
b)

instance (Pair p) => InternalBinderElim (p CppSrcCode CppHdrCode) where
  binderElim :: p CppSrcCode CppHdrCode BinderD -> Doc
binderElim p CppSrcCode CppHdrCode BinderD
b = CppSrcCode BinderD -> Doc
forall (r :: * -> *). InternalBinderElim r => r BinderD -> Doc
binderElim (CppSrcCode BinderD -> Doc) -> CppSrcCode BinderD -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode BinderD -> CppSrcCode BinderD
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode BinderD
b

instance (Pair p) => RenderFunction (p CppSrcCode CppHdrCode) where
  funcFromData :: Doc
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode FuncData)
funcFromData Doc
d = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState FuncData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState FuncData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode FuncData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (Doc
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
forall (r :: * -> *).
RenderFunction r =>
Doc -> VS (r TypeData) -> VS (r FuncData)
funcFromData Doc
d) (Doc
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
forall (r :: * -> *).
RenderFunction r =>
Doc -> VS (r TypeData) -> VS (r FuncData)
funcFromData Doc
d)

instance (Pair p) => FunctionElim (p CppSrcCode CppHdrCode) where
  functionType :: p CppSrcCode CppHdrCode FuncData
-> p CppSrcCode CppHdrCode TypeData
functionType p CppSrcCode CppHdrCode FuncData
f = CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (CppSrcCode FuncData -> CppSrcCode TypeData
forall (r :: * -> *). FunctionElim r => r FuncData -> r TypeData
functionType (CppSrcCode FuncData -> CppSrcCode TypeData)
-> CppSrcCode FuncData -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode FuncData -> CppSrcCode FuncData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode FuncData
f) (CppHdrCode FuncData -> CppHdrCode TypeData
forall (r :: * -> *). FunctionElim r => r FuncData -> r TypeData
functionType (CppHdrCode FuncData -> CppHdrCode TypeData)
-> CppHdrCode FuncData -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode FuncData -> CppHdrCode FuncData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode FuncData
f)
  function :: p CppSrcCode CppHdrCode FuncData -> Doc
function p CppSrcCode CppHdrCode FuncData
f = CppSrcCode FuncData -> Doc
forall (r :: * -> *). FunctionElim r => r FuncData -> Doc
RC.function (CppSrcCode FuncData -> Doc) -> CppSrcCode FuncData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode FuncData -> CppSrcCode FuncData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode FuncData
f

instance (Pair p) => InternalAssignStmt (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  multiAssign :: [SVariable (p CppSrcCode CppHdrCode)]
-> [SValue (p CppSrcCode CppHdrCode)]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
multiAssign [SVariable (p CppSrcCode CppHdrCode)]
vrs [SValue (p CppSrcCode CppHdrCode)]
vls = ([SrcState ValueState Variable]
 -> [SrcState ValueState Value]
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState Variable]
    -> [HdrState ValueState Value]
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p Variable]
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c)
-> ([HdrState r a] -> [HdrState s b] -> HdrState t c)
-> [PairState t p a]
-> [PairState t p b]
-> PairState t p c
pair2Lists [SrcState ValueState Variable]
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
InternalAssignStmt r smt =>
[SVariable r] -> [SValue r] -> MS (r smt)
multiAssign [HdrState ValueState Variable]
-> [HdrState ValueState Value]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
InternalAssignStmt r smt =>
[SVariable r] -> [SValue r] -> MS (r smt)
multiAssign
    ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
vrs) ((SValue (p CppSrcCode CppHdrCode) -> PairState MethodState p Value)
-> [SValue (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS) [SValue (p CppSrcCode CppHdrCode)]
vls)

instance (Pair p) => InternalIOStmt (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  -- Another Maybe/State combination
  printSt :: Bool
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
printSt Bool
nl Maybe (SValue (p CppSrcCode CppHdrCode))
f SValue (p CppSrcCode CppHdrCode)
p SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2
    (Bool
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
InternalIOStmt r smt =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MS (r smt)
printSt Bool
nl ((SValue (p CppSrcCode CppHdrCode) -> SrcState ValueState Value)
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (SrcState ValueState Value)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode Value -> CppSrcCode Value)
-> SValue (p CppSrcCode CppHdrCode) -> SrcState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) Maybe (SValue (p CppSrcCode CppHdrCode))
f))
    (Bool
-> Maybe (HdrState ValueState Value)
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
InternalIOStmt r smt =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MS (r smt)
printSt Bool
nl ((SValue (p CppSrcCode CppHdrCode) -> HdrState ValueState Value)
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (HdrState ValueState Value)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode Value -> CppHdrCode Value)
-> SValue (p CppSrcCode CppHdrCode) -> HdrState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppHdrCode Value
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) Maybe (SValue (p CppSrcCode CppHdrCode))
f))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
p) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v)

instance (Pair p) => InternalControlStmt (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  multiReturn :: [SValue (p CppSrcCode CppHdrCode)]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
multiReturn = ([SrcState ValueState Value]
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState Value]
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
InternalControlStmt r smt =>
[SValue r] -> MS (r smt)
multiReturn [HdrState ValueState Value]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
InternalControlStmt r smt =>
[SValue r] -> MS (r smt)
multiReturn ([PairState MethodState p Value]
 -> MS (p CppSrcCode CppHdrCode (Doc, Terminator)))
-> ([SValue (p CppSrcCode CppHdrCode)]
    -> [PairState MethodState p Value])
-> [SValue (p CppSrcCode CppHdrCode)]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SValue (p CppSrcCode CppHdrCode) -> PairState MethodState p Value)
-> [SValue (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS)

instance (Pair p) => RenderStatement (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  stmt :: MS (p CppSrcCode CppHdrCode (Doc, Terminator))
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
stmt = (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState MethodState (Doc, Terminator)
    -> HdrState MethodState (Doc, Terminator))
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
MS (r smt) -> MS (r smt)
stmt HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
MS (r smt) -> MS (r smt)
stmt
  loopStmt :: MS (p CppSrcCode CppHdrCode (Doc, Terminator))
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
loopStmt = (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState MethodState (Doc, Terminator)
    -> HdrState MethodState (Doc, Terminator))
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
MS (r smt) -> MS (r smt)
loopStmt HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
MS (r smt) -> MS (r smt)
loopStmt
  stmtFromData :: Doc -> Terminator -> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
stmtFromData Doc
d Terminator
t = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Doc -> Terminator -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> Terminator -> MS (r smt)
stmtFromData Doc
d Terminator
t) (Doc -> Terminator -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> Terminator -> MS (r smt)
stmtFromData Doc
d Terminator
t)

instance (Pair p) => StatementElim (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  statement :: p CppSrcCode CppHdrCode (Doc, Terminator) -> Doc
statement p CppSrcCode CppHdrCode (Doc, Terminator)
s = CppSrcCode (Doc, Terminator) -> Doc
forall (r :: * -> *) smt. StatementElim r smt => r smt -> Doc
RC.statement (CppSrcCode (Doc, Terminator) -> Doc)
-> CppSrcCode (Doc, Terminator) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode (Doc, Terminator)
-> CppSrcCode (Doc, Terminator)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, Terminator)
s
  statementTerm :: p CppSrcCode CppHdrCode (Doc, Terminator) -> Terminator
statementTerm p CppSrcCode CppHdrCode (Doc, Terminator)
s = CppSrcCode (Doc, Terminator) -> Terminator
forall (r :: * -> *) smt.
StatementElim r smt =>
r smt -> Terminator
statementTerm (CppSrcCode (Doc, Terminator) -> Terminator)
-> CppSrcCode (Doc, Terminator) -> Terminator
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode (Doc, Terminator)
-> CppSrcCode (Doc, Terminator)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, Terminator)
s

instance (Pair p) => StatementSym (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  valStmt :: SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
valStmt = (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
SValue r -> MS (r smt)
valStmt HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
SValue r -> MS (r smt)
valStmt (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode (Doc, Terminator)))
-> (SValue (p CppSrcCode CppHdrCode)
    -> PairState MethodState p Value)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS
  emptyStmt :: MS (p CppSrcCode CppHdrCode (Doc, Terminator))
emptyStmt = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  multi :: [MS (p CppSrcCode CppHdrCode (Doc, Terminator))]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
multi = ([SrcState MethodState (Doc, Terminator)]
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState MethodState (Doc, Terminator)]
    -> HdrState MethodState (Doc, Terminator))
-> [MS (p CppSrcCode CppHdrCode (Doc, Terminator))]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState MethodState (Doc, Terminator)]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
[MS (r smt)] -> MS (r smt)
multi [HdrState MethodState (Doc, Terminator)]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
[MS (r smt)] -> MS (r smt)
multi

instance (Pair p) => AssignStatement (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  assign :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
assign SVariable (p CppSrcCode CppHdrCode)
vr SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
assign HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
assign (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
vl)
  &-= :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
(&-=) SVariable (p CppSrcCode CppHdrCode)
vr SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
(&-=) HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
(&-=) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
vl)
  &+= :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
(&+=) SVariable (p CppSrcCode CppHdrCode)
vr SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
(&+=) HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
(&+=) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
vl)
  &++ :: SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
(&++) SVariable (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState Variable
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> MS (r smt)
(&++) HdrState ValueState Variable
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> MS (r smt)
(&++) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vl)
  &-- :: SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
(&--) SVariable (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState Variable
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> MS (r smt)
(&--) HdrState ValueState Variable
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> MS (r smt)
(&--) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vl)

instance (Pair p) => DeclStatement (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  varDec :: SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
varDec SVariable (p CppSrcCode CppHdrCode)
vr p CppSrcCode CppHdrCode ScopeData
scp = (SrcState ValueState Variable
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
`varDec` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp) (HdrState ValueState Variable
-> CppHdrCode ScopeData -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
`varDec` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr)
  varDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
varDecDef SVariable (p CppSrcCode CppHdrCode)
vr p CppSrcCode CppHdrCode ScopeData
scp SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
`varDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp) (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
`varDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
vl)
  setDec :: SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
setDec SVariable (p CppSrcCode CppHdrCode)
vr p CppSrcCode CppHdrCode ScopeData
scp = (SrcState ValueState Variable
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
`setDec` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp) (HdrState ValueState Variable
-> CppHdrCode ScopeData -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
`setDec` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr)
  setDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
setDecDef SVariable (p CppSrcCode CppHdrCode)
vr p CppSrcCode CppHdrCode ScopeData
scp SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
`setDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp) (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
`setDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
vl)
  listDec :: Integer
-> SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
listDec Integer
n SVariable (p CppSrcCode CppHdrCode)
vr p CppSrcCode CppHdrCode ScopeData
scp = (SrcState ValueState Variable
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (\SrcState ValueState Variable
v -> Integer
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
Integer -> SVariable r -> r ScopeData -> MS (r smt)
listDec Integer
n SrcState ValueState Variable
v (p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp))
    (\HdrState ValueState Variable
v -> Integer
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
Integer -> SVariable r -> r ScopeData -> MS (r smt)
listDec Integer
n HdrState ValueState Variable
v (p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr)
  listDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> [SValue (p CppSrcCode CppHdrCode)]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
listDecDef SVariable (p CppSrcCode CppHdrCode)
vr p CppSrcCode CppHdrCode ScopeData
scp [SValue (p CppSrcCode CppHdrCode)]
vs = (SrcState ValueState Variable
 -> [SrcState ValueState Value]
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> [HdrState ValueState Value]
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
`listDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp)
    (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
`listDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr) ((SValue (p CppSrcCode CppHdrCode) -> PairState MethodState p Value)
-> [SValue (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS) [SValue (p CppSrcCode CppHdrCode)]
vs)
  arrayDec :: Integer
-> SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
arrayDec Integer
n SValue (p CppSrcCode CppHdrCode)
dflt SVariable (p CppSrcCode CppHdrCode)
vr p CppSrcCode CppHdrCode ScopeData
scp = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (\SrcState ValueState Variable
v SrcState ValueState Value
d -> Integer
-> SrcState ValueState Value
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
Integer -> SValue r -> SVariable r -> r ScopeData -> MS (r smt)
arrayDec Integer
n SrcState ValueState Value
d SrcState ValueState Variable
v (p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp))
    (\HdrState ValueState Variable
v HdrState ValueState Value
d -> Integer
-> HdrState ValueState Value
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
Integer -> SValue r -> SVariable r -> r ScopeData -> MS (r smt)
arrayDec Integer
n HdrState ValueState Value
d HdrState ValueState Variable
v (p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
dflt)
  arrayDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> [SValue (p CppSrcCode CppHdrCode)]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
arrayDecDef SVariable (p CppSrcCode CppHdrCode)
vr p CppSrcCode CppHdrCode ScopeData
scp [SValue (p CppSrcCode CppHdrCode)]
vs = (SrcState ValueState Variable
 -> [SrcState ValueState Value]
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> [HdrState ValueState Value]
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
`arrayDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp)
    (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
`arrayDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr) ((SValue (p CppSrcCode CppHdrCode) -> PairState MethodState p Value)
-> [SValue (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS) [SValue (p CppSrcCode CppHdrCode)]
vs)
  constDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
constDecDef SVariable (p CppSrcCode CppHdrCode)
vr p CppSrcCode CppHdrCode ScopeData
scp SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
`constDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp)
    (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
`constDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
vl)
  funcDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> [SVariable (p CppSrcCode CppHdrCode)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
funcDecDef SVariable (p CppSrcCode CppHdrCode)
v p CppSrcCode CppHdrCode ScopeData
scp [SVariable (p CppSrcCode CppHdrCode)]
ps = (SrcState ValueState Variable
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> [PairState MethodState p Variable]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> PairState u p a
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pairValListVal (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r
-> r ScopeData -> [SVariable r] -> MS (r Doc) -> MS (r smt)
`funcDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp)
    (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r
-> r ScopeData -> [SVariable r] -> MS (r Doc) -> MS (r smt)
`funcDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
v) ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
ps)

instance (Pair p) => OODeclStatement (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  objDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
objDecDef SVariable (p CppSrcCode CppHdrCode)
o p CppSrcCode CppHdrCode ScopeData
scp SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
OODeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
`objDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp) (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
OODeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
`objDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
o) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v)
  objDecNew :: SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> [SValue (p CppSrcCode CppHdrCode)]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
objDecNew SVariable (p CppSrcCode CppHdrCode)
vr p CppSrcCode CppHdrCode ScopeData
scp [SValue (p CppSrcCode CppHdrCode)]
vs = (SrcState ValueState Variable
 -> [SrcState ValueState Value]
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> [HdrState ValueState Value]
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
OODeclStatement r smt =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
`objDecNew` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp)
    (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
OODeclStatement r smt =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
`objDecNew` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr) ((SValue (p CppSrcCode CppHdrCode) -> PairState MethodState p Value)
-> [SValue (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS) [SValue (p CppSrcCode CppHdrCode)]
vs)
  extObjDecNew :: ClassName
-> SVariable (p CppSrcCode CppHdrCode)
-> p CppSrcCode CppHdrCode ScopeData
-> [SValue (p CppSrcCode CppHdrCode)]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
extObjDecNew ClassName
lib SVariable (p CppSrcCode CppHdrCode)
vr p CppSrcCode CppHdrCode ScopeData
scp [SValue (p CppSrcCode CppHdrCode)]
vs = (SrcState ValueState Variable
 -> [SrcState ValueState Value]
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> [HdrState ValueState Value]
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List
    (\SrcState ValueState Variable
vr' -> ClassName
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
OODeclStatement r smt =>
ClassName -> SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
extObjDecNew ClassName
lib SrcState ValueState Variable
vr' (p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp))
    (\HdrState ValueState Variable
vr' -> ClassName
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
OODeclStatement r smt =>
ClassName -> SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
extObjDecNew ClassName
lib HdrState ValueState Variable
vr' (p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vr) ((SValue (p CppSrcCode CppHdrCode) -> PairState MethodState p Value)
-> [SValue (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS) [SValue (p CppSrcCode CppHdrCode)]
vs)

instance (Pair p) => IOStatement (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  print :: SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
print = (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
print HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
print (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode (Doc, Terminator)))
-> (SValue (p CppSrcCode CppHdrCode)
    -> PairState MethodState p Value)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS
  printLn :: SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
printLn = (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
printLn HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
printLn (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode (Doc, Terminator)))
-> (SValue (p CppSrcCode CppHdrCode)
    -> PairState MethodState p Value)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS
  printStr :: ClassName -> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
printStr ClassName
s = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (ClassName -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
ClassName -> MS (r smt)
printStr ClassName
s) (ClassName -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
ClassName -> MS (r smt)
printStr ClassName
s)
  printStrLn :: ClassName -> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
printStrLn ClassName
s = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (ClassName -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
ClassName -> MS (r smt)
printStrLn ClassName
s) (ClassName -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
ClassName -> MS (r smt)
printStrLn ClassName
s)

  printFile :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
printFile SValue (p CppSrcCode CppHdrCode)
f SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SValue r -> MS (r smt)
printFile HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SValue r -> MS (r smt)
printFile (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
f)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v)
  printFileLn :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
printFileLn SValue (p CppSrcCode CppHdrCode)
f SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SValue r -> MS (r smt)
printFileLn HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SValue r -> MS (r smt)
printFileLn (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
f)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v)
  printFileStr :: SValue (p CppSrcCode CppHdrCode)
-> ClassName -> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
printFileStr SValue (p CppSrcCode CppHdrCode)
f ClassName
s = (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (SrcState ValueState Value
-> ClassName -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> ClassName -> MS (r smt)
`printFileStr` ClassName
s) (HdrState ValueState Value
-> ClassName -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> ClassName -> MS (r smt)
`printFileStr` ClassName
s)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
f)
  printFileStrLn :: SValue (p CppSrcCode CppHdrCode)
-> ClassName -> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
printFileStrLn SValue (p CppSrcCode CppHdrCode)
f ClassName
s = (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (SrcState ValueState Value
-> ClassName -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> ClassName -> MS (r smt)
`printFileStrLn` ClassName
s) (HdrState ValueState Value
-> ClassName -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> ClassName -> MS (r smt)
`printFileStrLn` ClassName
s)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
f)

  getInput :: SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
getInput = (SrcState ValueState Variable
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> MS (r smt)
getInput HdrState ValueState Variable
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> MS (r smt)
getInput (PairState MethodState p Variable
 -> MS (p CppSrcCode CppHdrCode (Doc, Terminator)))
-> (SVariable (p CppSrcCode CppHdrCode)
    -> PairState MethodState p Variable)
-> SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS
  discardInput :: MS (p CppSrcCode CppHdrCode (Doc, Terminator))
discardInput = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. IOStatement r smt => MS (r smt)
discardInput HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. IOStatement r smt => MS (r smt)
discardInput
  getFileInput :: SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
getFileInput SValue (p CppSrcCode CppHdrCode)
f SVariable (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Value
 -> SrcState ValueState Variable
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState ValueState Variable
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SVariable r -> MS (r smt)
getFileInput HdrState ValueState Value
-> HdrState ValueState Variable
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SVariable r -> MS (r smt)
getFileInput (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
f)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
v)
  discardFileInput :: SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
discardFileInput = (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
discardFileInput HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
discardFileInput (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode (Doc, Terminator)))
-> (SValue (p CppSrcCode CppHdrCode)
    -> PairState MethodState p Value)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS

  openFileR :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
openFileR SVariable (p CppSrcCode CppHdrCode)
f SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
openFileR HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
openFileR (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
f)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v)
  openFileW :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
openFileW SVariable (p CppSrcCode CppHdrCode)
f SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
openFileW HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
openFileW (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
f)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v)
  openFileA :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
openFileA SVariable (p CppSrcCode CppHdrCode)
f SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
openFileA HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
openFileA (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
f)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v)
  closeFile :: SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
closeFile = (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
closeFile HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
closeFile (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode (Doc, Terminator)))
-> (SValue (p CppSrcCode CppHdrCode)
    -> PairState MethodState p Value)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS

  getFileInputLine :: SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
getFileInputLine SValue (p CppSrcCode CppHdrCode)
f SVariable (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Value
 -> SrcState ValueState Variable
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState ValueState Variable
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SVariable r -> MS (r smt)
getFileInputLine HdrState ValueState Value
-> HdrState ValueState Variable
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SVariable r -> MS (r smt)
getFileInputLine
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
f) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
v)
  discardFileLine :: SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
discardFileLine = (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
discardFileLine HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
discardFileLine (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode (Doc, Terminator)))
-> (SValue (p CppSrcCode CppHdrCode)
    -> PairState MethodState p Value)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS
  getFileInputAll :: SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
getFileInputAll SValue (p CppSrcCode CppHdrCode)
f SVariable (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Value
 -> SrcState ValueState Variable
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState ValueState Variable
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SVariable r -> MS (r smt)
getFileInputAll HdrState ValueState Value
-> HdrState ValueState Variable
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SVariable r -> MS (r smt)
getFileInputAll
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
f) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
v)

instance (Pair p) => StringStatement (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  stringSplit :: Char
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
stringSplit Char
d SVariable (p CppSrcCode CppHdrCode)
vnew SValue (p CppSrcCode CppHdrCode)
s = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (Char
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StringStatement r smt =>
Char -> SVariable r -> SValue r -> MS (r smt)
stringSplit Char
d) (Char
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StringStatement r smt =>
Char -> SVariable r -> SValue r -> MS (r smt)
stringSplit Char
d)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
vnew) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
s)

  stringListVals :: [SVariable (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
stringListVals [SVariable (p CppSrcCode CppHdrCode)]
vars SValue (p CppSrcCode CppHdrCode)
sl = ([SrcState ValueState Variable]
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState Variable]
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p Variable]
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> SrcState s b -> SrcState t c)
-> ([HdrState r a] -> HdrState s b -> HdrState t c)
-> [PairState t p a]
-> PairState t p b
-> PairState t p c
pair1List1Val [SrcState ValueState Variable]
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StringStatement r smt =>
[SVariable r] -> SValue r -> MS (r smt)
stringListVals [HdrState ValueState Variable]
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StringStatement r smt =>
[SVariable r] -> SValue r -> MS (r smt)
stringListVals
    ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
vars) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
sl)
  stringListLists :: [SVariable (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
stringListLists [SVariable (p CppSrcCode CppHdrCode)]
lsts SValue (p CppSrcCode CppHdrCode)
sl = ([SrcState ValueState Variable]
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState Variable]
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p Variable]
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> SrcState s b -> SrcState t c)
-> ([HdrState r a] -> HdrState s b -> HdrState t c)
-> [PairState t p a]
-> PairState t p b
-> PairState t p c
pair1List1Val [SrcState ValueState Variable]
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StringStatement r smt =>
[SVariable r] -> SValue r -> MS (r smt)
stringListLists [HdrState ValueState Variable]
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StringStatement r smt =>
[SVariable r] -> SValue r -> MS (r smt)
stringListLists
    ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
lsts) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
sl)

instance (Pair p) => FuncAppStatement (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  inOutCall :: InOutCall (p CppSrcCode CppHdrCode) (Doc, Terminator)
inOutCall ClassName
n [SValue (p CppSrcCode CppHdrCode)]
is [SVariable (p CppSrcCode CppHdrCode)]
os [SVariable (p CppSrcCode CppHdrCode)]
bs = ([SrcState ValueState Value]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState Value]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p Value]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> PairState MethodState p (Doc, Terminator)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists (InOutCall CppSrcCode (Doc, Terminator)
forall (r :: * -> *) smt. FuncAppStatement r smt => InOutCall r smt
inOutCall ClassName
n) (InOutCall CppHdrCode (Doc, Terminator)
forall (r :: * -> *) smt. FuncAppStatement r smt => InOutCall r smt
inOutCall ClassName
n)
    ((SValue (p CppSrcCode CppHdrCode) -> PairState MethodState p Value)
-> [SValue (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS) [SValue (p CppSrcCode CppHdrCode)]
is) ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
os)
    ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
bs)
  extInOutCall :: ClassName -> InOutCall (p CppSrcCode CppHdrCode) (Doc, Terminator)
extInOutCall ClassName
m ClassName
n [SValue (p CppSrcCode CppHdrCode)]
is [SVariable (p CppSrcCode CppHdrCode)]
os [SVariable (p CppSrcCode CppHdrCode)]
bs = ([SrcState ValueState Value]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState Value]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p Value]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> PairState MethodState p (Doc, Terminator)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists (ClassName -> InOutCall CppSrcCode (Doc, Terminator)
forall (r :: * -> *) smt.
FuncAppStatement r smt =>
ClassName -> InOutCall r smt
extInOutCall ClassName
m ClassName
n) (ClassName -> InOutCall CppHdrCode (Doc, Terminator)
forall (r :: * -> *) smt.
FuncAppStatement r smt =>
ClassName -> InOutCall r smt
extInOutCall ClassName
m ClassName
n)
    ((SValue (p CppSrcCode CppHdrCode) -> PairState MethodState p Value)
-> [SValue (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS) [SValue (p CppSrcCode CppHdrCode)]
is) ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
os)
    ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
bs)

instance (Pair p) => OOFuncAppStatement (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  selfInOutCall :: InOutCall (p CppSrcCode CppHdrCode) (Doc, Terminator)
selfInOutCall ClassName
n [SValue (p CppSrcCode CppHdrCode)]
is [SVariable (p CppSrcCode CppHdrCode)]
os [SVariable (p CppSrcCode CppHdrCode)]
bs = ([SrcState ValueState Value]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState Value]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p Value]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> PairState MethodState p (Doc, Terminator)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists (InOutCall CppSrcCode (Doc, Terminator)
forall (r :: * -> *) smt.
OOFuncAppStatement r smt =>
InOutCall r smt
selfInOutCall ClassName
n) (InOutCall CppHdrCode (Doc, Terminator)
forall (r :: * -> *) smt.
OOFuncAppStatement r smt =>
InOutCall r smt
selfInOutCall ClassName
n)
    ((SValue (p CppSrcCode CppHdrCode) -> PairState MethodState p Value)
-> [SValue (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS) [SValue (p CppSrcCode CppHdrCode)]
is) ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
os)
    ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
bs)

instance (Pair p) => CommentStatement (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  comment :: ClassName -> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
comment ClassName
cmt = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (ClassName -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
CommentStatement r smt =>
ClassName -> MS (r smt)
comment ClassName
cmt) (ClassName -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
CommentStatement r smt =>
ClassName -> MS (r smt)
comment ClassName
cmt)

instance (Pair p) => ControlStatement (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  break :: MS (p CppSrcCode CppHdrCode (Doc, Terminator))
break = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. ControlStatement r smt => MS (r smt)
break HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. ControlStatement r smt => MS (r smt)
break
  continue :: MS (p CppSrcCode CppHdrCode (Doc, Terminator))
continue = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. ControlStatement r smt => MS (r smt)
continue HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. ControlStatement r smt => MS (r smt)
continue

  returnStmt :: SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
returnStmt = (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r smt)
returnStmt HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r smt)
returnStmt (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode (Doc, Terminator)))
-> (SValue (p CppSrcCode CppHdrCode)
    -> PairState MethodState p Value)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS

  throw :: ClassName -> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
throw ClassName
errMsg = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (ClassName -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
ClassName -> MS (r smt)
throw ClassName
errMsg) (ClassName -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
ClassName -> MS (r smt)
throw ClassName
errMsg)

  ifCond :: [(SValue (p CppSrcCode CppHdrCode),
  MS (p CppSrcCode CppHdrCode Doc))]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
ifCond [(SValue (p CppSrcCode CppHdrCode),
  MS (p CppSrcCode CppHdrCode Doc))]
bs = ([SrcState ValueState Value]
 -> [SrcState MethodState Doc]
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState Value]
    -> [HdrState MethodState Doc]
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p Value]
-> [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pair2Lists1Val
    (\[SrcState ValueState Value]
cs [SrcState MethodState Doc]
bods -> [(SrcState ValueState Value, SrcState MethodState Doc)]
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
[(SValue r, MS (r Doc))] -> MS (r Doc) -> MS (r smt)
ifCond ([SrcState ValueState Value]
-> [SrcState MethodState Doc]
-> [(SrcState ValueState Value, SrcState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcState ValueState Value]
cs [SrcState MethodState Doc]
bods))
    (\[HdrState ValueState Value]
cs [HdrState MethodState Doc]
bods -> [(HdrState ValueState Value, HdrState MethodState Doc)]
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
[(SValue r, MS (r Doc))] -> MS (r Doc) -> MS (r smt)
ifCond ([HdrState ValueState Value]
-> [HdrState MethodState Doc]
-> [(HdrState ValueState Value, HdrState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [HdrState ValueState Value]
cs [HdrState MethodState Doc]
bods))
    (((SValue (p CppSrcCode CppHdrCode),
  MS (p CppSrcCode CppHdrCode Doc))
 -> PairState MethodState p Value)
-> [(SValue (p CppSrcCode CppHdrCode),
     MS (p CppSrcCode CppHdrCode Doc))]
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (SValue (p CppSrcCode CppHdrCode) -> PairState MethodState p Value)
-> ((SValue (p CppSrcCode CppHdrCode),
     MS (p CppSrcCode CppHdrCode Doc))
    -> SValue (p CppSrcCode CppHdrCode))
-> (SValue (p CppSrcCode CppHdrCode),
    MS (p CppSrcCode CppHdrCode Doc))
-> PairState MethodState p Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SValue (p CppSrcCode CppHdrCode),
 MS (p CppSrcCode CppHdrCode Doc))
-> SValue (p CppSrcCode CppHdrCode)
forall a b. (a, b) -> a
fst) [(SValue (p CppSrcCode CppHdrCode),
  MS (p CppSrcCode CppHdrCode Doc))]
bs) (((SValue (p CppSrcCode CppHdrCode),
  MS (p CppSrcCode CppHdrCode Doc))
 -> MS (p CppSrcCode CppHdrCode Doc))
-> [(SValue (p CppSrcCode CppHdrCode),
     MS (p CppSrcCode CppHdrCode Doc))]
-> [MS (p CppSrcCode CppHdrCode Doc)]
forall a b. (a -> b) -> [a] -> [b]
map (SValue (p CppSrcCode CppHdrCode),
 MS (p CppSrcCode CppHdrCode Doc))
-> MS (p CppSrcCode CppHdrCode Doc)
forall a b. (a, b) -> b
snd [(SValue (p CppSrcCode CppHdrCode),
  MS (p CppSrcCode CppHdrCode Doc))]
bs)
  switch :: SValue (p CppSrcCode CppHdrCode)
-> [(SValue (p CppSrcCode CppHdrCode),
     MS (p CppSrcCode CppHdrCode Doc))]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
switch SValue (p CppSrcCode CppHdrCode)
v [(SValue (p CppSrcCode CppHdrCode),
  MS (p CppSrcCode CppHdrCode Doc))]
cs = (SrcState ValueState Value
 -> [SrcState ValueState Value]
 -> [SrcState MethodState Doc]
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> [HdrState ValueState Value]
    -> [HdrState MethodState Doc]
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> [PairState MethodState p Value]
-> [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pairVal2ListsVal
    (\SrcState ValueState Value
s [SrcState ValueState Value]
cv [SrcState MethodState Doc]
cb -> SrcState ValueState Value
-> [(SrcState ValueState Value, SrcState MethodState Doc)]
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> [(SValue r, MS (r Doc))] -> MS (r Doc) -> MS (r smt)
switch SrcState ValueState Value
s ([SrcState ValueState Value]
-> [SrcState MethodState Doc]
-> [(SrcState ValueState Value, SrcState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcState ValueState Value]
cv [SrcState MethodState Doc]
cb))
    (\HdrState ValueState Value
s [HdrState ValueState Value]
cv [HdrState MethodState Doc]
cb -> HdrState ValueState Value
-> [(HdrState ValueState Value, HdrState MethodState Doc)]
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> [(SValue r, MS (r Doc))] -> MS (r Doc) -> MS (r smt)
switch HdrState ValueState Value
s ([HdrState ValueState Value]
-> [HdrState MethodState Doc]
-> [(HdrState ValueState Value, HdrState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [HdrState ValueState Value]
cv [HdrState MethodState Doc]
cb))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v) (((SValue (p CppSrcCode CppHdrCode),
  MS (p CppSrcCode CppHdrCode Doc))
 -> PairState MethodState p Value)
-> [(SValue (p CppSrcCode CppHdrCode),
     MS (p CppSrcCode CppHdrCode Doc))]
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (SValue (p CppSrcCode CppHdrCode) -> PairState MethodState p Value)
-> ((SValue (p CppSrcCode CppHdrCode),
     MS (p CppSrcCode CppHdrCode Doc))
    -> SValue (p CppSrcCode CppHdrCode))
-> (SValue (p CppSrcCode CppHdrCode),
    MS (p CppSrcCode CppHdrCode Doc))
-> PairState MethodState p Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SValue (p CppSrcCode CppHdrCode),
 MS (p CppSrcCode CppHdrCode Doc))
-> SValue (p CppSrcCode CppHdrCode)
forall a b. (a, b) -> a
fst) [(SValue (p CppSrcCode CppHdrCode),
  MS (p CppSrcCode CppHdrCode Doc))]
cs) (((SValue (p CppSrcCode CppHdrCode),
  MS (p CppSrcCode CppHdrCode Doc))
 -> MS (p CppSrcCode CppHdrCode Doc))
-> [(SValue (p CppSrcCode CppHdrCode),
     MS (p CppSrcCode CppHdrCode Doc))]
-> [MS (p CppSrcCode CppHdrCode Doc)]
forall a b. (a -> b) -> [a] -> [b]
map (SValue (p CppSrcCode CppHdrCode),
 MS (p CppSrcCode CppHdrCode Doc))
-> MS (p CppSrcCode CppHdrCode Doc)
forall a b. (a, b) -> b
snd [(SValue (p CppSrcCode CppHdrCode),
  MS (p CppSrcCode CppHdrCode Doc))]
cs)

  ifExists :: SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
ifExists SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Value
 -> SrcState MethodState Doc
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState MethodState Doc
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r Doc) -> MS (r Doc) -> MS (r smt)
ifExists HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r Doc) -> MS (r Doc) -> MS (r smt)
ifExists (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v)

  for :: MS (p CppSrcCode CppHdrCode (Doc, Terminator))
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
for MS (p CppSrcCode CppHdrCode (Doc, Terminator))
i SValue (p CppSrcCode CppHdrCode)
initv = (SrcState MethodState (Doc, Terminator)
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState MethodState (Doc, Terminator)
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator)
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> SrcState s b -> SrcState t c -> SrcState u d -> SrcState v e)
-> (HdrState r a
    -> HdrState s b -> HdrState t c -> HdrState u d -> HdrState v e)
-> PairState v p a
-> PairState v p b
-> PairState v p c
-> PairState v p d
-> PairState v p e
pair4 SrcState MethodState (Doc, Terminator)
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
MS (r smt) -> SValue r -> MS (r smt) -> MS (r Doc) -> MS (r smt)
for HdrState MethodState (Doc, Terminator)
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
MS (r smt) -> SValue r -> MS (r smt) -> MS (r Doc) -> MS (r smt)
for MS (p CppSrcCode CppHdrCode (Doc, Terminator))
i (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
initv)
  forRange :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forRange SVariable (p CppSrcCode CppHdrCode)
i SValue (p CppSrcCode CppHdrCode)
initv SValue (p CppSrcCode CppHdrCode)
finalv SValue (p CppSrcCode CppHdrCode)
stepv = (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e w
       f.
Pair p =>
(SrcState r a
 -> SrcState s b
 -> SrcState t c
 -> SrcState u d
 -> SrcState v e
 -> SrcState w f)
-> (HdrState r a
    -> HdrState s b
    -> HdrState t c
    -> HdrState u d
    -> HdrState v e
    -> HdrState w f)
-> PairState w p a
-> PairState w p b
-> PairState w p c
-> PairState w p d
-> PairState w p e
-> PairState w p f
pair5 SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SVariable r
-> SValue r -> SValue r -> SValue r -> MS (r Doc) -> MS (r smt)
forRange HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SVariable r
-> SValue r -> SValue r -> SValue r -> MS (r Doc) -> MS (r smt)
forRange (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
i)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
initv) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
finalv) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
stepv)
  forEach :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forEach SVariable (p CppSrcCode CppHdrCode)
e' SValue (p CppSrcCode CppHdrCode)
v MS (p CppSrcCode CppHdrCode Doc)
b = do
    p CppSrcCode CppHdrCode (Doc, Terminator)
loop <- (SrcState ValueState Variable
 -> SrcState ValueState Value
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SVariable r -> SValue r -> MS (r Doc) -> MS (r smt)
forEach HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SVariable r -> SValue r -> MS (r Doc) -> MS (r smt)
forEach (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
e') (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v) MS (p CppSrcCode CppHdrCode Doc)
b
    p CppSrcCode CppHdrCode (Doc, Terminator)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a s. a -> State s a
toState p CppSrcCode CppHdrCode (Doc, Terminator)
loop
  while :: SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
while SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState Value
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r Doc) -> MS (r smt)
while HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r Doc) -> MS (r smt)
while (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
v)

  tryCatch :: MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
tryCatch = (SrcState MethodState Doc
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState MethodState Doc
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState MethodState Doc
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
MS (r Doc) -> MS (r Doc) -> MS (r smt)
tryCatch HdrState MethodState Doc
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
MS (r Doc) -> MS (r Doc) -> MS (r smt)
tryCatch

  assert :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
assert SValue (p CppSrcCode CppHdrCode)
cond SValue (p CppSrcCode CppHdrCode)
errMsg = (SrcState ValueState Value
 -> SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> SValue r -> MS (r smt)
assert HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> SValue r -> MS (r smt)
assert (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
cond) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue (p CppSrcCode CppHdrCode)
errMsg)

instance (Pair p) => ObserverPattern (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  notifyObservers :: VS (p CppSrcCode CppHdrCode FuncData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
notifyObservers VS (p CppSrcCode CppHdrCode FuncData)
f VS (p CppSrcCode CppHdrCode TypeData)
t = (SrcState ValueState FuncData
 -> State ValueState (CppSrcCode TypeData)
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState FuncData
    -> State ValueState (CppHdrCode TypeData)
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p FuncData
-> PairState MethodState p TypeData
-> MS (p CppSrcCode CppHdrCode (Doc, Terminator))
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState FuncData
-> State ValueState (CppSrcCode TypeData)
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ObserverPattern r smt =>
VS (r FuncData) -> VS (r TypeData) -> MS (r smt)
notifyObservers HdrState ValueState FuncData
-> State ValueState (CppHdrCode TypeData)
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ObserverPattern r smt =>
VS (r FuncData) -> VS (r TypeData) -> MS (r smt)
notifyObservers
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode FuncData))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode FuncData)
-> PairState MethodState p FuncData
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode FuncData))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode FuncData) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode FuncData) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode FuncData)
f) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode TypeData)
-> PairState MethodState p TypeData
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode TypeData)
t)

instance (Pair p) => StrategyPattern (p CppSrcCode CppHdrCode) (Doc, Terminator) where
  -- How I handle values with both State and Maybe might cause problems later on,
  -- because it will make the state transitions run twice for the value in the
  -- Maybe. For now, given what we store in the State for Values/Variables, this
  -- doesn't matter. If problems occur in the future, an alternative way to do
  -- this (which wouldn't duplicate state transitions) would be to unwrap the
  -- maybes, pass them to a function like pair2, and then have the anonymous
  -- functions rewrap the values in Maybes. This would be messy so I don't want to
  -- do it unless there's a need.
  runStrategy :: ClassName
-> [(ClassName, MS (p CppSrcCode CppHdrCode Doc))]
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (SVariable (p CppSrcCode CppHdrCode))
-> MS (p CppSrcCode CppHdrCode Doc)
runStrategy ClassName
l [(ClassName, MS (p CppSrcCode CppHdrCode Doc))]
strats Maybe (SValue (p CppSrcCode CppHdrCode))
rv Maybe (SVariable (p CppSrcCode CppHdrCode))
av = ([SrcState MethodState Doc] -> SrcState MethodState Doc)
-> ([HdrState MethodState Doc] -> HdrState MethodState Doc)
-> [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List
    (\[SrcState MethodState Doc]
s -> ClassName
-> [(ClassName, SrcState MethodState Doc)]
-> Maybe (SrcState ValueState Value)
-> Maybe (SrcState ValueState Variable)
-> SrcState MethodState Doc
forall (r :: * -> *) smt.
StrategyPattern r smt =>
ClassName
-> [(ClassName, MS (r Doc))]
-> Maybe (SValue r)
-> Maybe (SVariable r)
-> MS (r Doc)
runStrategy ClassName
l ([ClassName]
-> [SrcState MethodState Doc]
-> [(ClassName, SrcState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, MS (p CppSrcCode CppHdrCode Doc)) -> ClassName)
-> [(ClassName, MS (p CppSrcCode CppHdrCode Doc))] -> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, MS (p CppSrcCode CppHdrCode Doc)) -> ClassName
forall a b. (a, b) -> a
fst [(ClassName, MS (p CppSrcCode CppHdrCode Doc))]
strats) [SrcState MethodState Doc]
s) ((SValue (p CppSrcCode CppHdrCode) -> SrcState ValueState Value)
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (SrcState ValueState Value)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode Value -> CppSrcCode Value)
-> SValue (p CppSrcCode CppHdrCode) -> SrcState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) Maybe (SValue (p CppSrcCode CppHdrCode))
rv)
      ((SVariable (p CppSrcCode CppHdrCode)
 -> SrcState ValueState Variable)
-> Maybe (SVariable (p CppSrcCode CppHdrCode))
-> Maybe (SrcState ValueState Variable)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode Variable -> CppSrcCode Variable)
-> SVariable (p CppSrcCode CppHdrCode)
-> SrcState ValueState Variable
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Variable -> CppSrcCode Variable
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) Maybe (SVariable (p CppSrcCode CppHdrCode))
av))
    (\[HdrState MethodState Doc]
s -> ClassName
-> [(ClassName, HdrState MethodState Doc)]
-> Maybe (HdrState ValueState Value)
-> Maybe (HdrState ValueState Variable)
-> HdrState MethodState Doc
forall (r :: * -> *) smt.
StrategyPattern r smt =>
ClassName
-> [(ClassName, MS (r Doc))]
-> Maybe (SValue r)
-> Maybe (SVariable r)
-> MS (r Doc)
runStrategy ClassName
l ([ClassName]
-> [HdrState MethodState Doc]
-> [(ClassName, HdrState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, MS (p CppSrcCode CppHdrCode Doc)) -> ClassName)
-> [(ClassName, MS (p CppSrcCode CppHdrCode Doc))] -> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, MS (p CppSrcCode CppHdrCode Doc)) -> ClassName
forall a b. (a, b) -> a
fst [(ClassName, MS (p CppSrcCode CppHdrCode Doc))]
strats) [HdrState MethodState Doc]
s) ((SValue (p CppSrcCode CppHdrCode) -> HdrState ValueState Value)
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (HdrState ValueState Value)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode Value -> CppHdrCode Value)
-> SValue (p CppSrcCode CppHdrCode) -> HdrState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppHdrCode Value
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) Maybe (SValue (p CppSrcCode CppHdrCode))
rv)
      ((SVariable (p CppSrcCode CppHdrCode)
 -> HdrState ValueState Variable)
-> Maybe (SVariable (p CppSrcCode CppHdrCode))
-> Maybe (HdrState ValueState Variable)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode Variable -> CppHdrCode Variable)
-> SVariable (p CppSrcCode CppHdrCode)
-> HdrState ValueState Variable
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Variable -> CppHdrCode Variable
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) Maybe (SVariable (p CppSrcCode CppHdrCode))
av)) (((ClassName, MS (p CppSrcCode CppHdrCode Doc))
 -> MS (p CppSrcCode CppHdrCode Doc))
-> [(ClassName, MS (p CppSrcCode CppHdrCode Doc))]
-> [MS (p CppSrcCode CppHdrCode Doc)]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, MS (p CppSrcCode CppHdrCode Doc))
-> MS (p CppSrcCode CppHdrCode Doc)
forall a b. (a, b) -> b
snd [(ClassName, MS (p CppSrcCode CppHdrCode Doc))]
strats)

instance (Pair p) => VisibilitySym (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) where
  private :: p CppSrcCode CppHdrCode (Doc, VisibilityTag)
private = CppSrcCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
private CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
private
  public :: p CppSrcCode CppHdrCode (Doc, VisibilityTag)
public = CppSrcCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
public CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
public

instance (Pair p) => RenderVisibility (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) where
  visibilityFromData :: VisibilityTag
-> Doc -> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
visibilityFromData VisibilityTag
s Doc
d = CppSrcCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (VisibilityTag -> Doc -> CppSrcCode (Doc, VisibilityTag)
forall (r :: * -> *) vis.
RenderVisibility r vis =>
VisibilityTag -> Doc -> r vis
visibilityFromData VisibilityTag
s Doc
d) (VisibilityTag -> Doc -> CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) vis.
RenderVisibility r vis =>
VisibilityTag -> Doc -> r vis
visibilityFromData VisibilityTag
s Doc
d)

instance (Pair p) => VisibilityElim (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) where
  visibility :: p CppSrcCode CppHdrCode (Doc, VisibilityTag) -> Doc
visibility p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s = CppSrcCode (Doc, VisibilityTag) -> Doc
forall (r :: * -> *) vis. VisibilityElim r vis => r vis -> Doc
RC.visibility (CppSrcCode (Doc, VisibilityTag) -> Doc)
-> CppSrcCode (Doc, VisibilityTag) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s

instance (Pair p) => MethodTypeSym (p CppSrcCode CppHdrCode) where
  mType :: VS (p CppSrcCode CppHdrCode TypeData)
-> MSMthdType (p CppSrcCode CppHdrCode)
mType = (State ValueState (CppSrcCode TypeData)
 -> SrcState MethodState TypeData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState MethodState TypeData)
-> MSMthdType (p CppSrcCode CppHdrCode)
-> MSMthdType (p CppSrcCode CppHdrCode)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 State ValueState (CppSrcCode TypeData)
-> SrcState MethodState TypeData
forall (r :: * -> *).
MethodTypeSym r =>
VS (r TypeData) -> MSMthdType r
mType State ValueState (CppHdrCode TypeData)
-> HdrState MethodState TypeData
forall (r :: * -> *).
MethodTypeSym r =>
VS (r TypeData) -> MSMthdType r
mType (MSMthdType (p CppSrcCode CppHdrCode)
 -> MSMthdType (p CppSrcCode CppHdrCode))
-> (VS (p CppSrcCode CppHdrCode TypeData)
    -> MSMthdType (p CppSrcCode CppHdrCode))
-> VS (p CppSrcCode CppHdrCode TypeData)
-> MSMthdType (p CppSrcCode CppHdrCode)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode TypeData)
-> MSMthdType (p CppSrcCode CppHdrCode)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS

instance (Pair p) => OOMethodTypeSym (p CppSrcCode CppHdrCode) where
  construct :: ClassName -> MSMthdType (p CppSrcCode CppHdrCode)
construct ClassName
n = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> SrcState MethodState TypeData
-> HdrState MethodState TypeData
-> MSMthdType (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (ClassName -> SrcState MethodState TypeData
forall (r :: * -> *).
OOMethodTypeSym r =>
ClassName -> MSMthdType r
construct ClassName
n) (ClassName -> HdrState MethodState TypeData
forall (r :: * -> *).
OOMethodTypeSym r =>
ClassName -> MSMthdType r
construct ClassName
n)

instance (Pair p) => ParameterSym (p CppSrcCode CppHdrCode) where
  param :: SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode ParamData)
param = (SrcState ValueState Variable -> SrcState MethodState ParamData)
-> (HdrState ValueState Variable -> HdrState MethodState ParamData)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode ParamData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState MethodState ParamData
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
param HdrState ValueState Variable -> HdrState MethodState ParamData
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
param (PairState MethodState p Variable
 -> MS (p CppSrcCode CppHdrCode ParamData))
-> (SVariable (p CppSrcCode CppHdrCode)
    -> PairState MethodState p Variable)
-> SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode ParamData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS
  pointerParam :: SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode ParamData)
pointerParam = (SrcState ValueState Variable -> SrcState MethodState ParamData)
-> (HdrState ValueState Variable -> HdrState MethodState ParamData)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode ParamData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState MethodState ParamData
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
pointerParam HdrState ValueState Variable -> HdrState MethodState ParamData
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
pointerParam (PairState MethodState p Variable
 -> MS (p CppSrcCode CppHdrCode ParamData))
-> (SVariable (p CppSrcCode CppHdrCode)
    -> PairState MethodState p Variable)
-> SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode ParamData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS

instance (Pair p) => RenderParam (p CppSrcCode CppHdrCode) where
  paramFromData :: SVariable (p CppSrcCode CppHdrCode)
-> Doc -> MS (p CppSrcCode CppHdrCode ParamData)
paramFromData SVariable (p CppSrcCode CppHdrCode)
v' Doc
d = (SrcState ValueState Variable -> SrcState MethodState ParamData)
-> (HdrState ValueState Variable -> HdrState MethodState ParamData)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode ParamData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (SrcState ValueState Variable
-> Doc -> SrcState MethodState ParamData
forall (r :: * -> *).
RenderParam r =>
SVariable r -> Doc -> MS (r ParamData)
`paramFromData` Doc
d) (HdrState ValueState Variable
-> Doc -> HdrState MethodState ParamData
forall (r :: * -> *).
RenderParam r =>
SVariable r -> Doc -> MS (r ParamData)
`paramFromData` Doc
d) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (p CppSrcCode CppHdrCode)
v')

instance (Pair p) => ParamElim (p CppSrcCode CppHdrCode) where
  parameterName :: p CppSrcCode CppHdrCode ParamData -> ClassName
parameterName p CppSrcCode CppHdrCode ParamData
p = CppSrcCode ParamData -> ClassName
forall (r :: * -> *). ParamElim r => r ParamData -> ClassName
parameterName (CppSrcCode ParamData -> ClassName)
-> CppSrcCode ParamData -> ClassName
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ParamData -> CppSrcCode ParamData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ParamData
p
  parameterType :: p CppSrcCode CppHdrCode ParamData
-> p CppSrcCode CppHdrCode TypeData
parameterType p CppSrcCode CppHdrCode ParamData
p = CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (CppSrcCode ParamData -> CppSrcCode TypeData
forall (r :: * -> *). ParamElim r => r ParamData -> r TypeData
parameterType (CppSrcCode ParamData -> CppSrcCode TypeData)
-> CppSrcCode ParamData -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ParamData -> CppSrcCode ParamData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ParamData
p) (CppHdrCode ParamData -> CppHdrCode TypeData
forall (r :: * -> *). ParamElim r => r ParamData -> r TypeData
parameterType (CppHdrCode ParamData -> CppHdrCode TypeData)
-> CppHdrCode ParamData -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ParamData -> CppHdrCode ParamData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ParamData
p)
  parameter :: p CppSrcCode CppHdrCode ParamData -> Doc
parameter p CppSrcCode CppHdrCode ParamData
p = CppSrcCode ParamData -> Doc
forall (r :: * -> *). ParamElim r => r ParamData -> Doc
RC.parameter (CppSrcCode ParamData -> Doc) -> CppSrcCode ParamData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ParamData -> CppSrcCode ParamData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ParamData
p

instance (Pair p) => MethodSym (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) (Doc, Terminator) MethodData where
  docMain :: MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
docMain = (SrcState MethodState Doc -> SrcState MethodState MethodData)
-> (HdrState MethodState Doc -> HdrState MethodState MethodData)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState MethodState Doc -> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
MS (r Doc) -> MS (r md)
docMain HdrState MethodState Doc -> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
MS (r Doc) -> MS (r md)
docMain
  function :: ClassName
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
function ClassName
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s VS (p CppSrcCode CppHdrCode TypeData)
t = (State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState MethodState ParamData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> PairState MethodState p TypeData
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> PairState u p a
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pairValListVal
    (ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
ClassName
-> r vis
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
function ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s)) (ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
ClassName
-> r vis
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
function ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode TypeData)
-> PairState MethodState p TypeData
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode TypeData)
t)
  mainFunction :: MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
mainFunction = (SrcState MethodState Doc -> SrcState MethodState MethodData)
-> (HdrState MethodState Doc -> HdrState MethodState MethodData)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState MethodState Doc -> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
MS (r Doc) -> MS (r md)
mainFunction HdrState MethodState Doc -> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
MS (r Doc) -> MS (r md)
mainFunction
  docFunc :: ClassName
-> [ClassName]
-> Maybe ClassName
-> MS (p CppSrcCode CppHdrCode MethodData)
-> MS (p CppSrcCode CppHdrCode MethodData)
docFunc ClassName
desc [ClassName]
pComms Maybe ClassName
rComm = (SrcState MethodState MethodData
 -> SrcState MethodState MethodData)
-> (HdrState MethodState MethodData
    -> HdrState MethodState MethodData)
-> MS (p CppSrcCode CppHdrCode MethodData)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (ClassName
-> [ClassName]
-> Maybe ClassName
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
ClassName
-> [ClassName] -> Maybe ClassName -> MS (r md) -> MS (r md)
docFunc ClassName
desc [ClassName]
pComms Maybe ClassName
rComm)
    (ClassName
-> [ClassName]
-> Maybe ClassName
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
ClassName
-> [ClassName] -> Maybe ClassName -> MS (r md) -> MS (r md)
docFunc ClassName
desc [ClassName]
pComms Maybe ClassName
rComm)

  inOutFunc :: ClassName
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> InOutFunc (p CppSrcCode CppHdrCode) MethodData
inOutFunc ClassName
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s [SVariable (p CppSrcCode CppHdrCode)]
is [SVariable (p CppSrcCode CppHdrCode)]
os [SVariable (p CppSrcCode CppHdrCode)]
bs = ([SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
([SrcState r a]
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> ([HdrState r a]
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> [PairState v p a]
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pair3Lists1Val
    (ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
ClassName -> r vis -> InOutFunc r md
inOutFunc ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s)) (ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
ClassName -> r vis -> InOutFunc r md
inOutFunc ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s))
    ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
is) ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
os)
    ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
bs)
  docInOutFunc :: ClassName
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> DocInOutFunc (p CppSrcCode CppHdrCode) MethodData
docInOutFunc ClassName
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s ClassName
desc [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
is [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
os [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
bs = ([SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
([SrcState r a]
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> ([HdrState r a]
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> [PairState v p a]
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pair3Lists1Val
    (\[SrcState ValueState Variable]
ins [SrcState ValueState Variable]
outs [SrcState ValueState Variable]
both -> ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> DocInOutFunc CppSrcCode MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
ClassName -> r vis -> DocInOutFunc r md
docInOutFunc ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) ClassName
desc ([ClassName]
-> [SrcState ValueState Variable]
-> [(ClassName, SrcState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName
forall a b. (a, b) -> a
fst
      [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
is) [SrcState ValueState Variable]
ins) ([ClassName]
-> [SrcState ValueState Variable]
-> [(ClassName, SrcState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName
forall a b. (a, b) -> a
fst [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
os) [SrcState ValueState Variable]
outs) ([ClassName]
-> [SrcState ValueState Variable]
-> [(ClassName, SrcState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName
forall a b. (a, b) -> a
fst [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
bs) [SrcState ValueState Variable]
both))
    (\[HdrState ValueState Variable]
ins [HdrState ValueState Variable]
outs [HdrState ValueState Variable]
both -> ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> DocInOutFunc CppHdrCode MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
ClassName -> r vis -> DocInOutFunc r md
docInOutFunc ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) ClassName
desc ([ClassName]
-> [HdrState ValueState Variable]
-> [(ClassName, HdrState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName
forall a b. (a, b) -> a
fst
      [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
is) [HdrState ValueState Variable]
ins) ([ClassName]
-> [HdrState ValueState Variable]
-> [(ClassName, HdrState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName
forall a b. (a, b) -> a
fst [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
os) [HdrState ValueState Variable]
outs) ([ClassName]
-> [HdrState ValueState Variable]
-> [(ClassName, HdrState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName
forall a b. (a, b) -> a
fst [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
bs) [HdrState ValueState Variable]
both))
    (((ClassName, SVariable (p CppSrcCode CppHdrCode))
 -> PairState MethodState p Variable)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> ((ClassName, SVariable (p CppSrcCode CppHdrCode))
    -> SVariable (p CppSrcCode CppHdrCode))
-> (ClassName, SVariable (p CppSrcCode CppHdrCode))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ClassName, SVariable (p CppSrcCode CppHdrCode))
-> SVariable (p CppSrcCode CppHdrCode)
forall a b. (a, b) -> b
snd) [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
is) (((ClassName, SVariable (p CppSrcCode CppHdrCode))
 -> PairState MethodState p Variable)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> ((ClassName, SVariable (p CppSrcCode CppHdrCode))
    -> SVariable (p CppSrcCode CppHdrCode))
-> (ClassName, SVariable (p CppSrcCode CppHdrCode))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ClassName, SVariable (p CppSrcCode CppHdrCode))
-> SVariable (p CppSrcCode CppHdrCode)
forall a b. (a, b) -> b
snd) [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
os)
    (((ClassName, SVariable (p CppSrcCode CppHdrCode))
 -> PairState MethodState p Variable)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> ((ClassName, SVariable (p CppSrcCode CppHdrCode))
    -> SVariable (p CppSrcCode CppHdrCode))
-> (ClassName, SVariable (p CppSrcCode CppHdrCode))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ClassName, SVariable (p CppSrcCode CppHdrCode))
-> SVariable (p CppSrcCode CppHdrCode)
forall a b. (a, b) -> b
snd) [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
bs)

instance (Pair p) => OOMethodSym (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) (Doc, Terminator) MethodData AttachmentData where
  method :: ClassName
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
method ClassName
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p VS (p CppSrcCode CppHdrCode TypeData)
t = (State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState MethodState ParamData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> PairState MethodState p TypeData
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> PairState u p a
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pairValListVal
    (ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
ClassName
-> r vis
-> r att
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
method ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p)) (ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
ClassName
-> r vis
-> r att
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
method ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode TypeData)
-> PairState MethodState p TypeData
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode TypeData)
t)
  getMethod :: SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode MethodData)
getMethod = (SrcState ValueState Variable -> SrcState MethodState MethodData)
-> (HdrState ValueState Variable
    -> HdrState MethodState MethodData)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
SVariable r -> MS (r md)
getMethod HdrState ValueState Variable -> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
SVariable r -> MS (r md)
getMethod (PairState MethodState p Variable
 -> MS (p CppSrcCode CppHdrCode MethodData))
-> (SVariable (p CppSrcCode CppHdrCode)
    -> PairState MethodState p Variable)
-> SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS
  setMethod :: SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode MethodData)
setMethod = (SrcState ValueState Variable -> SrcState MethodState MethodData)
-> (HdrState ValueState Variable
    -> HdrState MethodState MethodData)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
SVariable r -> MS (r md)
setMethod HdrState ValueState Variable -> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
SVariable r -> MS (r md)
setMethod (PairState MethodState p Variable
 -> MS (p CppSrcCode CppHdrCode MethodData))
-> (SVariable (p CppSrcCode CppHdrCode)
    -> PairState MethodState p Variable)
-> SVariable (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS
  constructor :: [MS (p CppSrcCode CppHdrCode ParamData)]
-> Initializers (p CppSrcCode CppHdrCode)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
constructor [MS (p CppSrcCode CppHdrCode ParamData)]
ps Initializers (p CppSrcCode CppHdrCode)
is = ([SrcState MethodState ParamData]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Value]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState MethodState ParamData]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Value]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
([SrcState r a]
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> ([HdrState r a]
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> [PairState v p a]
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pair3Lists1Val
    (\[SrcState MethodState ParamData]
pms [SrcState ValueState Variable]
ivars [SrcState ValueState Value]
ivals -> [SrcState MethodState ParamData]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
[MS (r ParamData)] -> Initializers r -> MS (r Doc) -> MS (r md)
constructor [SrcState MethodState ParamData]
pms ([SrcState ValueState Variable]
-> [SrcState ValueState Value]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcState ValueState Variable]
ivars [SrcState ValueState Value]
ivals))
    (\[HdrState MethodState ParamData]
pms [HdrState ValueState Variable]
ivars [HdrState ValueState Value]
ivals -> [HdrState MethodState ParamData]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
[MS (r ParamData)] -> Initializers r -> MS (r Doc) -> MS (r md)
constructor [HdrState MethodState ParamData]
pms ([HdrState ValueState Variable]
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
forall a b. [a] -> [b] -> [(a, b)]
zip [HdrState ValueState Variable]
ivars [HdrState ValueState Value]
ivals))
    [MS (p CppSrcCode CppHdrCode ParamData)]
ps (((SVariable (p CppSrcCode CppHdrCode),
  SValue (p CppSrcCode CppHdrCode))
 -> PairState MethodState p Variable)
-> Initializers (p CppSrcCode CppHdrCode)
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> ((SVariable (p CppSrcCode CppHdrCode),
     SValue (p CppSrcCode CppHdrCode))
    -> SVariable (p CppSrcCode CppHdrCode))
-> (SVariable (p CppSrcCode CppHdrCode),
    SValue (p CppSrcCode CppHdrCode))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SVariable (p CppSrcCode CppHdrCode),
 SValue (p CppSrcCode CppHdrCode))
-> SVariable (p CppSrcCode CppHdrCode)
forall a b. (a, b) -> a
fst) Initializers (p CppSrcCode CppHdrCode)
is) (((SVariable (p CppSrcCode CppHdrCode),
  SValue (p CppSrcCode CppHdrCode))
 -> PairState MethodState p Value)
-> Initializers (p CppSrcCode CppHdrCode)
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> SValue (p CppSrcCode CppHdrCode)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (SValue (p CppSrcCode CppHdrCode) -> PairState MethodState p Value)
-> ((SVariable (p CppSrcCode CppHdrCode),
     SValue (p CppSrcCode CppHdrCode))
    -> SValue (p CppSrcCode CppHdrCode))
-> (SVariable (p CppSrcCode CppHdrCode),
    SValue (p CppSrcCode CppHdrCode))
-> PairState MethodState p Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SVariable (p CppSrcCode CppHdrCode),
 SValue (p CppSrcCode CppHdrCode))
-> SValue (p CppSrcCode CppHdrCode)
forall a b. (a, b) -> b
snd) Initializers (p CppSrcCode CppHdrCode)
is)

  inOutMethod :: ClassName
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> InOutFunc (p CppSrcCode CppHdrCode) MethodData
inOutMethod ClassName
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p [SVariable (p CppSrcCode CppHdrCode)]
is [SVariable (p CppSrcCode CppHdrCode)]
os [SVariable (p CppSrcCode CppHdrCode)]
bs = ([SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
([SrcState r a]
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> ([HdrState r a]
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> [PairState v p a]
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pair3Lists1Val
    (ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
ClassName -> r vis -> r att -> InOutFunc r md
inOutMethod ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p)) (ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
ClassName -> r vis -> r att -> InOutFunc r md
inOutMethod ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p))
    ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
is) ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
os)
    ((SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SVariable (p CppSrcCode CppHdrCode)]
bs)
  docInOutMethod :: ClassName
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> DocInOutFunc (p CppSrcCode CppHdrCode) MethodData
docInOutMethod ClassName
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p ClassName
desc [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
is [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
os [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
bs = ([SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
([SrcState r a]
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> ([HdrState r a]
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> [PairState v p a]
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pair3Lists1Val
    (\[SrcState ValueState Variable]
ins [SrcState ValueState Variable]
outs [SrcState ValueState Variable]
both -> ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> DocInOutFunc CppSrcCode MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
ClassName -> r vis -> r att -> DocInOutFunc r md
docInOutMethod ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p) ClassName
desc ([ClassName]
-> [SrcState ValueState Variable]
-> [(ClassName, SrcState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName
forall a b. (a, b) -> a
fst
      [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
is) [SrcState ValueState Variable]
ins) ([ClassName]
-> [SrcState ValueState Variable]
-> [(ClassName, SrcState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName
forall a b. (a, b) -> a
fst [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
os) [SrcState ValueState Variable]
outs) ([ClassName]
-> [SrcState ValueState Variable]
-> [(ClassName, SrcState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName
forall a b. (a, b) -> a
fst [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
bs) [SrcState ValueState Variable]
both))
    (\[HdrState ValueState Variable]
ins [HdrState ValueState Variable]
outs [HdrState ValueState Variable]
both -> ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> DocInOutFunc CppHdrCode MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
ClassName -> r vis -> r att -> DocInOutFunc r md
docInOutMethod ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p) ClassName
desc ([ClassName]
-> [HdrState ValueState Variable]
-> [(ClassName, HdrState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName
forall a b. (a, b) -> a
fst
      [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
is) [HdrState ValueState Variable]
ins) ([ClassName]
-> [HdrState ValueState Variable]
-> [(ClassName, HdrState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName
forall a b. (a, b) -> a
fst [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
os) [HdrState ValueState Variable]
outs) ([ClassName]
-> [HdrState ValueState Variable]
-> [(ClassName, HdrState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [ClassName]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName, SVariable (p CppSrcCode CppHdrCode)) -> ClassName
forall a b. (a, b) -> a
fst [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
bs) [HdrState ValueState Variable]
both))
    (((ClassName, SVariable (p CppSrcCode CppHdrCode))
 -> PairState MethodState p Variable)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> ((ClassName, SVariable (p CppSrcCode CppHdrCode))
    -> SVariable (p CppSrcCode CppHdrCode))
-> (ClassName, SVariable (p CppSrcCode CppHdrCode))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ClassName, SVariable (p CppSrcCode CppHdrCode))
-> SVariable (p CppSrcCode CppHdrCode)
forall a b. (a, b) -> b
snd) [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
is) (((ClassName, SVariable (p CppSrcCode CppHdrCode))
 -> PairState MethodState p Variable)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> ((ClassName, SVariable (p CppSrcCode CppHdrCode))
    -> SVariable (p CppSrcCode CppHdrCode))
-> (ClassName, SVariable (p CppSrcCode CppHdrCode))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ClassName, SVariable (p CppSrcCode CppHdrCode))
-> SVariable (p CppSrcCode CppHdrCode)
forall a b. (a, b) -> b
snd) [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
os)
    (((ClassName, SVariable (p CppSrcCode CppHdrCode))
 -> PairState MethodState p Variable)
-> [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
-> [PairState MethodState p Variable]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (SVariable (p CppSrcCode CppHdrCode)
 -> PairState MethodState p Variable)
-> ((ClassName, SVariable (p CppSrcCode CppHdrCode))
    -> SVariable (p CppSrcCode CppHdrCode))
-> (ClassName, SVariable (p CppSrcCode CppHdrCode))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ClassName, SVariable (p CppSrcCode CppHdrCode))
-> SVariable (p CppSrcCode CppHdrCode)
forall a b. (a, b) -> b
snd) [(ClassName, SVariable (p CppSrcCode CppHdrCode))]
bs)

instance (Pair p) => RenderMethod (p CppSrcCode CppHdrCode) MethodData where
  commentedFunc :: MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
-> MS (p CppSrcCode CppHdrCode MethodData)
commentedFunc = (SrcState MethodState Doc
 -> SrcState MethodState MethodData
 -> SrcState MethodState MethodData)
-> (HdrState MethodState Doc
    -> HdrState MethodState MethodData
    -> HdrState MethodState MethodData)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState MethodState Doc
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall (r :: * -> *) md.
RenderMethod r md =>
MS (r Doc) -> MS (r md) -> MS (r md)
commentedFunc HdrState MethodState Doc
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
forall (r :: * -> *) md.
RenderMethod r md =>
MS (r Doc) -> MS (r md) -> MS (r md)
commentedFunc

  mthdFromData :: VisibilityTag -> Doc -> MS (p CppSrcCode CppHdrCode MethodData)
mthdFromData VisibilityTag
s Doc
d = (CppSrcCode MethodData
 -> CppHdrCode MethodData -> p CppSrcCode CppHdrCode MethodData)
-> SrcState MethodState MethodData
-> HdrState MethodState MethodData
-> MS (p CppSrcCode CppHdrCode MethodData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode MethodData
-> CppHdrCode MethodData -> p CppSrcCode CppHdrCode MethodData
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (VisibilityTag -> Doc -> SrcState MethodState MethodData
forall (r :: * -> *) md.
RenderMethod r md =>
VisibilityTag -> Doc -> MS (r md)
mthdFromData VisibilityTag
s Doc
d) (VisibilityTag -> Doc -> HdrState MethodState MethodData
forall (r :: * -> *) md.
RenderMethod r md =>
VisibilityTag -> Doc -> MS (r md)
mthdFromData VisibilityTag
s Doc
d)

instance (Pair p) => OORenderMethod (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) MethodData AttachmentData where
  intMethod :: Bool
-> ClassName
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> MSMthdType (p CppSrcCode CppHdrCode)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
intMethod Bool
m ClassName
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p = (SrcState MethodState TypeData
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> (HdrState MethodState TypeData
    -> [HdrState MethodState ParamData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> MSMthdType (p CppSrcCode CppHdrCode)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> PairState u p a
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pairValListVal
    (Bool
-> ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis md att.
OORenderMethod r vis md att =>
Bool
-> ClassName
-> r vis
-> r att
-> MSMthdType r
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
intMethod Bool
m ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p)) (Bool
-> ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis md att.
OORenderMethod r vis md att =>
Bool
-> ClassName
-> r vis
-> r att
-> MSMthdType r
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
intMethod Bool
m ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p))
  intFunc :: Bool
-> ClassName
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> MSMthdType (p CppSrcCode CppHdrCode)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
intFunc Bool
m ClassName
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p = (SrcState MethodState TypeData
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> (HdrState MethodState TypeData
    -> [HdrState MethodState ParamData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> MSMthdType (p CppSrcCode CppHdrCode)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> PairState u p a
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pairValListVal
    (Bool
-> ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis md att.
OORenderMethod r vis md att =>
Bool
-> ClassName
-> r vis
-> r att
-> MSMthdType r
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
intFunc Bool
m ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p)) (Bool
-> ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis md att.
OORenderMethod r vis md att =>
Bool
-> ClassName
-> r vis
-> r att
-> MSMthdType r
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
intFunc Bool
m ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p))
  destructor :: forall svr.
[CSStateVar (p CppSrcCode CppHdrCode) svr]
-> MS (p CppSrcCode CppHdrCode MethodData)
destructor = ClassName
-> [CSStateVar (p CppSrcCode CppHdrCode) svr]
-> MS (p CppSrcCode CppHdrCode MethodData)
forall a. HasCallStack => ClassName -> a
error (ClassName
 -> [CSStateVar (p CppSrcCode CppHdrCode) svr]
 -> MS (p CppSrcCode CppHdrCode MethodData))
-> ClassName
-> [CSStateVar (p CppSrcCode CppHdrCode) svr]
-> MS (p CppSrcCode CppHdrCode MethodData)
forall a b. (a -> b) -> a -> b
$ ClassName -> ClassName
CP.destructorError ClassName
cppName

instance (Pair p) => MethodElim (p CppSrcCode CppHdrCode) MethodData where
  method :: p CppSrcCode CppHdrCode MethodData -> Doc
method p CppSrcCode CppHdrCode MethodData
m = CppSrcCode MethodData -> Doc
forall (r :: * -> *) md. MethodElim r md => r md -> Doc
RC.method (CppSrcCode MethodData -> Doc) -> CppSrcCode MethodData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode MethodData -> CppSrcCode MethodData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode MethodData
m

instance (Pair p) => StateVarSym (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) StateVarData AttachmentData where
  stateVar :: p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> SVariable (p CppSrcCode CppHdrCode)
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
stateVar p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p = (SrcState ValueState Variable -> SrcState ClassState StateVarData)
-> (HdrState ValueState Variable
    -> HdrState ClassState StateVarData)
-> PairState ClassState p Variable
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> SrcState ClassState StateVarData
forall (r :: * -> *) vis svr att.
StateVarSym r vis svr att =>
r vis -> r att -> SVariable r -> CSStateVar r svr
stateVar (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p)) (CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState ValueState Variable
-> HdrState ClassState StateVarData
forall (r :: * -> *) vis svr att.
StateVarSym r vis svr att =>
r vis -> r att -> SVariable r -> CSStateVar r svr
stateVar (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p))
    (PairState ClassState p Variable
 -> CSStateVar (p CppSrcCode CppHdrCode) StateVarData)
-> (SVariable (p CppSrcCode CppHdrCode)
    -> PairState ClassState p Variable)
-> SVariable (p CppSrcCode CppHdrCode)
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  ClassState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState ClassState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  ClassState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> ClassState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) ClassState
Lens' ClassState ValueState
lensCStoVS
  stateVarDef :: p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
stateVarDef p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p SVariable (p CppSrcCode CppHdrCode)
vr SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState Variable
 -> SrcState ValueState Value -> SrcState ClassState StateVarData)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState ClassState StateVarData)
-> PairState ClassState p Variable
-> PairState ClassState p Value
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2
    (CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ClassState StateVarData
forall (r :: * -> *) vis svr att.
StateVarSym r vis svr att =>
r vis -> r att -> SVariable r -> SValue r -> CSStateVar r svr
stateVarDef (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p))
    (CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ClassState StateVarData
forall (r :: * -> *) vis svr att.
StateVarSym r vis svr att =>
r vis -> r att -> SVariable r -> SValue r -> CSStateVar r svr
stateVarDef (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p)) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  ClassState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState ClassState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  ClassState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> ClassState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) ClassState
Lens' ClassState ValueState
lensCStoVS SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  ClassState
  ValueState
-> SValue (p CppSrcCode CppHdrCode) -> PairState ClassState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  ClassState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> ClassState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) ClassState
Lens' ClassState ValueState
lensCStoVS SValue (p CppSrcCode CppHdrCode)
vl)
  constVar :: p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
constVar p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s SVariable (p CppSrcCode CppHdrCode)
vr SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState Variable
 -> SrcState ValueState Value -> SrcState ClassState StateVarData)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState ClassState StateVarData)
-> PairState ClassState p Variable
-> PairState ClassState p Value
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (CppSrcCode (Doc, VisibilityTag)
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ClassState StateVarData
forall (r :: * -> *) vis svr att.
StateVarSym r vis svr att =>
r vis -> SVariable r -> SValue r -> CSStateVar r svr
constVar (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s)) (CppHdrCode (Doc, VisibilityTag)
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ClassState StateVarData
forall (r :: * -> *) vis svr att.
StateVarSym r vis svr att =>
r vis -> SVariable r -> SValue r -> CSStateVar r svr
constVar (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  ClassState
  ValueState
-> SVariable (p CppSrcCode CppHdrCode)
-> PairState ClassState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  ClassState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> ClassState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) ClassState
Lens' ClassState ValueState
lensCStoVS SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  ClassState
  ValueState
-> SValue (p CppSrcCode CppHdrCode) -> PairState ClassState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  ClassState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> ClassState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) ClassState
Lens' ClassState ValueState
lensCStoVS SValue (p CppSrcCode CppHdrCode)
vl)

instance (Pair p) => StateVarElim (p CppSrcCode CppHdrCode) StateVarData where
  stateVar :: p CppSrcCode CppHdrCode StateVarData -> Doc
stateVar p CppSrcCode CppHdrCode StateVarData
v = CppSrcCode StateVarData -> Doc
forall (r :: * -> *) svr. StateVarElim r svr => r svr -> Doc
RC.stateVar (CppSrcCode StateVarData -> Doc) -> CppSrcCode StateVarData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode StateVarData -> CppSrcCode StateVarData
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode StateVarData
v

instance (Pair p) => ClassSym (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData where
  buildClass :: Maybe ClassName
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> CS (p CppSrcCode CppHdrCode Doc)
buildClass Maybe ClassName
p [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs [MS (p CppSrcCode CppHdrCode MethodData)]
cs [MS (p CppSrcCode CppHdrCode MethodData)]
fs = do
    ClassName
n <- LensLike'
  (Zoomed (StateT FileState Identity) ClassName) ClassState FileState
-> StateT FileState Identity ClassName
-> StateT ClassState Identity ClassName
forall c.
LensLike'
  (Zoomed (StateT FileState Identity) c) ClassState FileState
-> StateT FileState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT FileState Identity) ClassName) ClassState FileState
(FileState -> Focusing Identity ClassName FileState)
-> ClassState -> Focusing Identity ClassName ClassState
Lens' ClassState FileState
lensCStoFS StateT FileState Identity ClassName
getModuleName
    (ClassState -> ClassState) -> StateT ClassState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ClassState -> ClassState
setClassName ClassName
n)
    ([SrcState ClassState StateVarData]
 -> [SrcState MethodState MethodData]
 -> [SrcState MethodState MethodData]
 -> SrcState ClassState Doc)
-> ([HdrState ClassState StateVarData]
    -> [HdrState MethodState MethodData]
    -> [HdrState MethodState MethodData]
    -> HdrState ClassState Doc)
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [PairState ClassState p MethodData]
-> [PairState ClassState p MethodData]
-> CS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists (Maybe ClassName
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall (r :: * -> *) vis smt md svr att.
ClassSym r vis smt md svr att =>
Maybe ClassName
-> [CSStateVar r svr] -> [MS (r md)] -> [MS (r md)] -> CS (r Doc)
buildClass Maybe ClassName
p) (Maybe ClassName
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall (r :: * -> *) vis smt md svr att.
ClassSym r vis smt md svr att =>
Maybe ClassName
-> [CSStateVar r svr] -> [MS (r md)] -> [MS (r md)] -> CS (r Doc)
buildClass Maybe ClassName
p) [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs ((MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS) [MS (p CppSrcCode CppHdrCode MethodData)]
cs)
      ((MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS) [MS (p CppSrcCode CppHdrCode MethodData)]
fs)
  extraClass :: ClassName
-> Maybe ClassName
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> CS (p CppSrcCode CppHdrCode Doc)
extraClass ClassName
n Maybe ClassName
p [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs [MS (p CppSrcCode CppHdrCode MethodData)]
cs [MS (p CppSrcCode CppHdrCode MethodData)]
fs = (ClassState -> ClassState) -> StateT ClassState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ClassState -> ClassState
setClassName ClassName
n) StateT ClassState Identity ()
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
forall a b.
StateT ClassState Identity a
-> StateT ClassState Identity b -> StateT ClassState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ([SrcState ClassState StateVarData]
 -> [SrcState MethodState MethodData]
 -> [SrcState MethodState MethodData]
 -> SrcState ClassState Doc)
-> ([HdrState ClassState StateVarData]
    -> [HdrState MethodState MethodData]
    -> [HdrState MethodState MethodData]
    -> HdrState ClassState Doc)
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [PairState ClassState p MethodData]
-> [PairState ClassState p MethodData]
-> CS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists
    (ClassName
-> Maybe ClassName
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall (r :: * -> *) vis smt md svr att.
ClassSym r vis smt md svr att =>
ClassName
-> Maybe ClassName
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Doc)
extraClass ClassName
n Maybe ClassName
p) (ClassName
-> Maybe ClassName
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall (r :: * -> *) vis smt md svr att.
ClassSym r vis smt md svr att =>
ClassName
-> Maybe ClassName
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Doc)
extraClass ClassName
n Maybe ClassName
p)
    [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs ((MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS) [MS (p CppSrcCode CppHdrCode MethodData)]
cs) ((MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS) [MS (p CppSrcCode CppHdrCode MethodData)]
fs)
  implementingClass :: ClassName
-> [ClassName]
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> CS (p CppSrcCode CppHdrCode Doc)
implementingClass ClassName
n [ClassName]
is [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs [MS (p CppSrcCode CppHdrCode MethodData)]
cs [MS (p CppSrcCode CppHdrCode MethodData)]
fs = (ClassState -> ClassState) -> StateT ClassState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ClassState -> ClassState
setClassName ClassName
n) StateT ClassState Identity ()
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
forall a b.
StateT ClassState Identity a
-> StateT ClassState Identity b -> StateT ClassState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ([SrcState ClassState StateVarData]
 -> [SrcState MethodState MethodData]
 -> [SrcState MethodState MethodData]
 -> SrcState ClassState Doc)
-> ([HdrState ClassState StateVarData]
    -> [HdrState MethodState MethodData]
    -> [HdrState MethodState MethodData]
    -> HdrState ClassState Doc)
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [PairState ClassState p MethodData]
-> [PairState ClassState p MethodData]
-> CS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists
    (ClassName
-> [ClassName]
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall (r :: * -> *) vis smt md svr att.
ClassSym r vis smt md svr att =>
ClassName
-> [ClassName]
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Doc)
implementingClass ClassName
n [ClassName]
is) (ClassName
-> [ClassName]
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall (r :: * -> *) vis smt md svr att.
ClassSym r vis smt md svr att =>
ClassName
-> [ClassName]
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Doc)
implementingClass ClassName
n [ClassName]
is)
    [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs ((MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS) [MS (p CppSrcCode CppHdrCode MethodData)]
cs) ((MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS) [MS (p CppSrcCode CppHdrCode MethodData)]
fs)

  docClass :: ClassName
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
docClass ClassName
d = (SrcState ClassState Doc -> SrcState ClassState Doc)
-> (HdrState ClassState Doc -> HdrState ClassState Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (ClassName -> SrcState ClassState Doc -> SrcState ClassState Doc
forall (r :: * -> *) vis smt md svr att.
ClassSym r vis smt md svr att =>
ClassName -> CS (r Doc) -> CS (r Doc)
docClass ClassName
d) (ClassName -> HdrState ClassState Doc -> HdrState ClassState Doc
forall (r :: * -> *) vis smt md svr att.
ClassSym r vis smt md svr att =>
ClassName -> CS (r Doc) -> CS (r Doc)
docClass ClassName
d)

instance (Pair p) => RenderClass (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) MethodData StateVarData where
  intClass :: ClassName
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode Doc
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> CS (p CppSrcCode CppHdrCode Doc)
intClass ClassName
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode Doc
i [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs [MS (p CppSrcCode CppHdrCode MethodData)]
cs [MS (p CppSrcCode CppHdrCode MethodData)]
fs = ([SrcState ClassState StateVarData]
 -> [SrcState MethodState MethodData]
 -> [SrcState MethodState MethodData]
 -> SrcState ClassState Doc)
-> ([HdrState ClassState StateVarData]
    -> [HdrState MethodState MethodData]
    -> [HdrState MethodState MethodData]
    -> HdrState ClassState Doc)
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [PairState ClassState p MethodData]
-> [PairState ClassState p MethodData]
-> CS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists
    (ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode Doc
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall (r :: * -> *) vis md svr.
RenderClass r vis md svr =>
ClassName
-> r vis
-> r Doc
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Doc)
intClass ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
i)) (ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode Doc
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall (r :: * -> *) vis md svr.
RenderClass r vis md svr =>
ClassName
-> r vis
-> r Doc
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Doc)
intClass ClassName
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode Doc -> CppHdrCode Doc
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode Doc
i))
    [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs ((MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS) [MS (p CppSrcCode CppHdrCode MethodData)]
cs) ((MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS) [MS (p CppSrcCode CppHdrCode MethodData)]
fs)

  inherit :: Maybe ClassName -> p CppSrcCode CppHdrCode Doc
inherit Maybe ClassName
n = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Maybe ClassName -> CppSrcCode Doc
forall (r :: * -> *) vis md svr.
RenderClass r vis md svr =>
Maybe ClassName -> r Doc
inherit Maybe ClassName
n) (Maybe ClassName -> CppHdrCode Doc
forall (r :: * -> *) vis md svr.
RenderClass r vis md svr =>
Maybe ClassName -> r Doc
inherit Maybe ClassName
n)
  implements :: [ClassName] -> p CppSrcCode CppHdrCode Doc
implements [ClassName]
is = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair ([ClassName] -> CppSrcCode Doc
forall (r :: * -> *) vis md svr.
RenderClass r vis md svr =>
[ClassName] -> r Doc
implements [ClassName]
is) ([ClassName] -> CppHdrCode Doc
forall (r :: * -> *) vis md svr.
RenderClass r vis md svr =>
[ClassName] -> r Doc
implements [ClassName]
is)

  commentedClass :: CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
commentedClass = (SrcState ClassState Doc
 -> SrcState ClassState Doc -> SrcState ClassState Doc)
-> (HdrState ClassState Doc
    -> HdrState ClassState Doc -> HdrState ClassState Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ClassState Doc
-> SrcState ClassState Doc -> SrcState ClassState Doc
forall (r :: * -> *) vis md svr.
RenderClass r vis md svr =>
CS (r Doc) -> CS (r Doc) -> CS (r Doc)
commentedClass HdrState ClassState Doc
-> HdrState ClassState Doc -> HdrState ClassState Doc
forall (r :: * -> *) vis md svr.
RenderClass r vis md svr =>
CS (r Doc) -> CS (r Doc) -> CS (r Doc)
commentedClass

instance (Pair p) => ClassElim (p CppSrcCode CppHdrCode) where
  class' :: p CppSrcCode CppHdrCode Doc -> Doc
class' p CppSrcCode CppHdrCode Doc
c = CppSrcCode Doc -> Doc
forall (r :: * -> *). ClassElim r => r Doc -> Doc
RC.class' (CppSrcCode Doc -> Doc) -> CppSrcCode Doc -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
c

instance (Pair p) => ModuleSym (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData where
  buildModule :: ClassName
-> [ClassName]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [CS (p CppSrcCode CppHdrCode Doc)]
-> FS (p CppSrcCode CppHdrCode Module)
buildModule ClassName
n [ClassName]
is [MS (p CppSrcCode CppHdrCode MethodData)]
ms [CS (p CppSrcCode CppHdrCode Doc)]
cs = do
    (FileState -> FileState) -> StateT FileState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> FileState -> FileState
setModuleName ClassName
n)
    ([SrcState MethodState MethodData]
 -> [SrcState ClassState Doc] -> SrcState FileState Module)
-> ([HdrState MethodState MethodData]
    -> [HdrState ClassState Doc] -> HdrState FileState Module)
-> [PairState FileState p MethodData]
-> [PairState FileState p Doc]
-> FS (p CppSrcCode CppHdrCode Module)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c)
-> ([HdrState r a] -> [HdrState s b] -> HdrState t c)
-> [PairState t p a]
-> [PairState t p b]
-> PairState t p c
pair2Lists (ClassName
-> [ClassName]
-> [SrcState MethodState MethodData]
-> [SrcState ClassState Doc]
-> SrcState FileState Module
forall (r :: * -> *) vis smt md svr att.
ModuleSym r vis smt md svr att =>
ClassName
-> [ClassName] -> [MS (r md)] -> [CS (r Doc)] -> FS (r Module)
buildModule ClassName
n [ClassName]
is) (ClassName
-> [ClassName]
-> [HdrState MethodState MethodData]
-> [HdrState ClassState Doc]
-> HdrState FileState Module
forall (r :: * -> *) vis smt md svr att.
ModuleSym r vis smt md svr att =>
ClassName
-> [ClassName] -> [MS (r md)] -> [CS (r Doc)] -> FS (r Module)
buildModule ClassName
n [ClassName]
is)
      ((MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState FileState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState FileState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  FileState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState FileState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) FileState MethodState
-> StateT MethodState Identity c -> StateT FileState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  FileState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> FileState
-> Focusing Identity (p CppSrcCode CppHdrCode MethodData) FileState
Lens' FileState MethodState
lensFStoMS) [MS (p CppSrcCode CppHdrCode MethodData)]
ms) ((CS (p CppSrcCode CppHdrCode Doc) -> PairState FileState p Doc)
-> [CS (p CppSrcCode CppHdrCode Doc)]
-> [PairState FileState p Doc]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed (StateT ClassState Identity) (p CppSrcCode CppHdrCode Doc))
  FileState
  ClassState
-> CS (p CppSrcCode CppHdrCode Doc) -> PairState FileState p Doc
forall c.
LensLike'
  (Zoomed (StateT ClassState Identity) c) FileState ClassState
-> StateT ClassState Identity c -> StateT FileState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ClassState Identity) (p CppSrcCode CppHdrCode Doc))
  FileState
  ClassState
(ClassState
 -> Focusing Identity (p CppSrcCode CppHdrCode Doc) ClassState)
-> FileState
-> Focusing Identity (p CppSrcCode CppHdrCode Doc) FileState
Lens' FileState ClassState
lensFStoCS) [CS (p CppSrcCode CppHdrCode Doc)]
cs)

instance (Pair p) => RenderMod (p CppSrcCode CppHdrCode) where
  modFromData :: ClassName -> FS Doc -> FS (p CppSrcCode CppHdrCode Module)
modFromData ClassName
n FS Doc
d = (CppSrcCode Module
 -> CppHdrCode Module -> p CppSrcCode CppHdrCode Module)
-> SrcState FileState Module
-> HdrState FileState Module
-> FS (p CppSrcCode CppHdrCode Module)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Module
-> CppHdrCode Module -> p CppSrcCode CppHdrCode Module
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (ClassName -> FS Doc -> SrcState FileState Module
forall (r :: * -> *).
RenderMod r =>
ClassName -> FS Doc -> FS (r Module)
modFromData ClassName
n FS Doc
d) (ClassName -> FS Doc -> HdrState FileState Module
forall (r :: * -> *).
RenderMod r =>
ClassName -> FS Doc -> FS (r Module)
modFromData ClassName
n FS Doc
d)
  updateModuleDoc :: (Doc -> Doc)
-> p CppSrcCode CppHdrCode Module -> p CppSrcCode CppHdrCode Module
updateModuleDoc Doc -> Doc
f p CppSrcCode CppHdrCode Module
m = CppSrcCode Module
-> CppHdrCode Module -> p CppSrcCode CppHdrCode Module
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair
    ((Doc -> Doc) -> CppSrcCode Module -> CppSrcCode Module
forall (r :: * -> *).
RenderMod r =>
(Doc -> Doc) -> r Module -> r Module
updateModuleDoc Doc -> Doc
f (CppSrcCode Module -> CppSrcCode Module)
-> CppSrcCode Module -> CppSrcCode Module
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Module -> CppSrcCode Module
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Module
m) ((Doc -> Doc) -> CppHdrCode Module -> CppHdrCode Module
forall (r :: * -> *).
RenderMod r =>
(Doc -> Doc) -> r Module -> r Module
updateModuleDoc Doc -> Doc
f (CppHdrCode Module -> CppHdrCode Module)
-> CppHdrCode Module -> CppHdrCode Module
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Module -> CppHdrCode Module
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode Module
m)

instance (Pair p) => ModuleElim (p CppSrcCode CppHdrCode) where
  module' :: p CppSrcCode CppHdrCode Module -> Doc
module' p CppSrcCode CppHdrCode Module
m = CppSrcCode Module -> Doc
forall (r :: * -> *). ModuleElim r => r Module -> Doc
RC.module' (CppSrcCode Module -> Doc) -> CppSrcCode Module -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Module -> CppSrcCode Module
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Module
m

instance (Pair p) => BlockCommentSym (p CppSrcCode CppHdrCode) where
  blockComment :: [ClassName] -> p CppSrcCode CppHdrCode Doc
blockComment [ClassName]
lns = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair ([ClassName] -> CppSrcCode Doc
forall (r :: * -> *). BlockCommentSym r => [ClassName] -> r Doc
blockComment [ClassName]
lns) ([ClassName] -> CppHdrCode Doc
forall (r :: * -> *). BlockCommentSym r => [ClassName] -> r Doc
blockComment [ClassName]
lns)
  docComment :: forall a.
State a [ClassName] -> State a (p CppSrcCode CppHdrCode Doc)
docComment State a [ClassName]
lns = (CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc)
-> State a (CppSrcCode Doc)
-> State a (CppHdrCode Doc)
-> State a (p CppSrcCode CppHdrCode Doc)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (State a [ClassName] -> State a (CppSrcCode Doc)
forall a. State a [ClassName] -> State a (CppSrcCode Doc)
forall (r :: * -> *) a.
BlockCommentSym r =>
State a [ClassName] -> State a (r Doc)
docComment State a [ClassName]
lns) (State a [ClassName] -> State a (CppHdrCode Doc)
forall a. State a [ClassName] -> State a (CppHdrCode Doc)
forall (r :: * -> *) a.
BlockCommentSym r =>
State a [ClassName] -> State a (r Doc)
docComment State a [ClassName]
lns)

instance (Pair p) => BlockCommentElim (p CppSrcCode CppHdrCode) where
  blockComment' :: p CppSrcCode CppHdrCode Doc -> Doc
blockComment' p CppSrcCode CppHdrCode Doc
c = CppSrcCode Doc -> Doc
forall (r :: * -> *). BlockCommentElim r => r Doc -> Doc
RC.blockComment' (CppSrcCode Doc -> Doc) -> CppSrcCode Doc -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
c

-- Helpers for pair instance

type SrcState s a = State s (CppSrcCode a)
type HdrState s a = State s (CppHdrCode a)
type PairState s p a = State s (p CppSrcCode CppHdrCode a)

pair1 :: (Pair p) => (SrcState r a -> SrcState s b) -> (HdrState r a ->
  HdrState s b) -> PairState s p a -> PairState s p b
pair1 :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState r a -> SrcState s b
srcf HdrState r a -> HdrState s b
hdrf PairState s p a
stv = do
  p CppSrcCode CppHdrCode a
v <- PairState s p a
stv
  let fp :: SrcState r a
fp = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v
      sp :: HdrState r a
sp = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v
  CppSrcCode b
p1 <- SrcState r a -> SrcState s b
srcf SrcState r a
fp
  CppHdrCode b
p2 <- HdrState r a -> HdrState s b
hdrf HdrState r a
sp
  p CppSrcCode CppHdrCode b -> PairState s p b
forall a. a -> StateT s Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (p CppSrcCode CppHdrCode b -> PairState s p b)
-> p CppSrcCode CppHdrCode b -> PairState s p b
forall a b. (a -> b) -> a -> b
$ CppSrcCode b -> CppHdrCode b -> p CppSrcCode CppHdrCode b
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode b
p1 CppHdrCode b
p2

pair2 :: (Pair p) => (SrcState r a -> SrcState s b -> SrcState t c) ->
  (HdrState r a -> HdrState s b -> HdrState t c) -> PairState t p a ->
  PairState t p b -> PairState t p c
pair2 :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState r a -> SrcState s b -> SrcState t c
srcf HdrState r a -> HdrState s b -> HdrState t c
hdrf PairState t p a
stv1 PairState t p b
stv2 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState t p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  (SrcState s b -> SrcState t c)
-> (HdrState s b -> HdrState t c)
-> PairState t p b
-> PairState t p c
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (SrcState r a -> SrcState s b -> SrcState t c
srcf SrcState r a
fv1) (HdrState r a -> HdrState s b -> HdrState t c
hdrf HdrState r a
sv1) PairState t p b
stv2

pair3 :: (Pair p) => (SrcState r a -> SrcState s b -> SrcState t c ->
  SrcState u d) -> (HdrState r a -> HdrState s b -> HdrState t c ->
  HdrState u d) -> PairState u p a -> PairState u p b -> PairState u p c ->
  PairState u p d
pair3 :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d
srcf HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d
hdrf PairState u p a
stv1 PairState u p b
stv2 PairState u p c
stv3 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState u p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  (SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p b
-> PairState u p c
-> PairState u p d
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d
srcf SrcState r a
fv1) (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d
hdrf HdrState r a
sv1) PairState u p b
stv2 PairState u p c
stv3

pair4 :: (Pair p) => (SrcState r a -> SrcState s b -> SrcState t c ->
  SrcState u d -> SrcState v e) -> (HdrState r a -> HdrState s b -> HdrState t c
  -> HdrState u d -> HdrState v e) -> PairState v p a -> PairState v p b ->
  PairState v p c -> PairState v p d -> PairState v p e
pair4 :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> SrcState s b -> SrcState t c -> SrcState u d -> SrcState v e)
-> (HdrState r a
    -> HdrState s b -> HdrState t c -> HdrState u d -> HdrState v e)
-> PairState v p a
-> PairState v p b
-> PairState v p c
-> PairState v p d
-> PairState v p e
pair4 SrcState r a
-> SrcState s b -> SrcState t c -> SrcState u d -> SrcState v e
srcf HdrState r a
-> HdrState s b -> HdrState t c -> HdrState u d -> HdrState v e
hdrf PairState v p a
stv1 PairState v p b
stv2 PairState v p c
stv3 PairState v p d
stv4 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState v p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  (SrcState s b -> SrcState t c -> SrcState u d -> SrcState v e)
-> (HdrState s b -> HdrState t c -> HdrState u d -> HdrState v e)
-> PairState v p b
-> PairState v p c
-> PairState v p d
-> PairState v p e
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 (SrcState r a
-> SrcState s b -> SrcState t c -> SrcState u d -> SrcState v e
srcf SrcState r a
fv1) (HdrState r a
-> HdrState s b -> HdrState t c -> HdrState u d -> HdrState v e
hdrf HdrState r a
sv1) PairState v p b
stv2 PairState v p c
stv3 PairState v p d
stv4

pair5 :: (Pair p) => (SrcState r a -> SrcState s b -> SrcState t c ->
  SrcState u d -> SrcState v e -> SrcState w f) -> (HdrState r a -> HdrState s b
  -> HdrState t c -> HdrState u d -> HdrState v e -> HdrState w f) ->
  PairState w p a -> PairState w p b -> PairState w p c -> PairState w p d ->
  PairState w p e -> PairState w p f
pair5 :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e w
       f.
Pair p =>
(SrcState r a
 -> SrcState s b
 -> SrcState t c
 -> SrcState u d
 -> SrcState v e
 -> SrcState w f)
-> (HdrState r a
    -> HdrState s b
    -> HdrState t c
    -> HdrState u d
    -> HdrState v e
    -> HdrState w f)
-> PairState w p a
-> PairState w p b
-> PairState w p c
-> PairState w p d
-> PairState w p e
-> PairState w p f
pair5 SrcState r a
-> SrcState s b
-> SrcState t c
-> SrcState u d
-> SrcState v e
-> SrcState w f
srcf HdrState r a
-> HdrState s b
-> HdrState t c
-> HdrState u d
-> HdrState v e
-> HdrState w f
hdrf PairState w p a
stv1 PairState w p b
stv2 PairState w p c
stv3 PairState w p d
stv4 PairState w p e
stv5 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState w p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  (SrcState s b
 -> SrcState t c -> SrcState u d -> SrcState v e -> SrcState w f)
-> (HdrState s b
    -> HdrState t c -> HdrState u d -> HdrState v e -> HdrState w f)
-> PairState w p b
-> PairState w p c
-> PairState w p d
-> PairState w p e
-> PairState w p f
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> SrcState s b -> SrcState t c -> SrcState u d -> SrcState v e)
-> (HdrState r a
    -> HdrState s b -> HdrState t c -> HdrState u d -> HdrState v e)
-> PairState v p a
-> PairState v p b
-> PairState v p c
-> PairState v p d
-> PairState v p e
pair4 (SrcState r a
-> SrcState s b
-> SrcState t c
-> SrcState u d
-> SrcState v e
-> SrcState w f
srcf SrcState r a
fv1) (HdrState r a
-> HdrState s b
-> HdrState t c
-> HdrState u d
-> HdrState v e
-> HdrState w f
hdrf HdrState r a
sv1) PairState w p b
stv2 PairState w p c
stv3 PairState w p d
stv4 PairState w p e
stv5

pair1List :: (Pair p) => ([SrcState r a] -> SrcState s b) -> ([HdrState r a] ->
  HdrState s b) -> [PairState s p a] -> PairState s p b
pair1List :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState r a] -> SrcState s b
srcf [HdrState r a] -> HdrState s b
hdrf [PairState s p a]
stv = do
  [p CppSrcCode CppHdrCode a]
v <- [PairState s p a] -> StateT s Identity [p CppSrcCode CppHdrCode a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState s p a]
stv
  let fl :: [SrcState r a]
fl = (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a)
-> (p CppSrcCode CppHdrCode a -> CppSrcCode a)
-> p CppSrcCode CppHdrCode a
-> SrcState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode a]
v
      sl :: [HdrState r a]
sl = (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a)
-> (p CppSrcCode CppHdrCode a -> CppHdrCode a)
-> p CppSrcCode CppHdrCode a
-> HdrState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode a]
v
  CppSrcCode b
p1 <- [SrcState r a] -> SrcState s b
srcf [SrcState r a]
fl
  CppHdrCode b
p2 <- [HdrState r a] -> HdrState s b
hdrf [HdrState r a]
sl
  p CppSrcCode CppHdrCode b -> PairState s p b
forall a. a -> StateT s Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (p CppSrcCode CppHdrCode b -> PairState s p b)
-> p CppSrcCode CppHdrCode b -> PairState s p b
forall a b. (a -> b) -> a -> b
$ CppSrcCode b -> CppHdrCode b -> p CppSrcCode CppHdrCode b
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode b
p1 CppHdrCode b
p2

pair2Lists :: (Pair p) => ([SrcState r a] -> [SrcState s b] -> SrcState t c) ->
  ([HdrState r a] -> [HdrState s b] -> HdrState t c) -> [PairState t p a] ->
  [PairState t p b] -> PairState t p c
pair2Lists :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c)
-> ([HdrState r a] -> [HdrState s b] -> HdrState t c)
-> [PairState t p a]
-> [PairState t p b]
-> PairState t p c
pair2Lists [SrcState r a] -> [SrcState s b] -> SrcState t c
srcf [HdrState r a] -> [HdrState s b] -> HdrState t c
hdrf [PairState t p a]
stv1 [PairState t p b]
stv2 = do
  [p CppSrcCode CppHdrCode a]
v1 <- [PairState t p a] -> StateT t Identity [p CppSrcCode CppHdrCode a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState t p a]
stv1
  let fl1 :: [SrcState r a]
fl1 = (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a)
-> (p CppSrcCode CppHdrCode a -> CppSrcCode a)
-> p CppSrcCode CppHdrCode a
-> SrcState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode a]
v1
      sl1 :: [HdrState r a]
sl1 = (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a)
-> (p CppSrcCode CppHdrCode a -> CppHdrCode a)
-> p CppSrcCode CppHdrCode a
-> HdrState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode a]
v1
  ([SrcState s b] -> SrcState t c)
-> ([HdrState s b] -> HdrState t c)
-> [PairState t p b]
-> PairState t p c
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List ([SrcState r a] -> [SrcState s b] -> SrcState t c
srcf [SrcState r a]
fl1) ([HdrState r a] -> [HdrState s b] -> HdrState t c
hdrf [HdrState r a]
sl1) [PairState t p b]
stv2

pair3Lists :: (Pair p) => ([SrcState r a] -> [SrcState s b] -> [SrcState t c] ->
  SrcState u d) -> ([HdrState r a] -> [HdrState s b] -> [HdrState t c] ->
  HdrState u d) -> [PairState u p a] -> [PairState u p b] -> [PairState u p c]
  -> PairState u p d
pair3Lists :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists [SrcState r a] -> [SrcState s b] -> [SrcState t c] -> SrcState u d
srcf [HdrState r a] -> [HdrState s b] -> [HdrState t c] -> HdrState u d
hdrf [PairState u p a]
stv1 [PairState u p b]
stv2 [PairState u p c]
stv3 = do
  [p CppSrcCode CppHdrCode a]
v1 <- [PairState u p a] -> StateT u Identity [p CppSrcCode CppHdrCode a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState u p a]
stv1
  let fl1 :: [SrcState r a]
fl1 = (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a)
-> (p CppSrcCode CppHdrCode a -> CppSrcCode a)
-> p CppSrcCode CppHdrCode a
-> SrcState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode a]
v1
      sl1 :: [HdrState r a]
sl1 = (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a)
-> (p CppSrcCode CppHdrCode a -> CppHdrCode a)
-> p CppSrcCode CppHdrCode a
-> HdrState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode a]
v1
  ([SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c)
-> ([HdrState r a] -> [HdrState s b] -> HdrState t c)
-> [PairState t p a]
-> [PairState t p b]
-> PairState t p c
pair2Lists ([SrcState r a] -> [SrcState s b] -> [SrcState t c] -> SrcState u d
srcf [SrcState r a]
fl1) ([HdrState r a] -> [HdrState s b] -> [HdrState t c] -> HdrState u d
hdrf [HdrState r a]
sl1) [PairState u p b]
stv2 [PairState u p c]
stv3

pair1List1Val :: (Pair p) => ([SrcState r a] -> SrcState s b -> SrcState t c) ->
  ([HdrState r a] -> HdrState s b -> HdrState t c) -> [PairState t p a] ->
  PairState t p b -> PairState t p c
pair1List1Val :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> SrcState s b -> SrcState t c)
-> ([HdrState r a] -> HdrState s b -> HdrState t c)
-> [PairState t p a]
-> PairState t p b
-> PairState t p c
pair1List1Val [SrcState r a] -> SrcState s b -> SrcState t c
srcf [HdrState r a] -> HdrState s b -> HdrState t c
hdrf [PairState t p a]
stv1 PairState t p b
stv2 = do
  [p CppSrcCode CppHdrCode a]
v1 <- [PairState t p a] -> StateT t Identity [p CppSrcCode CppHdrCode a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState t p a]
stv1
  let fl1 :: [SrcState r a]
fl1 = (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a)
-> (p CppSrcCode CppHdrCode a -> CppSrcCode a)
-> p CppSrcCode CppHdrCode a
-> SrcState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode a]
v1
      sl1 :: [HdrState r a]
sl1 = (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a)
-> (p CppSrcCode CppHdrCode a -> CppHdrCode a)
-> p CppSrcCode CppHdrCode a
-> HdrState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode a]
v1
  (SrcState s b -> SrcState t c)
-> (HdrState s b -> HdrState t c)
-> PairState t p b
-> PairState t p c
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 ([SrcState r a] -> SrcState s b -> SrcState t c
srcf [SrcState r a]
fl1) ([HdrState r a] -> HdrState s b -> HdrState t c
hdrf [HdrState r a]
sl1) PairState t p b
stv2

pair1Val1List :: (Pair p) => (SrcState r a -> [SrcState s b] -> SrcState t c) ->
  (HdrState r a -> [HdrState s b] -> HdrState t c) -> PairState t p a ->
  [PairState t p b] -> PairState t p c
pair1Val1List :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List SrcState r a -> [SrcState s b] -> SrcState t c
srcf HdrState r a -> [HdrState s b] -> HdrState t c
hdrf PairState t p a
stv1 [PairState t p b]
stv2 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState t p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  ([SrcState s b] -> SrcState t c)
-> ([HdrState s b] -> HdrState t c)
-> [PairState t p b]
-> PairState t p c
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List (SrcState r a -> [SrcState s b] -> SrcState t c
srcf SrcState r a
fv1) (HdrState r a -> [HdrState s b] -> HdrState t c
hdrf HdrState r a
sv1) [PairState t p b]
stv2

pair2Lists1Val :: (Pair p) => ([SrcState r a] -> [SrcState s b] -> SrcState t c
  -> SrcState u d) -> ([HdrState r a] -> [HdrState s b] -> HdrState t c ->
  HdrState u d) -> [PairState u p a] -> [PairState u p b] -> PairState u p c ->
  PairState u p d
pair2Lists1Val :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pair2Lists1Val [SrcState r a] -> [SrcState s b] -> SrcState t c -> SrcState u d
srcf [HdrState r a] -> [HdrState s b] -> HdrState t c -> HdrState u d
hdrf [PairState u p a]
stv1 [PairState u p b]
stv2 PairState u p c
stv3 = do
  [p CppSrcCode CppHdrCode a]
v1 <- [PairState u p a] -> StateT u Identity [p CppSrcCode CppHdrCode a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState u p a]
stv1
  let fl1 :: [SrcState r a]
fl1 = (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a)
-> (p CppSrcCode CppHdrCode a -> CppSrcCode a)
-> p CppSrcCode CppHdrCode a
-> SrcState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode a]
v1
      sl1 :: [HdrState r a]
sl1 = (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a)
-> (p CppSrcCode CppHdrCode a -> CppHdrCode a)
-> p CppSrcCode CppHdrCode a
-> HdrState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode a]
v1
  ([SrcState s b] -> SrcState t c -> SrcState u d)
-> ([HdrState s b] -> HdrState t c -> HdrState u d)
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> SrcState s b -> SrcState t c)
-> ([HdrState r a] -> HdrState s b -> HdrState t c)
-> [PairState t p a]
-> PairState t p b
-> PairState t p c
pair1List1Val ([SrcState r a] -> [SrcState s b] -> SrcState t c -> SrcState u d
srcf [SrcState r a]
fl1) ([HdrState r a] -> [HdrState s b] -> HdrState t c -> HdrState u d
hdrf [HdrState r a]
sl1) [PairState u p b]
stv2 PairState u p c
stv3

pairValListVal :: (Pair p) => (SrcState r a -> [SrcState s b] -> SrcState t c ->
  SrcState u d) -> (HdrState r a -> [HdrState s b] -> HdrState t c ->
  HdrState u d) -> PairState u p a -> [PairState u p b] -> PairState u p c ->
  PairState u p d
pairValListVal :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> PairState u p a
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pairValListVal SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d
srcf HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d
hdrf PairState u p a
stv1 [PairState u p b]
stv2 PairState u p c
stv3 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState u p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  ([SrcState s b] -> SrcState t c -> SrcState u d)
-> ([HdrState s b] -> HdrState t c -> HdrState u d)
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> SrcState s b -> SrcState t c)
-> ([HdrState r a] -> HdrState s b -> HdrState t c)
-> [PairState t p a]
-> PairState t p b
-> PairState t p c
pair1List1Val (SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d
srcf SrcState r a
fv1) (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d
hdrf HdrState r a
sv1) [PairState u p b]
stv2 PairState u p c
stv3

pair3Lists1Val :: (Pair p) => ([SrcState r a] -> [SrcState s b] ->
  [SrcState t c] -> SrcState u d -> SrcState v e) -> ([HdrState r a] ->
  [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e) ->
  [PairState v p a] -> [PairState v p b] -> [PairState v p c] -> PairState v p d
  -> PairState v p e
pair3Lists1Val :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
([SrcState r a]
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> ([HdrState r a]
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> [PairState v p a]
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pair3Lists1Val [SrcState r a]
-> [SrcState s b] -> [SrcState t c] -> SrcState u d -> SrcState v e
srcf [HdrState r a]
-> [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e
hdrf [PairState v p a]
stv1 [PairState v p b]
stv2 [PairState v p c]
stv3 PairState v p d
stv4 = do
  [p CppSrcCode CppHdrCode a]
v1 <- [PairState v p a] -> StateT v Identity [p CppSrcCode CppHdrCode a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState v p a]
stv1
  let fl1 :: [SrcState r a]
fl1 = (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a)
-> (p CppSrcCode CppHdrCode a -> CppSrcCode a)
-> p CppSrcCode CppHdrCode a
-> SrcState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode a]
v1
      sl1 :: [HdrState r a]
sl1 = (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a)
-> (p CppSrcCode CppHdrCode a -> CppHdrCode a)
-> p CppSrcCode CppHdrCode a
-> HdrState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode a]
v1
  ([SrcState s b] -> [SrcState t c] -> SrcState u d -> SrcState v e)
-> ([HdrState s b]
    -> [HdrState t c] -> HdrState u d -> HdrState v e)
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pair2Lists1Val ([SrcState r a]
-> [SrcState s b] -> [SrcState t c] -> SrcState u d -> SrcState v e
srcf [SrcState r a]
fl1) ([HdrState r a]
-> [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e
hdrf [HdrState r a]
sl1) [PairState v p b]
stv2 [PairState v p c]
stv3 PairState v p d
stv4

pair1Val3Lists :: (Pair p) => (SrcState r a -> [SrcState s b] ->
  [(SrcState t c, SrcState u d)] -> SrcState v e) -> (HdrState r a ->
  [HdrState s b] -> [(HdrState t c, HdrState u d)] -> HdrState v e) ->
  PairState v p a -> [PairState v p b] -> [(PairState v p c, PairState v p d)]
  -> PairState v p e
pair1Val3Lists :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists SrcState r a
-> [SrcState s b] -> [(SrcState t c, SrcState u d)] -> SrcState v e
srcf HdrState r a
-> [HdrState s b] -> [(HdrState t c, HdrState u d)] -> HdrState v e
hdrf PairState v p a
stv1 [PairState v p b]
stv2 [(PairState v p c, PairState v p d)]
stv34 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState v p a
stv1
  [p CppSrcCode CppHdrCode b]
v2 <- [PairState v p b] -> StateT v Identity [p CppSrcCode CppHdrCode b]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState v p b]
stv2
  [p CppSrcCode CppHdrCode c]
v3 <- ((PairState v p c, PairState v p d) -> PairState v p c)
-> [(PairState v p c, PairState v p d)]
-> StateT v Identity [p CppSrcCode CppHdrCode c]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM (PairState v p c, PairState v p d) -> PairState v p c
forall a b. (a, b) -> a
fst [(PairState v p c, PairState v p d)]
stv34
  [p CppSrcCode CppHdrCode d]
v4 <- ((PairState v p c, PairState v p d) -> PairState v p d)
-> [(PairState v p c, PairState v p d)]
-> StateT v Identity [p CppSrcCode CppHdrCode d]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM (PairState v p c, PairState v p d) -> PairState v p d
forall a b. (a, b) -> b
snd [(PairState v p c, PairState v p d)]
stv34
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
      fv2 :: [SrcState s b]
fv2 = (p CppSrcCode CppHdrCode b -> SrcState s b)
-> [p CppSrcCode CppHdrCode b] -> [SrcState s b]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode b -> SrcState s b
forall a. a -> StateT s Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode b -> SrcState s b)
-> (p CppSrcCode CppHdrCode b -> CppSrcCode b)
-> p CppSrcCode CppHdrCode b
-> SrcState s b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode b -> CppSrcCode b
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode b]
v2
      sv2 :: [HdrState s b]
sv2 = (p CppSrcCode CppHdrCode b -> HdrState s b)
-> [p CppSrcCode CppHdrCode b] -> [HdrState s b]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode b -> HdrState s b
forall a. a -> StateT s Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode b -> HdrState s b)
-> (p CppSrcCode CppHdrCode b -> CppHdrCode b)
-> p CppSrcCode CppHdrCode b
-> HdrState s b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode b -> CppHdrCode b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode b]
v2
      fv3 :: [SrcState t c]
fv3 = (p CppSrcCode CppHdrCode c -> SrcState t c)
-> [p CppSrcCode CppHdrCode c] -> [SrcState t c]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode c -> SrcState t c
forall a. a -> StateT t Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode c -> SrcState t c)
-> (p CppSrcCode CppHdrCode c -> CppSrcCode c)
-> p CppSrcCode CppHdrCode c
-> SrcState t c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode c -> CppSrcCode c
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode c]
v3
      sv3 :: [HdrState t c]
sv3 = (p CppSrcCode CppHdrCode c -> HdrState t c)
-> [p CppSrcCode CppHdrCode c] -> [HdrState t c]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode c -> HdrState t c
forall a. a -> StateT t Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode c -> HdrState t c)
-> (p CppSrcCode CppHdrCode c -> CppHdrCode c)
-> p CppSrcCode CppHdrCode c
-> HdrState t c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode c -> CppHdrCode c
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode c]
v3
      fv4 :: [SrcState u d]
fv4 = (p CppSrcCode CppHdrCode d -> SrcState u d)
-> [p CppSrcCode CppHdrCode d] -> [SrcState u d]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode d -> SrcState u d
forall a. a -> StateT u Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode d -> SrcState u d)
-> (p CppSrcCode CppHdrCode d -> CppSrcCode d)
-> p CppSrcCode CppHdrCode d
-> SrcState u d
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode d -> CppSrcCode d
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode d]
v4
      sv4 :: [HdrState u d]
sv4 = (p CppSrcCode CppHdrCode d -> HdrState u d)
-> [p CppSrcCode CppHdrCode d] -> [HdrState u d]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode d -> HdrState u d
forall a. a -> StateT u Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode d -> HdrState u d)
-> (p CppSrcCode CppHdrCode d -> CppHdrCode d)
-> p CppSrcCode CppHdrCode d
-> HdrState u d
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode d -> CppHdrCode d
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode d]
v4
  CppSrcCode e
p1 <- SrcState r a
-> [SrcState s b] -> [(SrcState t c, SrcState u d)] -> SrcState v e
srcf SrcState r a
fv1 [SrcState s b]
fv2 ([SrcState t c] -> [SrcState u d] -> [(SrcState t c, SrcState u d)]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcState t c]
fv3 [SrcState u d]
fv4)
  CppHdrCode e
p2 <- HdrState r a
-> [HdrState s b] -> [(HdrState t c, HdrState u d)] -> HdrState v e
hdrf HdrState r a
sv1 [HdrState s b]
sv2 ([HdrState t c] -> [HdrState u d] -> [(HdrState t c, HdrState u d)]
forall a b. [a] -> [b] -> [(a, b)]
zip [HdrState t c]
sv3 [HdrState u d]
sv4)
  p CppSrcCode CppHdrCode e -> PairState v p e
forall a. a -> StateT v Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (p CppSrcCode CppHdrCode e -> PairState v p e)
-> p CppSrcCode CppHdrCode e -> PairState v p e
forall a b. (a -> b) -> a -> b
$ CppSrcCode e -> CppHdrCode e -> p CppSrcCode CppHdrCode e
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode e
p1 CppHdrCode e
p2

pair2Vals3Lists :: (Pair p) => (SrcState r a -> SrcState s b -> [SrcState t c]
  -> [(SrcState u d, SrcState v e)] -> SrcState w f) -> (HdrState r a ->
  HdrState s b -> [HdrState t c] -> [(HdrState u d, HdrState v e)] ->
  HdrState w f) -> PairState w p a -> PairState w p b -> [PairState w p c] ->
  [(PairState w p d, PairState w p e)] -> PairState w p f
pair2Vals3Lists :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e w
       f.
Pair p =>
(SrcState r a
 -> SrcState s b
 -> [SrcState t c]
 -> [(SrcState u d, SrcState v e)]
 -> SrcState w f)
-> (HdrState r a
    -> HdrState s b
    -> [HdrState t c]
    -> [(HdrState u d, HdrState v e)]
    -> HdrState w f)
-> PairState w p a
-> PairState w p b
-> [PairState w p c]
-> [(PairState w p d, PairState w p e)]
-> PairState w p f
pair2Vals3Lists SrcState r a
-> SrcState s b
-> [SrcState t c]
-> [(SrcState u d, SrcState v e)]
-> SrcState w f
srcf HdrState r a
-> HdrState s b
-> [HdrState t c]
-> [(HdrState u d, HdrState v e)]
-> HdrState w f
hdrf PairState w p a
stv1 PairState w p b
stv2 [PairState w p c]
stv3 [(PairState w p d, PairState w p e)]
stv45 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState w p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  (SrcState s b
 -> [SrcState t c]
 -> [(SrcState u d, SrcState v e)]
 -> SrcState w f)
-> (HdrState s b
    -> [HdrState t c]
    -> [(HdrState u d, HdrState v e)]
    -> HdrState w f)
-> PairState w p b
-> [PairState w p c]
-> [(PairState w p d, PairState w p e)]
-> PairState w p f
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists (SrcState r a
-> SrcState s b
-> [SrcState t c]
-> [(SrcState u d, SrcState v e)]
-> SrcState w f
srcf SrcState r a
fv1) (HdrState r a
-> HdrState s b
-> [HdrState t c]
-> [(HdrState u d, HdrState v e)]
-> HdrState w f
hdrf HdrState r a
sv1) PairState w p b
stv2 [PairState w p c]
stv3 [(PairState w p d, PairState w p e)]
stv45

pairVal2ListsVal :: (Pair p) => (SrcState r a -> [SrcState s b] ->
  [SrcState t c] -> SrcState u d -> SrcState v e) -> (HdrState r a ->
  [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e) ->
  PairState v p a -> [PairState v p b] -> [PairState v p c] -> PairState v p d
  -> PairState v p e
pairVal2ListsVal :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pairVal2ListsVal SrcState r a
-> [SrcState s b] -> [SrcState t c] -> SrcState u d -> SrcState v e
srcf HdrState r a
-> [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e
hdrf PairState v p a
stv1 [PairState v p b]
stv2 [PairState v p c]
stv3 PairState v p d
stv4 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState v p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  ([SrcState s b] -> [SrcState t c] -> SrcState u d -> SrcState v e)
-> ([HdrState s b]
    -> [HdrState t c] -> HdrState u d -> HdrState v e)
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pair2Lists1Val (SrcState r a
-> [SrcState s b] -> [SrcState t c] -> SrcState u d -> SrcState v e
srcf SrcState r a
fv1) (HdrState r a
-> [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e
hdrf HdrState r a
sv1) [PairState v p b]
stv2 [PairState v p c]
stv3 PairState v p d
stv4

-----------------
-- Source File --
-----------------

newtype CppSrcCode a = CPPSC {forall a. CppSrcCode a -> a
unCPPSC :: a} deriving CppSrcCode a -> CppSrcCode a -> Bool
(CppSrcCode a -> CppSrcCode a -> Bool)
-> (CppSrcCode a -> CppSrcCode a -> Bool) -> Eq (CppSrcCode a)
forall a. Eq a => CppSrcCode a -> CppSrcCode a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => CppSrcCode a -> CppSrcCode a -> Bool
== :: CppSrcCode a -> CppSrcCode a -> Bool
$c/= :: forall a. Eq a => CppSrcCode a -> CppSrcCode a -> Bool
/= :: CppSrcCode a -> CppSrcCode a -> Bool
Eq

instance Functor CppSrcCode where
  fmap :: forall a b. (a -> b) -> CppSrcCode a -> CppSrcCode b
fmap a -> b
f (CPPSC a
x) = b -> CppSrcCode b
forall a. a -> CppSrcCode a
CPPSC (a -> b
f a
x)

instance Applicative CppSrcCode where
  pure :: forall a. a -> CppSrcCode a
pure = a -> CppSrcCode a
forall a. a -> CppSrcCode a
CPPSC
  (CPPSC a -> b
f) <*> :: forall a b. CppSrcCode (a -> b) -> CppSrcCode a -> CppSrcCode b
<*> (CPPSC a
x) = b -> CppSrcCode b
forall a. a -> CppSrcCode a
CPPSC (a -> b
f a
x)

instance Monad CppSrcCode where
  CPPSC a
x >>= :: forall a b. CppSrcCode a -> (a -> CppSrcCode b) -> CppSrcCode b
>>= a -> CppSrcCode b
f = a -> CppSrcCode b
f a
x

instance ProgramSym CppSrcCode (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData ProgData where
  prog :: ClassName
-> ClassName
-> [FS (CppSrcCode File)]
-> GSProgram CppSrcCode ProgData
prog ClassName
n ClassName
st = ([CppSrcCode File] -> CppSrcCode ProgData)
-> [State GOOLState (CppSrcCode File)]
-> GSProgram CppSrcCode ProgData
forall a b s. ([a] -> b) -> [State s a] -> State s b
onStateList (([File] -> ProgData) -> [CppSrcCode File] -> CppSrcCode ProgData
forall (m :: * -> *) a b. Monad m => ([a] -> b) -> [m a] -> m b
onCodeList (ClassName -> ClassName -> [File] -> ProgData
progD ClassName
n ClassName
st)) ([State GOOLState (CppSrcCode File)]
 -> GSProgram CppSrcCode ProgData)
-> ([FS (CppSrcCode File)] -> [State GOOLState (CppSrcCode File)])
-> [FS (CppSrcCode File)]
-> GSProgram CppSrcCode ProgData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (FS (CppSrcCode File) -> State GOOLState (CppSrcCode File))
-> [FS (CppSrcCode File)] -> [State GOOLState (CppSrcCode File)]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed (StateT FileState Identity) (CppSrcCode File))
  GOOLState
  FileState
-> FS (CppSrcCode File) -> State GOOLState (CppSrcCode File)
forall c.
LensLike'
  (Zoomed (StateT FileState Identity) c) GOOLState FileState
-> StateT FileState Identity c -> StateT GOOLState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT FileState Identity) (CppSrcCode File))
  GOOLState
  FileState
(FileState -> Focusing Identity (CppSrcCode File) FileState)
-> GOOLState -> Focusing Identity (CppSrcCode File) GOOLState
Lens' GOOLState FileState
lensGStoFS)
instance SharedStatement CppSrcCode (Doc, Terminator) where
instance OOStatement CppSrcCode (Doc, Terminator) where

instance CommonRenderSym CppSrcCode (Doc, VisibilityTag) (Doc, Terminator) MethodData
instance OORenderSym CppSrcCode (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData

instance UnRepr CppSrcCode contents where
  unRepr :: CppSrcCode contents -> contents
unRepr = CppSrcCode contents -> contents
forall a. CppSrcCode a -> a
unCPPSC

instance FileSym CppSrcCode (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData where
  fileDoc :: SrcState FileState Module -> FS (CppSrcCode File)
fileDoc SrcState FileState Module
m = do
    (FileState -> FileState) -> StateT FileState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (FileType -> FileState -> FileState
setFileType FileType
Source)
    ClassName
-> (CppSrcCode Module -> CppSrcCode Doc)
-> CppSrcCode Doc
-> SrcState FileState Module
-> FS (CppSrcCode File)
forall (r :: * -> *).
(BlockElim r, RenderMod r, RenderFile r) =>
ClassName
-> (r Module -> r Doc) -> r Doc -> FS (r Module) -> FS (r File)
G.fileDoc ClassName
cppSrcExt CppSrcCode Module -> CppSrcCode Doc
forall (r :: * -> *). RenderFile r => r Module -> r Doc
top CppSrcCode Doc
forall (r :: * -> *). RenderFile r => r Doc
bottom SrcState FileState Module
m

  docMod :: ClassName
-> ClassName
-> [ClassName]
-> ClassName
-> FS (CppSrcCode File)
-> FS (CppSrcCode File)
docMod = ClassName
-> ClassName
-> ClassName
-> [ClassName]
-> ClassName
-> FS (CppSrcCode File)
-> FS (CppSrcCode File)
forall (r :: * -> *).
RenderFile r =>
ClassName
-> ClassName
-> ClassName
-> [ClassName]
-> ClassName
-> FS (r File)
-> FS (r File)
CP.doxMod ClassName
cppSrcExt

instance RenderFile CppSrcCode where
  top :: CppSrcCode Module -> CppSrcCode Doc
top CppSrcCode Module
_ = Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty
  bottom :: CppSrcCode Doc
bottom = Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

  commentedMod :: FS (CppSrcCode File)
-> SrcState FileState Doc -> FS (CppSrcCode File)
commentedMod = (Bool -> CppSrcCode File -> CppSrcCode Doc -> CppSrcCode File)
-> State FileState Bool
-> FS (CppSrcCode File)
-> SrcState FileState Doc
-> FS (CppSrcCode File)
forall a b c d s.
(a -> b -> c -> d)
-> State s a -> State s b -> State s c -> State s d
on3StateValues (\Bool
mn CppSrcCode File
m CppSrcCode Doc
cmt -> if Bool
mn then (File -> Doc -> File)
-> CppSrcCode File -> CppSrcCode Doc -> CppSrcCode File
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues
    File -> Doc -> File
R.commentedMod CppSrcCode File
m CppSrcCode Doc
cmt else CppSrcCode File
m) State FileState Bool
getCurrMain

  fileFromData :: ClassName -> SrcState FileState Module -> FS (CppSrcCode File)
fileFromData = (ClassName -> CppSrcCode Module -> CppSrcCode File)
-> ClassName -> SrcState FileState Module -> FS (CppSrcCode File)
forall (r :: * -> *).
ModuleElim r =>
(ClassName -> r Module -> r File)
-> ClassName -> FS (r Module) -> FS (r File)
G.fileFromData ((Module -> File) -> CppSrcCode Module -> CppSrcCode File
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ((Module -> File) -> CppSrcCode Module -> CppSrcCode File)
-> (ClassName -> Module -> File)
-> ClassName
-> CppSrcCode Module
-> CppSrcCode File
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> Module -> File
fileD)

instance ImportSym CppSrcCode where
  langImport :: ClassName -> CppSrcCode Doc
langImport ClassName
n = Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode Doc) -> Doc -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ Doc
inc Doc -> Doc -> Doc
<+> Doc -> Doc
angles (ClassName -> Doc
text ClassName
n)
  modImport :: ClassName -> CppSrcCode Doc
modImport ClassName
n = Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode Doc) -> Doc -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ Doc
inc Doc -> Doc -> Doc
<+> ClassName -> Doc
doubleQuotedText (ClassName -> ClassName -> ClassName
addExt ClassName
cppHdrExt
    ClassName
n)

instance AttachmentSym CppSrcCode AttachmentData where
  classLevel :: CppSrcCode AttachmentData
classLevel = AttachmentData -> CppSrcCode AttachmentData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (AttachmentData -> CppSrcCode AttachmentData)
-> AttachmentData -> CppSrcCode AttachmentData
forall a b. (a -> b) -> a -> b
$ AttachmentTag -> Doc -> AttachmentData
ad AttachmentTag
ClassLevel Doc
R.classLevel
  instanceLevel :: CppSrcCode AttachmentData
instanceLevel = AttachmentData -> CppSrcCode AttachmentData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (AttachmentData -> CppSrcCode AttachmentData)
-> AttachmentData -> CppSrcCode AttachmentData
forall a b. (a -> b) -> a -> b
$ AttachmentTag -> Doc -> AttachmentData
ad AttachmentTag
InstanceLevel Doc
R.instanceLevel

instance PermElim CppSrcCode AttachmentData where
  perm :: CppSrcCode AttachmentData -> Doc
perm = AttachmentData -> Doc
attachmentDoc (AttachmentData -> Doc)
-> (CppSrcCode AttachmentData -> AttachmentData)
-> CppSrcCode AttachmentData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode AttachmentData -> AttachmentData
forall a. CppSrcCode a -> a
unCPPSC
  binding :: CppSrcCode AttachmentData -> AttachmentTag
binding = AttachmentData -> AttachmentTag
attachment (AttachmentData -> AttachmentTag)
-> (CppSrcCode AttachmentData -> AttachmentData)
-> CppSrcCode AttachmentData
-> AttachmentTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode AttachmentData -> AttachmentData
forall a. CppSrcCode a -> a
unCPPSC

instance BodySym CppSrcCode (Doc, Terminator) where
  body :: [SrcState MethodState Doc] -> SrcState MethodState Doc
body = ([CppSrcCode Doc] -> CppSrcCode Doc)
-> [SrcState MethodState Doc] -> SrcState MethodState Doc
forall a b s. ([a] -> b) -> [State s a] -> State s b
onStateList (([Doc] -> Doc) -> [CppSrcCode Doc] -> CppSrcCode Doc
forall (m :: * -> *) a b. Monad m => ([a] -> b) -> [m a] -> m b
onCodeList [Doc] -> Doc
R.body)

  addComments :: ClassName -> SrcState MethodState Doc -> SrcState MethodState Doc
addComments ClassName
s = (CppSrcCode Doc -> CppSrcCode Doc)
-> SrcState MethodState Doc -> SrcState MethodState Doc
forall a b s. (a -> b) -> State s a -> State s b
onStateValue ((Doc -> Doc) -> CppSrcCode Doc -> CppSrcCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (ClassName -> Doc -> Doc -> Doc
R.addComments ClassName
s Doc
commentStart))

instance RenderBody CppSrcCode where
  multiBody :: [SrcState MethodState Doc] -> SrcState MethodState Doc
multiBody = [SrcState MethodState Doc] -> SrcState MethodState Doc
forall (r :: * -> *).
(BodyElim r, Monad r) =>
[MS (r Doc)] -> MS (r Doc)
G.multiBody

instance BodyElim CppSrcCode where
  body :: CppSrcCode Doc -> Doc
body = CppSrcCode Doc -> Doc
forall a. CppSrcCode a -> a
unCPPSC

instance BlockSym CppSrcCode (Doc, Terminator) where
  block :: [SrcState MethodState (Doc, Terminator)]
-> SrcState MethodState Doc
block = [SrcState MethodState (Doc, Terminator)]
-> SrcState MethodState Doc
forall (r :: * -> *) smt.
(Monad r, RenderStatement r smt, StatementElim r smt) =>
[MS (r smt)] -> MS (r Doc)
G.block

instance RenderBlock CppSrcCode where
  multiBlock :: [SrcState MethodState Doc] -> SrcState MethodState Doc
multiBlock = [SrcState MethodState Doc] -> SrcState MethodState Doc
forall (r :: * -> *).
(BlockElim r, Monad r) =>
[MS (r Doc)] -> MS (r Doc)
G.multiBlock

instance BlockElim CppSrcCode where
  block :: CppSrcCode Doc -> Doc
block = CppSrcCode Doc -> Doc
forall a. CppSrcCode a -> a
unCPPSC

instance TypeSym CppSrcCode where
  bool :: State ValueState (CppSrcCode TypeData)
bool = State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
cppBoolType
  int :: State ValueState (CppSrcCode TypeData)
int = State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
CP.int
  float :: State ValueState (CppSrcCode TypeData)
float = State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.float
  double :: State ValueState (CppSrcCode TypeData)
double = State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.double
  char :: State ValueState (CppSrcCode TypeData)
char = State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.char
  string :: State ValueState (CppSrcCode TypeData)
string = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addUsing ClassName
cppString (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> ValueState -> ValueState
addLangImportVS ClassName
cppString)
    State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
CP.string
  infile :: State ValueState (CppSrcCode TypeData)
infile = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addUsing ClassName
cppInfile)
    State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
cppInfileType
  outfile :: State ValueState (CppSrcCode TypeData)
outfile = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addUsing ClassName
cppOutfile)
    State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
cppOutfileType
  referenceType :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
referenceType = State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r, UnRepr r TypeData) =>
VS (r TypeData) -> VS (r TypeData)
cppReferenceType
  listType :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
listType State ValueState (CppSrcCode TypeData)
t = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addUsing ClassName
vector (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> ValueState -> ValueState
addLangImportVS ClassName
vector)
    ClassName
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r, UnRepr r TypeData) =>
ClassName -> VS (r TypeData) -> VS (r TypeData)
C.listType ClassName
vector State ValueState (CppSrcCode TypeData)
t
  setType :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
setType State ValueState (CppSrcCode TypeData)
t = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addUsing ClassName
cppSet (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> ValueState -> ValueState
addLangImportVS ClassName
cppSet)
    ClassName
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r, UnRepr r TypeData) =>
ClassName -> VS (r TypeData) -> VS (r TypeData)
C.setType ClassName
cppSet State ValueState (CppSrcCode TypeData)
t
  arrayType :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
arrayType = State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
listType
  innerType :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
innerType = State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
(TypeElim r, OOTypeSym r) =>
VS (r TypeData) -> VS (r TypeData)
CG.innerType
  funcType :: [State ValueState (CppSrcCode TypeData)]
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
funcType = [State ValueState (CppSrcCode TypeData)]
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r) =>
[VS (r TypeData)] -> VS (r TypeData) -> VS (r TypeData)
cppFuncType
  void :: State ValueState (CppSrcCode TypeData)
void = State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.void

instance TypeElim CppSrcCode where
  getCodeType :: CppSrcCode TypeData -> CodeType
getCodeType = TypeData -> CodeType
cType (TypeData -> CodeType)
-> (CppSrcCode TypeData -> TypeData)
-> CppSrcCode TypeData
-> CodeType
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode TypeData -> TypeData
forall a. CppSrcCode a -> a
unCPPSC

instance OOTypeSym CppSrcCode where
  obj :: ClassName -> State ValueState (CppSrcCode TypeData)
obj ClassName
n = do
    ClassName
cn <- LensLike'
  (Zoomed (StateT MethodState Identity) ClassName)
  ValueState
  MethodState
-> StateT MethodState Identity ClassName
-> StateT ValueState Identity ClassName
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ValueState MethodState
-> StateT MethodState Identity c -> StateT ValueState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT MethodState Identity) ClassName)
  ValueState
  MethodState
(MethodState -> Focusing Identity ClassName MethodState)
-> ValueState -> Focusing Identity ClassName ValueState
Lens' ValueState MethodState
lensVStoMS StateT MethodState Identity ClassName
getClassName
    if ClassName
cn ClassName -> ClassName -> Bool
forall a. Eq a => a -> a -> Bool
== ClassName
n then ClassName -> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => ClassName -> VS (r TypeData)
G.obj ClassName
n else
      VS (Map ClassName ClassName)
getClassMap VS (Map ClassName ClassName)
-> (Map ClassName ClassName
    -> State ValueState (CppSrcCode TypeData))
-> State ValueState (CppSrcCode TypeData)
forall a b.
StateT ValueState Identity a
-> (a -> StateT ValueState Identity b)
-> StateT ValueState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\Map ClassName ClassName
cm -> (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (ClassName
    -> State ValueState (CppSrcCode TypeData)
    -> State ValueState (CppSrcCode TypeData))
-> Maybe ClassName
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall a. a -> a
id (StateT ValueState Identity ()
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall a b.
StateT ValueState Identity a
-> StateT ValueState Identity b -> StateT ValueState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (StateT ValueState Identity ()
 -> State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (ClassName -> StateT ValueState Identity ())
-> ClassName
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify ((ValueState -> ValueState) -> StateT ValueState Identity ())
-> (ClassName -> ValueState -> ValueState)
-> ClassName
-> StateT ValueState Identity ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> ValueState -> ValueState
addModuleImportVS)
        (ClassName -> Map ClassName ClassName -> Maybe ClassName
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup ClassName
n Map ClassName ClassName
cm) (ClassName -> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => ClassName -> VS (r TypeData)
G.obj ClassName
n))

instance RenderType CppSrcCode where
  multiType :: [State ValueState (CppSrcCode TypeData)]
-> State ValueState (CppSrcCode TypeData)
multiType [State ValueState (CppSrcCode TypeData)]
_ = ClassName -> State ValueState (CppSrcCode TypeData)
forall a. HasCallStack => ClassName -> a
error (ClassName -> State ValueState (CppSrcCode TypeData))
-> ClassName -> State ValueState (CppSrcCode TypeData)
forall a b. (a -> b) -> a -> b
$ ClassName -> ClassName
C.multiTypeError ClassName
cppName

instance UnaryOpSym CppSrcCode where
  notOp :: State ValueState (CppSrcCode OpData)
notOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
C.notOp
  negateOp :: State ValueState (CppSrcCode OpData)
negateOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.negateOp
  sqrtOp :: State ValueState (CppSrcCode OpData)
sqrtOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppSqrtOp
  absOp :: State ValueState (CppSrcCode OpData)
absOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppAbsOp
  logOp :: State ValueState (CppSrcCode OpData)
logOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppLogOp
  lnOp :: State ValueState (CppSrcCode OpData)
lnOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppLnOp
  expOp :: State ValueState (CppSrcCode OpData)
expOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppExpOp
  sinOp :: State ValueState (CppSrcCode OpData)
sinOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppSinOp
  cosOp :: State ValueState (CppSrcCode OpData)
cosOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppCosOp
  tanOp :: State ValueState (CppSrcCode OpData)
tanOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppTanOp
  asinOp :: State ValueState (CppSrcCode OpData)
asinOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppAsinOp
  acosOp :: State ValueState (CppSrcCode OpData)
acosOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppAcosOp
  atanOp :: State ValueState (CppSrcCode OpData)
atanOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppAtanOp
  floorOp :: State ValueState (CppSrcCode OpData)
floorOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppFloorOp
  ceilOp :: State ValueState (CppSrcCode OpData)
ceilOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppCeilOp

instance BinaryOpSym CppSrcCode where
  equalOp :: State ValueState (CppSrcCode OpData)
equalOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.equalOp
  notEqualOp :: State ValueState (CppSrcCode OpData)
notEqualOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.notEqualOp
  greaterOp :: State ValueState (CppSrcCode OpData)
greaterOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.greaterOp
  greaterEqualOp :: State ValueState (CppSrcCode OpData)
greaterEqualOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.greaterEqualOp
  lessOp :: State ValueState (CppSrcCode OpData)
lessOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.lessOp
  lessEqualOp :: State ValueState (CppSrcCode OpData)
lessEqualOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.lessEqualOp
  plusOp :: State ValueState (CppSrcCode OpData)
plusOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.plusOp
  minusOp :: State ValueState (CppSrcCode OpData)
minusOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.minusOp
  multOp :: State ValueState (CppSrcCode OpData)
multOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.multOp
  divideOp :: State ValueState (CppSrcCode OpData)
divideOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.divideOp
  powerOp :: State ValueState (CppSrcCode OpData)
powerOp = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode OpData)
forall a. VS a -> VS a
addMathHImport State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppPowerOp
  moduloOp :: State ValueState (CppSrcCode OpData)
moduloOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.moduloOp
  andOp :: State ValueState (CppSrcCode OpData)
andOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
C.andOp
  orOp :: State ValueState (CppSrcCode OpData)
orOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
C.orOp

instance OpElim CppSrcCode where
  uOp :: CppSrcCode OpData -> Doc
uOp = OpData -> Doc
opDoc (OpData -> Doc)
-> (CppSrcCode OpData -> OpData) -> CppSrcCode OpData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode OpData -> OpData
forall a. CppSrcCode a -> a
unCPPSC
  bOp :: CppSrcCode OpData -> Doc
bOp = OpData -> Doc
opDoc (OpData -> Doc)
-> (CppSrcCode OpData -> OpData) -> CppSrcCode OpData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode OpData -> OpData
forall a. CppSrcCode a -> a
unCPPSC
  uOpPrec :: CppSrcCode OpData -> Int
uOpPrec = OpData -> Int
opPrec (OpData -> Int)
-> (CppSrcCode OpData -> OpData) -> CppSrcCode OpData -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode OpData -> OpData
forall a. CppSrcCode a -> a
unCPPSC
  bOpPrec :: CppSrcCode OpData -> Int
bOpPrec = OpData -> Int
opPrec (OpData -> Int)
-> (CppSrcCode OpData -> OpData) -> CppSrcCode OpData -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode OpData -> OpData
forall a. CppSrcCode a -> a
unCPPSC

instance ScopeSym CppSrcCode where
  global :: CppSrcCode ScopeData
global = CppSrcCode ScopeData
forall (r :: * -> *). Monad r => r ScopeData
CP.global
  mainFn :: CppSrcCode ScopeData
mainFn = CppSrcCode ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
local
  local :: CppSrcCode ScopeData
local = CppSrcCode ScopeData
forall (r :: * -> *). Monad r => r ScopeData
G.local

instance ScopeElim CppSrcCode where
  scopeData :: CppSrcCode ScopeData -> ScopeData
scopeData = CppSrcCode ScopeData -> ScopeData
forall a. CppSrcCode a -> a
unCPPSC

instance VariableSym CppSrcCode where
  var :: ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
var          = ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> VS (r TypeData) -> SVariable r
G.var
  constant :: ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
constant     = ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
VariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
var
  extVar :: ClassName
-> ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
extVar ClassName
l ClassName
n State ValueState (CppSrcCode TypeData)
t = (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addModuleImportVS ClassName
l) StateT ValueState Identity ()
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall a b.
StateT ValueState Identity a
-> StateT ValueState Identity b -> StateT ValueState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
VariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
var ClassName
n State ValueState (CppSrcCode TypeData)
t

instance OOVariableSym CppSrcCode where
  classVar :: ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
classVar = ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> VS (r TypeData) -> SVariable r
G.classVar
  classConst :: ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
classConst = ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
classVar
  classVarAccess :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable -> SrcState ValueState Variable
classVarAccess State ValueState (CppSrcCode TypeData)
c' SrcState ValueState Variable
v'= do
    CppSrcCode TypeData
c <- State ValueState (CppSrcCode TypeData)
c'
    CppSrcCode Variable
v <- SrcState ValueState Variable
v'
    CppSrcCode Variable
vfd <- AttachmentTag
-> ClassName
-> State ValueState (CppSrcCode TypeData)
-> Doc
-> SrcState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
AttachmentTag -> ClassName -> VS (r TypeData) -> Doc -> SVariable r
varFromData
      (CppSrcCode Variable -> AttachmentTag
forall (r :: * -> *).
InternalVarElim r =>
r Variable -> AttachmentTag
variableBind CppSrcCode Variable
v) (CppSrcCode TypeData -> ClassName
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> ClassName
getTypeString CppSrcCode TypeData
c ClassName -> ClassName -> ClassName
`nmSpcAccess` CppSrcCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName CppSrcCode Variable
v)
      (CppSrcCode TypeData -> State ValueState (CppSrcCode TypeData)
forall a s. a -> State s a
toState (CppSrcCode TypeData -> State ValueState (CppSrcCode TypeData))
-> CppSrcCode TypeData -> State ValueState (CppSrcCode TypeData)
forall a b. (a -> b) -> a -> b
$ CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType CppSrcCode Variable
v) (Doc -> Doc -> Doc
cppClassVarAccess (CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppSrcCode TypeData
c) (CppSrcCode Variable -> Doc
forall (r :: * -> *). InternalVarElim r => r Variable -> Doc
RC.variable CppSrcCode Variable
v))
    CppSrcCode Variable -> SrcState ValueState Variable
forall a s. a -> State s a
toState (CppSrcCode Variable -> SrcState ValueState Variable)
-> CppSrcCode Variable -> SrcState ValueState Variable
forall a b. (a -> b) -> a -> b
$ CppSrcCode Variable -> CppSrcCode Variable
forall (r :: * -> *). InternalVarElim r => r Variable -> r Variable
classVarAccessCheck CppSrcCode Variable
vfd
  extClassVarAccess :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable -> SrcState ValueState Variable
extClassVarAccess State ValueState (CppSrcCode TypeData)
c SrcState ValueState Variable
v = do
    CppSrcCode TypeData
t <- State ValueState (CppSrcCode TypeData)
c
    Map ClassName ClassName
cm <- VS (Map ClassName ClassName)
getClassMap
    (SrcState ValueState Variable -> SrcState ValueState Variable)
-> (ClassName
    -> SrcState ValueState Variable -> SrcState ValueState Variable)
-> Maybe ClassName
-> SrcState ValueState Variable
-> SrcState ValueState Variable
forall b a. b -> (a -> b) -> Maybe a -> b
maybe SrcState ValueState Variable -> SrcState ValueState Variable
forall a. a -> a
id (StateT ValueState Identity ()
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall a b.
StateT ValueState Identity a
-> StateT ValueState Identity b -> StateT ValueState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (StateT ValueState Identity ()
 -> SrcState ValueState Variable -> SrcState ValueState Variable)
-> (ClassName -> StateT ValueState Identity ())
-> ClassName
-> SrcState ValueState Variable
-> SrcState ValueState Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify ((ValueState -> ValueState) -> StateT ValueState Identity ())
-> (ClassName -> ValueState -> ValueState)
-> ClassName
-> StateT ValueState Identity ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> ValueState -> ValueState
addModuleImportVS)
      (ClassName -> Map ClassName ClassName -> Maybe ClassName
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup (CppSrcCode TypeData -> ClassName
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> ClassName
getTypeString CppSrcCode TypeData
t) Map ClassName ClassName
cm) (SrcState ValueState Variable -> SrcState ValueState Variable)
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall a b. (a -> b) -> a -> b
$ State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
VS (r TypeData) -> SVariable r -> SVariable r
classVarAccess (CppSrcCode TypeData -> State ValueState (CppSrcCode TypeData)
forall a. a -> StateT ValueState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure CppSrcCode TypeData
t) SrcState ValueState Variable
v
  instanceVarAccess :: SrcState ValueState Value
-> SrcState ValueState Variable -> SrcState ValueState Variable
instanceVarAccess SrcState ValueState Value
ob SrcState ValueState Variable
vr = do
    CppSrcCode Value
ob' <- SrcState ValueState Value
ob
    CppSrcCode Variable
vr' <- SrcState ValueState Variable
vr
    let objTp :: CodeType
objTp = TypeData -> CodeType
cType (TypeData -> CodeType) -> TypeData -> CodeType
forall a b. (a -> b) -> a -> b
$ CppSrcCode TypeData -> TypeData
forall (repr :: * -> *) contents.
UnRepr repr contents =>
repr contents -> contents
unRepr (CppSrcCode TypeData -> TypeData)
-> CppSrcCode TypeData -> TypeData
forall a b. (a -> b) -> a -> b
$ CppSrcCode Value -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r Value -> r TypeData
valueType CppSrcCode Value
ob'
    case CodeType
objTp of
      (Reference CodeType
_) -> let
          instanceVarAccess' :: AttachmentTag -> SrcState ValueState Variable
instanceVarAccess' AttachmentTag
ClassLevel = ClassName -> SrcState ValueState Variable
forall a. HasCallStack => ClassName -> a
error
            ClassName
"Cannot access class-level variables through an object, use classVarAccess instead"
          instanceVarAccess' AttachmentTag
InstanceLevel = ClassName
-> CppSrcCode TypeData -> Doc -> SrcState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> r TypeData -> Doc -> SVariable r
mkVar
            (Doc -> ClassName
render (CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
ob') ClassName -> ClassName -> ClassName
forall a. [a] -> [a] -> [a]
++ ClassName
ptrAccess ClassName -> ClassName -> ClassName
forall a. [a] -> [a] -> [a]
++ CppSrcCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName CppSrcCode Variable
vr')
            (CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType CppSrcCode Variable
vr') (CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
ob' Doc -> Doc -> Doc
<> Doc
ptrAccess' Doc -> Doc -> Doc
<> CppSrcCode Variable -> Doc
forall (r :: * -> *). InternalVarElim r => r Variable -> Doc
RC.variable CppSrcCode Variable
vr')
        in AttachmentTag -> SrcState ValueState Variable
instanceVarAccess' (CppSrcCode Variable -> AttachmentTag
forall (r :: * -> *).
InternalVarElim r =>
r Variable -> AttachmentTag
variableBind CppSrcCode Variable
vr')
      CodeType
_ -> SrcState ValueState Value
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall (r :: * -> *).
(InternalVarElim r, RenderVariable r, ValueElim r,
 VariableElim r) =>
SValue r -> SVariable r -> SVariable r
G.instanceVarAccess SrcState ValueState Value
ob SrcState ValueState Variable
vr

instance SelfSym CppSrcCode where
  self :: SrcState ValueState Variable
self = do
    ClassName
l <- LensLike'
  (Zoomed (StateT MethodState Identity) ClassName)
  ValueState
  MethodState
-> StateT MethodState Identity ClassName
-> StateT ValueState Identity ClassName
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ValueState MethodState
-> StateT MethodState Identity c -> StateT ValueState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT MethodState Identity) ClassName)
  ValueState
  MethodState
(MethodState -> Focusing Identity ClassName MethodState)
-> ValueState -> Focusing Identity ClassName ValueState
Lens' ValueState MethodState
lensVStoMS StateT MethodState Identity ClassName
getClassName
    ClassName
-> State ValueState (CppSrcCode TypeData)
-> Doc
-> SrcState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> VS (r TypeData) -> Doc -> SVariable r
mkStateVar ClassName
R.this (State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
referenceType (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall a b. (a -> b) -> a -> b
$ ClassName -> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). OOTypeSym r => ClassName -> VS (r TypeData)
obj ClassName
l) Doc
R.this'

instance VariableElim CppSrcCode where
  variableName :: CppSrcCode Variable -> ClassName
variableName = Variable -> ClassName
varName (Variable -> ClassName)
-> (CppSrcCode Variable -> Variable)
-> CppSrcCode Variable
-> ClassName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Variable -> Variable
forall a. CppSrcCode a -> a
unCPPSC
  variableType :: CppSrcCode Variable -> CppSrcCode TypeData
variableType = (Variable -> TypeData)
-> CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue Variable -> TypeData
varType

instance InternalVarElim CppSrcCode where
  variableBind :: CppSrcCode Variable -> AttachmentTag
variableBind = Variable -> AttachmentTag
varBind (Variable -> AttachmentTag)
-> (CppSrcCode Variable -> Variable)
-> CppSrcCode Variable
-> AttachmentTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Variable -> Variable
forall a. CppSrcCode a -> a
unCPPSC
  variable :: CppSrcCode Variable -> Doc
variable = Variable -> Doc
varDoc (Variable -> Doc)
-> (CppSrcCode Variable -> Variable) -> CppSrcCode Variable -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Variable -> Variable
forall a. CppSrcCode a -> a
unCPPSC

instance RenderVariable CppSrcCode where
  varFromData :: AttachmentTag
-> ClassName
-> State ValueState (CppSrcCode TypeData)
-> Doc
-> SrcState ValueState Variable
varFromData AttachmentTag
b ClassName
n State ValueState (CppSrcCode TypeData)
t' Doc
d = do
    CppSrcCode TypeData
t <- State ValueState (CppSrcCode TypeData)
t'
    CppSrcCode Variable -> SrcState ValueState Variable
forall a s. a -> State s a
toState (CppSrcCode Variable -> SrcState ValueState Variable)
-> CppSrcCode Variable -> SrcState ValueState Variable
forall a b. (a -> b) -> a -> b
$ (TypeData -> Doc -> Variable)
-> CppSrcCode TypeData -> CppSrcCode Doc -> CppSrcCode Variable
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues (AttachmentTag -> ClassName -> TypeData -> Doc -> Variable
vard AttachmentTag
b ClassName
n) CppSrcCode TypeData
t (Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)

instance ValueSym CppSrcCode where
  valueType :: CppSrcCode Value -> CppSrcCode TypeData
valueType = (Value -> TypeData) -> CppSrcCode Value -> CppSrcCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue Value -> TypeData
valType

instance OOValueSym CppSrcCode where

instance Argument CppSrcCode where
  pointerArg :: SrcState ValueState Value -> SrcState ValueState Value
pointerArg = SrcState ValueState Value -> SrcState ValueState Value
forall a. a -> a
id

instance Literal CppSrcCode where
  litTrue :: SrcState ValueState Value
litTrue = SrcState ValueState Value
forall (r :: * -> *). (RenderValue r, TypeSym r) => SValue r
C.litTrue
  litFalse :: SrcState ValueState Value
litFalse = SrcState ValueState Value
forall (r :: * -> *). (RenderValue r, TypeSym r) => SValue r
C.litFalse
  litChar :: Char -> SrcState ValueState Value
litChar = (Doc -> Doc) -> Char -> SrcState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r) =>
(Doc -> Doc) -> Char -> SValue r
G.litChar Doc -> Doc
quotes
  litDouble :: Double -> SrcState ValueState Value
litDouble = Double -> SrcState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r) =>
Double -> SValue r
G.litDouble
  litFloat :: Float -> SrcState ValueState Value
litFloat = Float -> SrcState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r) =>
Float -> SValue r
C.litFloat
  litInt :: Integer -> SrcState ValueState Value
litInt = Integer -> SrcState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r) =>
Integer -> SValue r
G.litInt
  litString :: ClassName -> SrcState ValueState Value
litString = ClassName -> SrcState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r) =>
ClassName -> SValue r
G.litString
  litArray :: State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value] -> SrcState ValueState Value
litArray = (Doc -> Doc)
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r, ValueElim r) =>
(Doc -> Doc) -> VS (r TypeData) -> [SValue r] -> SValue r
CP.litArray Doc -> Doc
braces
  litSet :: State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value] -> SrcState ValueState Value
litSet = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *).
(RenderValue r, ValueElim r) =>
(VS (r TypeData) -> VS (r TypeData))
-> VS (r TypeData) -> [SValue r] -> SValue r
cppLitSet State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
setType
  litList :: State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value] -> SrcState ValueState Value
litList = (Doc -> Doc)
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r, ValueElim r) =>
(Doc -> Doc) -> VS (r TypeData) -> [SValue r] -> SValue r
CP.litArray Doc -> Doc
braces

instance MathConstant CppSrcCode where
  pi :: SrcState ValueState Value
pi = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addDefine ClassName
mathDefines)
    SrcState ValueState Value -> SrcState ValueState Value
forall a. VS a -> VS a
addMathHImport (State ValueState (CppSrcCode TypeData)
-> Doc -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
double Doc
cppPi)

instance VariableValue CppSrcCode where
  valueOf :: SrcState ValueState Variable -> SrcState ValueState Value
valueOf = SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *).
(InternalVarElim r, RenderValue r, VariableElim r) =>
SVariable r -> SValue r
G.valueOf

instance OOVariableValue CppSrcCode

instance CommandLineArgs CppSrcCode where
  arg :: Integer -> SrcState ValueState Value
arg Integer
n = SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r, ValueElim r) =>
SValue r -> SValue r -> SValue r
G.arg (Integer -> SrcState ValueState Value
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt (Integer -> SrcState ValueState Value)
-> Integer -> SrcState ValueState Value
forall a b. (a -> b) -> a -> b
$ Integer
nInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
1) SrcState ValueState Value
forall (r :: * -> *). CommandLineArgs r => SValue r
argsList
  argsList :: SrcState ValueState Value
argsList = State ValueState (CppSrcCode TypeData)
-> Doc -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
argvType (ClassName -> Doc
text ClassName
argv)
  argExists :: Integer -> SrcState ValueState Value
argExists Integer
i = SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *) smt. List r smt => SValue r -> SValue r
listSize SrcState ValueState Value
forall (r :: * -> *). CommandLineArgs r => SValue r
argsList SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
?> Integer -> SrcState ValueState Value
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt (Integer -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Integer -> Integer) -> Integer -> Integer
forall a b. (a -> b) -> a -> b
$ Integer
iInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
1)

instance NumericExpression CppSrcCode where
  #~ :: SrcState ValueState Value -> SrcState ValueState Value
(#~) = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr' State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
negateOp
  #/^ :: SrcState ValueState Value -> SrcState ValueState Value
(#/^) = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sqrtOp
  #| :: SrcState ValueState Value -> SrcState ValueState Value
(#|) = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
absOp
  #+ :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(#+) = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, TypeElim r, ValueElim r, ValueSym r) =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
plusOp
  #- :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(#-) = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, TypeElim r, ValueElim r, ValueSym r) =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
minusOp
  #* :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(#*) = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, TypeElim r, ValueElim r, ValueSym r) =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
multOp
  #/ :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(#/) = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, TypeElim r, ValueElim r, ValueSym r) =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
divideOp
  #% :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(#%) = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, TypeElim r, ValueElim r, ValueSym r) =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
moduloOp
  #^ :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(#^) = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, TypeElim r, ValueElim r, ValueSym r) =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr' State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
powerOp

  log :: SrcState ValueState Value -> SrcState ValueState Value
log = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
logOp
  ln :: SrcState ValueState Value -> SrcState ValueState Value
ln = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
lnOp
  exp :: SrcState ValueState Value -> SrcState ValueState Value
exp = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
expOp
  sin :: SrcState ValueState Value -> SrcState ValueState Value
sin = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sinOp
  cos :: SrcState ValueState Value -> SrcState ValueState Value
cos = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
cosOp
  tan :: SrcState ValueState Value -> SrcState ValueState Value
tan = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
tanOp
  csc :: SrcState ValueState Value -> SrcState ValueState Value
csc = SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(Literal r, NumericExpression r, TypeElim r) =>
SValue r -> SValue r
G.csc
  sec :: SrcState ValueState Value -> SrcState ValueState Value
sec = SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(Literal r, NumericExpression r, TypeElim r) =>
SValue r -> SValue r
G.sec
  cot :: SrcState ValueState Value -> SrcState ValueState Value
cot = SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(Literal r, NumericExpression r, TypeElim r) =>
SValue r -> SValue r
G.cot
  arcsin :: SrcState ValueState Value -> SrcState ValueState Value
arcsin = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
asinOp
  arccos :: SrcState ValueState Value -> SrcState ValueState Value
arccos = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
acosOp
  arctan :: SrcState ValueState Value -> SrcState ValueState Value
arctan = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
atanOp
  floor :: SrcState ValueState Value -> SrcState ValueState Value
floor = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
floorOp
  ceil :: SrcState ValueState Value -> SrcState ValueState Value
ceil = State ValueState (CppSrcCode OpData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r, ValueSym r) =>
VSUnOp r -> SValue r -> SValue r
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
ceilOp

instance BooleanExpression CppSrcCode where
  ?! :: SrcState ValueState Value -> SrcState ValueState Value
(?!) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r) =>
VSUnOp r -> VS (r TypeData) -> SValue r -> SValue r
typeUnExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
notOp State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
bool
  ?&& :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(?&&) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r) =>
VSBinOp r -> VS (r TypeData) -> SValue r -> SValue r -> SValue r
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
andOp State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
bool
  ?|| :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(?||) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r) =>
VSBinOp r -> VS (r TypeData) -> SValue r -> SValue r -> SValue r
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
orOp State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
bool

instance Comparison CppSrcCode where
  ?< :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(?<) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r) =>
VSBinOp r -> VS (r TypeData) -> SValue r -> SValue r -> SValue r
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessOp State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
bool
  ?<= :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(?<=) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r) =>
VSBinOp r -> VS (r TypeData) -> SValue r -> SValue r -> SValue r
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessEqualOp State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
bool
  ?> :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(?>) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r) =>
VSBinOp r -> VS (r TypeData) -> SValue r -> SValue r -> SValue r
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterOp State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
bool
  ?>= :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(?>=) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r) =>
VSBinOp r -> VS (r TypeData) -> SValue r -> SValue r -> SValue r
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterEqualOp State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
bool
  ?== :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(?==) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r) =>
VSBinOp r -> VS (r TypeData) -> SValue r -> SValue r -> SValue r
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
equalOp State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
bool
  ?!= :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
(?!=) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(OpElim r, RenderValue r, ValueElim r) =>
VSBinOp r -> VS (r TypeData) -> SValue r -> SValue r -> SValue r
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
notEqualOp State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
bool

instance ValueExpression CppSrcCode where
  inlineIf :: SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
inlineIf = SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(RenderValue r, ValueElim r, ValueSym r) =>
SValue r -> SValue r -> SValue r -> SValue r
C.inlineIf

  funcAppMixedArgs :: MixedCall CppSrcCode
funcAppMixedArgs = MixedCall CppSrcCode
forall (r :: * -> *). RenderValue r => MixedCall r
G.funcAppMixedArgs
  extFuncAppMixedArgs :: ClassName -> MixedCall CppSrcCode
extFuncAppMixedArgs ClassName
l ClassName
n State ValueState (CppSrcCode TypeData)
t [SrcState ValueState Value]
vs [(SrcState ValueState Variable, SrcState ValueState Value)]
ns = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addModuleImportVS ClassName
l)
    MixedCall CppSrcCode
forall (r :: * -> *). ValueExpression r => MixedCall r
funcAppMixedArgs ClassName
n State ValueState (CppSrcCode TypeData)
t [SrcState ValueState Value]
vs [(SrcState ValueState Variable, SrcState ValueState Value)]
ns
  libFuncAppMixedArgs :: ClassName -> MixedCall CppSrcCode
libFuncAppMixedArgs = ClassName -> MixedCall CppSrcCode
forall (r :: * -> *). ValueExpression r => ClassName -> MixedCall r
C.libFuncAppMixedArgs

  lambda :: [SrcState ValueState BinderD]
-> SrcState ValueState Value -> SrcState ValueState Value
lambda = ([CppSrcCode BinderD] -> CppSrcCode Value -> Doc)
-> [SrcState ValueState BinderD]
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(BinderElim r, RenderValue r, ValueSym r) =>
([r BinderD] -> r Value -> Doc)
-> [VSBinder r] -> SValue r -> SValue r
G.lambda [CppSrcCode BinderD] -> CppSrcCode Value -> Doc
cppLambda

  notNull :: SrcState ValueState Value -> SrcState ValueState Value
notNull SrcState ValueState Value
v = SrcState ValueState Value
v

instance OOValueExpression CppSrcCode where
  newObjMixedArgs :: State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState ValueState Value
newObjMixedArgs = MixedCall CppSrcCode
forall (r :: * -> *).
(RenderValue r, UnRepr r TypeData) =>
ClassName -> MixedCtorCall r
G.newObjMixedArgs ClassName
""
  extNewObjMixedArgs :: MixedCall CppSrcCode
extNewObjMixedArgs ClassName
l State ValueState (CppSrcCode TypeData)
t [SrcState ValueState Value]
vs [(SrcState ValueState Variable, SrcState ValueState Value)]
ns = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addModuleImportVS ClassName
l)
    State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState ValueState Value
forall (r :: * -> *). OOValueExpression r => MixedCtorCall r
newObjMixedArgs State ValueState (CppSrcCode TypeData)
t [SrcState ValueState Value]
vs [(SrcState ValueState Variable, SrcState ValueState Value)]
ns
  libNewObjMixedArgs :: MixedCall CppSrcCode
libNewObjMixedArgs = MixedCall CppSrcCode
forall (r :: * -> *).
OOValueExpression r =>
ClassName -> MixedCtorCall r
C.libNewObjMixedArgs

instance RenderValue CppSrcCode where
  inputFunc :: SrcState ValueState Value
inputFunc = SrcState ValueState Value -> SrcState ValueState Value
forall a. VS a -> VS a
addIOStreamImport (SrcState ValueState Value -> SrcState ValueState Value)
-> SrcState ValueState Value -> SrcState ValueState Value
forall a b. (a -> b) -> a -> b
$ State ValueState (CppSrcCode TypeData)
-> Doc -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
string (ClassName -> Doc
text ClassName
cin)
  printFunc :: SrcState ValueState Value
printFunc = SrcState ValueState Value -> SrcState ValueState Value
forall a. VS a -> VS a
addIOStreamImport (SrcState ValueState Value -> SrcState ValueState Value)
-> SrcState ValueState Value -> SrcState ValueState Value
forall a b. (a -> b) -> a -> b
$ State ValueState (CppSrcCode TypeData)
-> Doc -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void (ClassName -> Doc
text ClassName
cout)
  printLnFunc :: SrcState ValueState Value
printLnFunc = SrcState ValueState Value -> SrcState ValueState Value
forall a. VS a -> VS a
addIOStreamImport (SrcState ValueState Value -> SrcState ValueState Value)
-> SrcState ValueState Value -> SrcState ValueState Value
forall a b. (a -> b) -> a -> b
$ State ValueState (CppSrcCode TypeData)
-> Doc -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void (ClassName -> Doc
text ClassName
cout)
  printFileFunc :: SrcState ValueState Value -> SrcState ValueState Value
printFileFunc = (CppSrcCode TypeData
 -> CppSrcCode Value -> SrcState ValueState Value)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (m :: * -> *) a b c.
Monad m =>
(a -> b -> m c) -> m a -> m b -> m c
on2StateWrapped (\CppSrcCode TypeData
vt CppSrcCode Value
w -> CppSrcCode TypeData -> Doc -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
r TypeData -> Doc -> SValue r
mkVal CppSrcCode TypeData
vt (CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
w)) State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void
  printFileLnFunc :: SrcState ValueState Value -> SrcState ValueState Value
printFileLnFunc = (CppSrcCode TypeData
 -> CppSrcCode Value -> SrcState ValueState Value)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (m :: * -> *) a b c.
Monad m =>
(a -> b -> m c) -> m a -> m b -> m c
on2StateWrapped (\CppSrcCode TypeData
vt CppSrcCode Value
w -> CppSrcCode TypeData -> Doc -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
r TypeData -> Doc -> SValue r
mkVal CppSrcCode TypeData
vt (CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
w)) State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void

  cast :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value -> SrcState ValueState Value
cast = State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value -> SrcState ValueState Value
cppCast

  call :: Maybe ClassName -> Maybe Doc -> MixedCall CppSrcCode
call = ClassName -> Maybe ClassName -> Maybe Doc -> MixedCall CppSrcCode
forall (r :: * -> *).
(InternalVarElim r, RenderValue r, ValueElim r) =>
ClassName -> Maybe ClassName -> Maybe Doc -> MixedCall r
CP.call' ClassName
cppName

  valFromData :: Maybe Int
-> Maybe Integer
-> State ValueState (CppSrcCode TypeData)
-> Doc
-> SrcState ValueState Value
valFromData Maybe Int
p Maybe Integer
i State ValueState (CppSrcCode TypeData)
t' Doc
d = do
    CppSrcCode TypeData
t <- State ValueState (CppSrcCode TypeData)
t'
    CppSrcCode Value -> SrcState ValueState Value
forall a s. a -> State s a
toState (CppSrcCode Value -> SrcState ValueState Value)
-> CppSrcCode Value -> SrcState ValueState Value
forall a b. (a -> b) -> a -> b
$ (TypeData -> Doc -> Value)
-> CppSrcCode TypeData -> CppSrcCode Doc -> CppSrcCode Value
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues (Maybe Int -> Maybe Integer -> TypeData -> Doc -> Value
vd Maybe Int
p Maybe Integer
i) CppSrcCode TypeData
t (Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)

instance ValueElim CppSrcCode where
  valuePrec :: CppSrcCode Value -> Maybe Int
valuePrec = Value -> Maybe Int
valPrec (Value -> Maybe Int)
-> (CppSrcCode Value -> Value) -> CppSrcCode Value -> Maybe Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Value -> Value
forall a. CppSrcCode a -> a
unCPPSC
  valueInt :: CppSrcCode Value -> Maybe Integer
valueInt = Value -> Maybe Integer
valInt (Value -> Maybe Integer)
-> (CppSrcCode Value -> Value) -> CppSrcCode Value -> Maybe Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Value -> Value
forall a. CppSrcCode a -> a
unCPPSC
  value :: CppSrcCode Value -> Doc
value = Value -> Doc
val (Value -> Doc)
-> (CppSrcCode Value -> Value) -> CppSrcCode Value -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Value -> Value
forall a. CppSrcCode a -> a
unCPPSC

instance InternalValueExp CppSrcCode where
  objMethodCallMixedArgs' :: ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> [SrcState ValueState Value]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState ValueState Value
objMethodCallMixedArgs' ClassName
fn State ValueState (CppSrcCode TypeData)
tp SrcState ValueState Value
ob [SrcState ValueState Value]
posArgs [(SrcState ValueState Variable, SrcState ValueState Value)]
nmArgs = do
    CppSrcCode Value
ob' <- SrcState ValueState Value
ob
    let objTp :: CodeType
objTp = TypeData -> CodeType
cType (TypeData -> CodeType) -> TypeData -> CodeType
forall a b. (a -> b) -> a -> b
$ CppSrcCode TypeData -> TypeData
forall (repr :: * -> *) contents.
UnRepr repr contents =>
repr contents -> contents
unRepr (CppSrcCode TypeData -> TypeData)
-> CppSrcCode TypeData -> TypeData
forall a b. (a -> b) -> a -> b
$ CppSrcCode Value -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r Value -> r TypeData
valueType CppSrcCode Value
ob'
    case CodeType
objTp of
      (Reference CodeType
_) -> Maybe ClassName -> Maybe Doc -> MixedCall CppSrcCode
forall (r :: * -> *).
RenderValue r =>
Maybe ClassName -> Maybe Doc -> MixedCall r
RC.call Maybe ClassName
forall a. Maybe a
Nothing (Doc -> Maybe Doc
forall a. a -> Maybe a
Just (Doc -> Maybe Doc) -> Doc -> Maybe Doc
forall a b. (a -> b) -> a -> b
$ CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
ob' Doc -> Doc -> Doc
<> Doc
ptrAccess') ClassName
fn State ValueState (CppSrcCode TypeData)
tp [SrcState ValueState Value]
posArgs [(SrcState ValueState Variable, SrcState ValueState Value)]
nmArgs
      CodeType
_ -> ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> [SrcState ValueState Value]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState ValueState Value
forall (r :: * -> *).
(RenderValue r, ValueElim r) =>
ClassName
-> VS (r TypeData)
-> SValue r
-> [SValue r]
-> NamedArgs r
-> SValue r
G.objMethodCall ClassName
fn State ValueState (CppSrcCode TypeData)
tp SrcState ValueState Value
ob [SrcState ValueState Value]
posArgs [(SrcState ValueState Variable, SrcState ValueState Value)]
nmArgs
  classMethodCallMixedArgs' :: ClassName
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState ValueState Value
classMethodCallMixedArgs' ClassName
f State ValueState (CppSrcCode TypeData)
t State ValueState (CppSrcCode TypeData)
cls [SrcState ValueState Value]
vs [(SrcState ValueState Variable, SrcState ValueState Value)]
ns = do
    CppSrcCode TypeData
c <- State ValueState (CppSrcCode TypeData)
cls
    Maybe ClassName -> Maybe Doc -> MixedCall CppSrcCode
forall (r :: * -> *).
RenderValue r =>
Maybe ClassName -> Maybe Doc -> MixedCall r
RC.call Maybe ClassName
forall a. Maybe a
Nothing (Doc -> Maybe Doc
forall a. a -> Maybe a
Just (Doc -> Maybe Doc) -> Doc -> Maybe Doc
forall a b. (a -> b) -> a -> b
$ CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppSrcCode TypeData
c Doc -> Doc -> Doc
<> ClassName -> Doc
text ClassName
nmSpc) ClassName
f State ValueState (CppSrcCode TypeData)
t [SrcState ValueState Value]
vs [(SrcState ValueState Variable, SrcState ValueState Value)]
ns

instance FunctionSym CppSrcCode where

instance OOFunctionSym CppSrcCode where
  func :: ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState FuncData
func = ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState FuncData
forall (r :: * -> *).
(RenderFunction r, ValueElim r, ValueExpression r) =>
ClassName -> VS (r TypeData) -> [SValue r] -> VS (r FuncData)
G.func
  objAccess :: SrcState ValueState Value
-> SrcState ValueState FuncData -> SrcState ValueState Value
objAccess = SrcState ValueState Value
-> SrcState ValueState FuncData -> SrcState ValueState Value
forall (r :: * -> *).
(FunctionElim r, RenderValue r, ValueElim r) =>
SValue r -> VS (r FuncData) -> SValue r
G.objAccess

instance GetSet CppSrcCode where
  get :: SrcState ValueState Value
-> SrcState ValueState Variable -> SrcState ValueState Value
get = SrcState ValueState Value
-> SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *).
(InternalGetSet r, OOFunctionSym r) =>
SValue r -> SVariable r -> SValue r
G.get
  set :: SrcState ValueState Value
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ValueState Value
set = SrcState ValueState Value
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(InternalGetSet r, OOFunctionSym r) =>
SValue r -> SVariable r -> SValue r -> SValue r
G.set

instance IndexTranslator CppSrcCode where
  intToIndex :: SrcState ValueState Value -> SrcState ValueState Value
intToIndex = SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). SValue r -> SValue r
CP.intToIndex
  indexToInt :: SrcState ValueState Value -> SrcState ValueState Value
indexToInt = SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). SValue r -> SValue r
CP.indexToInt

instance Reference CppSrcCode where
  makeRef :: SrcState ValueState Value -> SrcState ValueState Value
makeRef SrcState ValueState Value
vl = do
    CppSrcCode Value
vl' <- SrcState ValueState Value
vl
    let vlTyp :: CodeType
vlTyp = TypeData -> CodeType
cType (TypeData -> CodeType) -> TypeData -> CodeType
forall a b. (a -> b) -> a -> b
$ CppSrcCode TypeData -> TypeData
forall (repr :: * -> *) contents.
UnRepr repr contents =>
repr contents -> contents
unRepr (CppSrcCode TypeData -> TypeData)
-> CppSrcCode TypeData -> TypeData
forall a b. (a -> b) -> a -> b
$ CppSrcCode Value -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r Value -> r TypeData
valueType CppSrcCode Value
vl'
        vlDoc :: Doc
vlDoc = CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
vl'
    State ValueState (CppSrcCode TypeData)
-> Doc -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal (CodeType -> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). OOTypeSym r => CodeType -> VS (r TypeData)
convTypeOO (CodeType -> State ValueState (CppSrcCode TypeData))
-> CodeType -> State ValueState (CppSrcCode TypeData)
forall a b. (a -> b) -> a -> b
$ CodeType -> CodeType
Reference CodeType
vlTyp) (Doc
cppPtr Doc -> Doc -> Doc
<> Doc
vlDoc)
  maybeDeref :: SrcState ValueState Value -> SrcState ValueState Value
maybeDeref SrcState ValueState Value
vl = do
    CppSrcCode Value
vl' <- SrcState ValueState Value
vl
    let vlTyp :: CodeType
vlTyp = TypeData -> CodeType
cType (TypeData -> CodeType) -> TypeData -> CodeType
forall a b. (a -> b) -> a -> b
$ CppSrcCode TypeData -> TypeData
forall (repr :: * -> *) contents.
UnRepr repr contents =>
repr contents -> contents
unRepr (CppSrcCode TypeData -> TypeData)
-> CppSrcCode TypeData -> TypeData
forall a b. (a -> b) -> a -> b
$ CppSrcCode Value -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r Value -> r TypeData
valueType CppSrcCode Value
vl'
        vlDoc :: Doc
vlDoc = CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
vl'
    case CodeType
vlTyp of
      (Reference CodeType
tp) -> State ValueState (CppSrcCode TypeData)
-> Doc -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal (CodeType -> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). OOTypeSym r => CodeType -> VS (r TypeData)
convTypeOO CodeType
tp) (Doc
cppDeref Doc -> Doc -> Doc
<> Doc
vlDoc)
      CodeType
_ -> SrcState ValueState Value
vl

instance Array CppSrcCode where
  arrayElem :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Variable
arrayElem = SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Variable
forall (r :: * -> *).
(IndexTranslator r, RenderVariable r, ValueElim r) =>
SValue r -> SValue r -> SVariable r
G.arrayElem
  arrayLength :: SrcState ValueState Value -> SrcState ValueState Value
arrayLength = SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *) smt. List r smt => SValue r -> SValue r
listSize
  arrayCopy :: SrcState ValueState Value -> SrcState ValueState Value
arrayCopy = SrcState ValueState Value -> SrcState ValueState Value
forall a. a -> a
id -- C++ automatically copies std::vectors on assignment

instance List CppSrcCode (Doc, Terminator) where
  -- TODO [Brandon Bosman, 06/10/2026]: Check if the cast is really necessary
  listSize :: SrcState ValueState Value -> SrcState ValueState Value
listSize SrcState ValueState Value
v = State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> SValue r -> SValue r
cast State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
int (ClassName -> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
InternalValueExp r =>
ClassName -> SValue r -> SValue r
C.listSize ClassName
"size" SrcState ValueState Value
v)
  listAdd :: SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
listAdd SrcState ValueState Value
list SrcState ValueState Value
idx SrcState ValueState Value
vl = SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
SValue r -> MS (r smt)
valStmt (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$
    State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> ClassName
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *).
InternalValueExp r =>
VS (r TypeData) -> SValue r -> ClassName -> [SValue r] -> SValue r
objMethodCall State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void SrcState ValueState Value
list ClassName
cppListAdd [SrcState ValueState Value -> SrcState ValueState Value
iterBegin SrcState ValueState Value
list SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
#+ SrcState ValueState Value
idx, SrcState ValueState Value
vl]
  listAppend :: SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
listAppend = ClassName
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalValueExp r, StatementSym r smt) =>
ClassName -> SValue r -> SValue r -> MS (r smt)
CG.listAppend ClassName
cppListAppend
  listAccess :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
listAccess = SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
(IndexTranslator r, InternalListFunc r, FunctionElim r,
 RenderFunction r, RenderValue r, TypeElim r, ValueElim r) =>
SValue r -> SValue r -> SValue r
G.listAccess
  listSet :: SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
listSet SrcState ValueState Value
list SrcState ValueState Value
idx SrcState ValueState Value
vl = do
    CppSrcCode Value
listAccessVal <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
-> SrcState ValueState Value
-> StateT MethodState Identity (CppSrcCode Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Value) ValueState)
-> MethodState -> Focusing Identity (CppSrcCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r
listAccess SrcState ValueState Value
list SrcState ValueState Value
idx)
    let listAccessVar :: SrcState ValueState Variable
listAccessVar =
          ClassName
-> CppSrcCode TypeData -> Doc -> SrcState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> r TypeData -> Doc -> SVariable r
mkVar (Doc -> ClassName
render (Doc -> ClassName) -> Doc -> ClassName
forall a b. (a -> b) -> a -> b
$ CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
listAccessVal) (CppSrcCode Value -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r Value -> r TypeData
valueType CppSrcCode Value
listAccessVal) (CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
listAccessVal)
    SrcState ValueState Variable
listAccessVar SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
&= SrcState ValueState Value
vl
  indexOf :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
indexOf SrcState ValueState Value
l SrcState ValueState Value
v = SrcState ValueState Value -> SrcState ValueState Value
forall a. VS a -> VS a
addAlgorithmImportVS (SrcState ValueState Value -> SrcState ValueState Value)
-> SrcState ValueState Value -> SrcState ValueState Value
forall a b. (a -> b) -> a -> b
$ SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
cppIndexFunc SrcState ValueState Value
l SrcState ValueState Value
v SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
#- SrcState ValueState Value -> SrcState ValueState Value
iterBegin SrcState ValueState Value
l

instance Set CppSrcCode where
  contains :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
contains = ClassName
-> ClassName
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
(Comparison r, OOFunctionSym r) =>
ClassName -> ClassName -> SValue r -> SValue r -> SValue r
CP.containsInt ClassName
cppIndex ClassName
cppIterEnd
  setAdd :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
setAdd = ClassName
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
InternalValueExp r =>
ClassName -> SValue r -> SValue r -> SValue r
CP.setMethodCall ClassName
cppListAdd
  setRemove :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
setRemove = ClassName
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall (r :: * -> *).
InternalValueExp r =>
ClassName -> SValue r -> SValue r -> SValue r
CP.setMethodCall ClassName
cppListRemove
  setUnion :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
setUnion = ClassName
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
forall a. HasCallStack => ClassName -> a
error ClassName
"not done yet"

instance InternalList CppSrcCode where
  listSlice' :: Maybe (SrcState ValueState Value)
-> Maybe (SrcState ValueState Value)
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState Doc
listSlice' = Maybe (SrcState ValueState Value)
-> Maybe (SrcState ValueState Value)
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState Doc
forall (r :: * -> *) smt.
(SharedStatement r smt, ValueElim r, VariableElim r) =>
Maybe (SValue r)
-> Maybe (SValue r)
-> Maybe (SValue r)
-> SVariable r
-> SValue r
-> MS (r Doc)
M.listSlice

instance InternalGetSet CppSrcCode where
  getFunc :: SrcState ValueState Variable -> SrcState ValueState FuncData
getFunc = SrcState ValueState Variable -> SrcState ValueState FuncData
forall (r :: * -> *).
(OOFunctionSym r, VariableElim r) =>
SVariable r -> VS (r FuncData)
G.getFunc
  setFunc :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ValueState FuncData
setFunc = State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ValueState FuncData
forall (r :: * -> *).
(OOFunctionSym r, VariableElim r) =>
VS (r TypeData) -> SVariable r -> SValue r -> VS (r FuncData)
G.setFunc

instance InternalListFunc CppSrcCode where
  listAccessFunc :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value -> SrcState ValueState FuncData
listAccessFunc = ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState FuncData
forall (r :: * -> *).
(OOFunctionSym r, TypeElim r) =>
ClassName -> VS (r TypeData) -> SValue r -> VS (r FuncData)
CP.listAccessFunc' ClassName
cppListAccess

instance BinderSym CppSrcCode where
  binder :: ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState BinderD
binder ClassName
nm State ValueState (CppSrcCode TypeData)
tp = (TypeData -> BinderD) -> CppSrcCode TypeData -> CppSrcCode BinderD
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (ClassName -> TypeData -> BinderD
bindFormD ClassName
nm) (CppSrcCode TypeData -> CppSrcCode BinderD)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState BinderD
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
<$> State ValueState (CppSrcCode TypeData)
tp

instance BinderElim CppSrcCode where
  binderName :: CppSrcCode BinderD -> ClassName
binderName = BinderD -> ClassName
bindName (BinderD -> ClassName)
-> (CppSrcCode BinderD -> BinderD)
-> CppSrcCode BinderD
-> ClassName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode BinderD -> BinderD
forall a. CppSrcCode a -> a
unCPPSC
  binderType :: CppSrcCode BinderD -> CppSrcCode TypeData
binderType = (BinderD -> TypeData) -> CppSrcCode BinderD -> CppSrcCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue BinderD -> TypeData
bindType

instance InternalBinderElim CppSrcCode where
  binderElim :: CppSrcCode BinderD -> Doc
binderElim = ClassName -> Doc
text (ClassName -> Doc)
-> (CppSrcCode BinderD -> ClassName) -> CppSrcCode BinderD -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BinderD -> ClassName
bindName (BinderD -> ClassName)
-> (CppSrcCode BinderD -> BinderD)
-> CppSrcCode BinderD
-> ClassName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode BinderD -> BinderD
forall a. CppSrcCode a -> a
unCPPSC

instance RenderFunction CppSrcCode where
  funcFromData :: Doc
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
funcFromData Doc
d = (CppSrcCode TypeData -> CppSrcCode FuncData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue ((TypeData -> FuncData)
-> CppSrcCode TypeData -> CppSrcCode FuncData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (TypeData -> Doc -> FuncData
`fd` Doc
d))

instance FunctionElim CppSrcCode where
  functionType :: CppSrcCode FuncData -> CppSrcCode TypeData
functionType = (FuncData -> TypeData)
-> CppSrcCode FuncData -> CppSrcCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue FuncData -> TypeData
fType
  function :: CppSrcCode FuncData -> Doc
function = FuncData -> Doc
funcDoc (FuncData -> Doc)
-> (CppSrcCode FuncData -> FuncData) -> CppSrcCode FuncData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode FuncData -> FuncData
forall a. CppSrcCode a -> a
unCPPSC

instance InternalAssignStmt CppSrcCode (Doc, Terminator) where
  multiAssign :: [SrcState ValueState Variable]
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
multiAssign [SrcState ValueState Variable]
_ [SrcState ValueState Value]
_ = ClassName -> SrcState MethodState (Doc, Terminator)
forall a. HasCallStack => ClassName -> a
error (ClassName -> SrcState MethodState (Doc, Terminator))
-> ClassName -> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ ClassName -> ClassName
C.multiAssignError ClassName
cppName

instance InternalIOStmt CppSrcCode (Doc, Terminator) where
  printSt :: Bool
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
printSt Bool
nl Maybe (SrcState ValueState Value)
_ = Bool
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(RenderStatement r smt, ValueElim r) =>
Bool -> SValue r -> SValue r -> MS (r smt)
cppPrint Bool
nl

instance InternalControlStmt CppSrcCode (Doc, Terminator) where
  multiReturn :: [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
multiReturn [SrcState ValueState Value]
_ = ClassName -> SrcState MethodState (Doc, Terminator)
forall a. HasCallStack => ClassName -> a
error (ClassName -> SrcState MethodState (Doc, Terminator))
-> ClassName -> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ ClassName -> ClassName
C.multiReturnError ClassName
cppName

instance RenderStatement CppSrcCode (Doc, Terminator) where
  stmt :: SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
stmt = SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(RenderStatement r smt, StatementElim r smt) =>
MS (r smt) -> MS (r smt)
G.stmt
  loopStmt :: SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
loopStmt = SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(RenderStatement r smt, StatementElim r smt) =>
MS (r smt) -> MS (r smt)
G.loopStmt
  stmtFromData :: Doc -> Terminator -> SrcState MethodState (Doc, Terminator)
stmtFromData Doc
d Terminator
t = CppSrcCode (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a s. a -> State s a
toState (CppSrcCode (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> CppSrcCode (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ (Doc, Terminator) -> CppSrcCode (Doc, Terminator)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, Terminator
t)

instance StatementElim CppSrcCode (Doc, Terminator) where
  statement :: CppSrcCode (Doc, Terminator) -> Doc
statement = (Doc, Terminator) -> Doc
forall a b. (a, b) -> a
fst ((Doc, Terminator) -> Doc)
-> (CppSrcCode (Doc, Terminator) -> (Doc, Terminator))
-> CppSrcCode (Doc, Terminator)
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode (Doc, Terminator) -> (Doc, Terminator)
forall a. CppSrcCode a -> a
unCPPSC
  statementTerm :: CppSrcCode (Doc, Terminator) -> Terminator
statementTerm = (Doc, Terminator) -> Terminator
forall a b. (a, b) -> b
snd ((Doc, Terminator) -> Terminator)
-> (CppSrcCode (Doc, Terminator) -> (Doc, Terminator))
-> CppSrcCode (Doc, Terminator)
-> Terminator
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode (Doc, Terminator) -> (Doc, Terminator)
forall a. CppSrcCode a -> a
unCPPSC

instance StatementSym CppSrcCode (Doc, Terminator) where
  valStmt :: SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
valStmt = Terminator
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(RenderStatement r smt, ValueElim r) =>
Terminator -> SValue r -> MS (r smt)
G.valStmt Terminator
Semi
  emptyStmt :: SrcState MethodState (Doc, Terminator)
emptyStmt = SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. RenderStatement r smt => MS (r smt)
G.emptyStmt
  multi :: [SrcState MethodState (Doc, Terminator)]
-> SrcState MethodState (Doc, Terminator)
multi = ([CppSrcCode (Doc, Terminator)] -> CppSrcCode (Doc, Terminator))
-> [SrcState MethodState (Doc, Terminator)]
-> SrcState MethodState (Doc, Terminator)
forall a b s. ([a] -> b) -> [State s a] -> State s b
onStateList (([(Doc, Terminator)] -> (Doc, Terminator))
-> [CppSrcCode (Doc, Terminator)] -> CppSrcCode (Doc, Terminator)
forall (m :: * -> *) a b. Monad m => ([a] -> b) -> [m a] -> m b
onCodeList [(Doc, Terminator)] -> (Doc, Terminator)
R.multiStmt)

instance AssignStatement CppSrcCode (Doc, Terminator) where
  assign :: SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
assign = Terminator
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalVarElim r, RenderStatement r smt, ValueElim r) =>
Terminator -> SVariable r -> SValue r -> MS (r smt)
G.assign Terminator
Semi
  &-= :: SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
(&-=) = Terminator
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalVarElim r, RenderStatement r smt, ValueElim r) =>
Terminator -> SVariable r -> SValue r -> MS (r smt)
G.subAssign Terminator
Semi
  &+= :: SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
(&+=) = SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalVarElim r, RenderStatement r smt, ValueElim r) =>
SVariable r -> SValue r -> MS (r smt)
C.increment
  &++ :: SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
(&++) = SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalVarElim r, RenderStatement r smt) =>
SVariable r -> MS (r smt)
C.increment1
  &-- :: SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
(&--) = SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalVarElim r, RenderStatement r smt) =>
SVariable r -> MS (r smt)
C.decrement1

instance DeclStatement CppSrcCode (Doc, Terminator) where
  -- TODO [Brandon Bosman, 05/29/2026]: consider re-enabling `varDec` for arrays
  varDec :: SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState (Doc, Terminator)
varDec SrcState ValueState Variable
vr CppSrcCode ScopeData
scp = do
    CppSrcCode Variable
vr' <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
vr
    let tp :: CodeType
tp = (TypeData -> CodeType
cType (TypeData -> CodeType)
-> (CppSrcCode Variable -> TypeData)
-> CppSrcCode Variable
-> CodeType
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode TypeData -> TypeData
forall a. CppSrcCode a -> a
unCPPSC (CppSrcCode TypeData -> TypeData)
-> (CppSrcCode Variable -> CppSrcCode TypeData)
-> CppSrcCode Variable
-> TypeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType) CppSrcCode Variable
vr'
    case CodeType
tp of
      (Array CodeType
_) -> ClassName -> SrcState MethodState (Doc, Terminator)
forall a. HasCallStack => ClassName -> a
error ClassName
"Can't use `varDec` for C++ arrays; use `arrayDec`"
      CodeType
_         -> CppSrcCode AttachmentData
-> CppSrcCode AttachmentData
-> Doc
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) att smt.
(InternalVarElim r, PermElim r att, RenderStatement r smt,
 ScopeElim r, UnRepr r TypeData, TypeElim r, VariableElim r) =>
r att -> r att -> Doc -> SVariable r -> r ScopeData -> MS (r smt)
C.varDec CppSrcCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
classLevel CppSrcCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
instanceLevel Doc
empty SrcState ValueState Variable
vr CppSrcCode ScopeData
scp
  varDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
varDecDef = Terminator
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(DeclStatement r smt, RenderStatement r smt, StatementElim r smt,
 ValueElim r) =>
Terminator -> SVariable r -> r ScopeData -> SValue r -> MS (r smt)
C.varDecDef Terminator
Semi
  setDec :: SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState (Doc, Terminator)
setDec = SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
varDec
  setDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
setDecDef = SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
varDecDef
  listDec :: Integer
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState MethodState (Doc, Terminator)
listDec Integer
n = (CppSrcCode Value -> Doc)
-> SrcState ValueState Value
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(DeclStatement r smt, RenderStatement r smt,
 StatementElim r smt) =>
(r Value -> Doc)
-> SValue r -> SVariable r -> r ScopeData -> MS (r smt)
C.listDec CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
cppListDecDoc (Integer -> SrcState ValueState Value
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt Integer
n)
  listDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
listDecDef = ([CppSrcCode Value] -> Doc)
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(DeclStatement r smt, RenderStatement r smt,
 StatementElim r smt) =>
([r Value] -> Doc)
-> SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
cppListDecDef [CppSrcCode Value] -> Doc
forall (r :: * -> *). ValueElim r => [r Value] -> Doc
cppListDecDefDoc
  arrayDec :: Integer
-> SrcState ValueState Value
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState MethodState (Doc, Terminator)
arrayDec Integer
n SrcState ValueState Value
_ SrcState ValueState Variable
vr CppSrcCode ScopeData
scp = do
    Doc
decBase <- SrcState ValueState Variable -> CppSrcCode ScopeData -> MS Doc
arrayDecBase SrcState ValueState Variable
vr CppSrcCode ScopeData
scp
    let sz' :: SrcState ValueState Value
sz' = Integer -> SrcState ValueState Value
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt Integer
n :: SValue CppSrcCode
    CppSrcCode Value
sz <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
-> SrcState ValueState Value
-> StateT MethodState Identity (CppSrcCode Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Value) ValueState)
-> MethodState -> Focusing Identity (CppSrcCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Value
sz'
    Doc -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmt (Doc -> SrcState MethodState (Doc, Terminator))
-> Doc -> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ Doc
decBase Doc -> Doc -> Doc
<> Doc -> Doc
parens (CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
sz)
  arrayDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
arrayDecDef SrcState ValueState Variable
vr CppSrcCode ScopeData
scp [SrcState ValueState Value]
vals = do
    Doc
decBase <- SrcState ValueState Variable -> CppSrcCode ScopeData -> MS Doc
arrayDecBase SrcState ValueState Variable
vr CppSrcCode ScopeData
scp
    [CppSrcCode Value]
vs <- (SrcState ValueState Value
 -> StateT MethodState Identity (CppSrcCode Value))
-> [SrcState ValueState Value]
-> StateT MethodState Identity [CppSrcCode Value]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM (LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
-> SrcState ValueState Value
-> StateT MethodState Identity (CppSrcCode Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Value) ValueState)
-> MethodState -> Focusing Identity (CppSrcCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS) [SrcState ValueState Value]
vals
    Doc -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmt (Doc -> SrcState MethodState (Doc, Terminator))
-> Doc -> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ Doc
decBase Doc -> Doc -> Doc
<+> Doc -> Doc
braces ([CppSrcCode Value] -> Doc
forall (r :: * -> *). ValueElim r => [r Value] -> Doc
valueList [CppSrcCode Value]
vs)
  constDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
constDecDef = SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalVarElim r, RenderStatement r smt, ScopeElim r,
 UnRepr r TypeData, ValueElim r, VariableElim r) =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
CG.constDecDef
  funcDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
funcDecDef = SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
cppFuncDecDef

instance OODeclStatement CppSrcCode (Doc, Terminator) where
  objDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
objDecDef = SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
varDecDef
  objDecNew :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
objDecNew = SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(DeclStatement r smt, OOValueExpression r, VariableElim r) =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
G.objDecNew
  extObjDecNew :: ClassName
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
extObjDecNew = ClassName
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Value]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(DeclStatement r smt, OOValueExpression r, VariableElim r) =>
ClassName -> SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
C.extObjDecNew

instance IOStatement CppSrcCode (Doc, Terminator) where
  print :: SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
print      = Bool
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalIOStmt r smt, SharedStatement r smt, TypeElim r) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MS (r smt)
G.print Bool
False Maybe (SrcState ValueState Value)
forall a. Maybe a
Nothing SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r
printFunc
  printLn :: SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
printLn    = Bool
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalIOStmt r smt, SharedStatement r smt, TypeElim r) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MS (r smt)
G.print Bool
True  Maybe (SrcState ValueState Value)
forall a. Maybe a
Nothing SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r
printLnFunc
  printStr :: ClassName -> SrcState MethodState (Doc, Terminator)
printStr   = Bool
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalIOStmt r smt, SharedStatement r smt, TypeElim r) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MS (r smt)
G.print Bool
False Maybe (SrcState ValueState Value)
forall a. Maybe a
Nothing SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r
printFunc   (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (ClassName -> SrcState ValueState Value)
-> ClassName
-> SrcState MethodState (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> SrcState ValueState Value
forall (r :: * -> *). Literal r => ClassName -> SValue r
litString
  printStrLn :: ClassName -> SrcState MethodState (Doc, Terminator)
printStrLn = Bool
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalIOStmt r smt, SharedStatement r smt, TypeElim r) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MS (r smt)
G.print Bool
True  Maybe (SrcState ValueState Value)
forall a. Maybe a
Nothing SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r
printLnFunc (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (ClassName -> SrcState ValueState Value)
-> ClassName
-> SrcState MethodState (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> SrcState ValueState Value
forall (r :: * -> *). Literal r => ClassName -> SValue r
litString

  printFile :: SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
printFile SrcState ValueState Value
f      = Bool
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalIOStmt r smt, SharedStatement r smt, TypeElim r) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MS (r smt)
G.print Bool
False (SrcState ValueState Value -> Maybe (SrcState ValueState Value)
forall a. a -> Maybe a
Just SrcState ValueState Value
f) (SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileFunc SrcState ValueState Value
f)
  printFileLn :: SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
printFileLn SrcState ValueState Value
f    = Bool
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalIOStmt r smt, SharedStatement r smt, TypeElim r) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MS (r smt)
G.print Bool
True  (SrcState ValueState Value -> Maybe (SrcState ValueState Value)
forall a. a -> Maybe a
Just SrcState ValueState Value
f) (SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileLnFunc SrcState ValueState Value
f)
  printFileStr :: SrcState ValueState Value
-> ClassName -> SrcState MethodState (Doc, Terminator)
printFileStr SrcState ValueState Value
f   = Bool
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalIOStmt r smt, SharedStatement r smt, TypeElim r) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MS (r smt)
G.print Bool
False (SrcState ValueState Value -> Maybe (SrcState ValueState Value)
forall a. a -> Maybe a
Just SrcState ValueState Value
f) (SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileFunc SrcState ValueState Value
f)   (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (ClassName -> SrcState ValueState Value)
-> ClassName
-> SrcState MethodState (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> SrcState ValueState Value
forall (r :: * -> *). Literal r => ClassName -> SValue r
litString
  printFileStrLn :: SrcState ValueState Value
-> ClassName -> SrcState MethodState (Doc, Terminator)
printFileStrLn SrcState ValueState Value
f = Bool
-> Maybe (SrcState ValueState Value)
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalIOStmt r smt, SharedStatement r smt, TypeElim r) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MS (r smt)
G.print Bool
True  (SrcState ValueState Value -> Maybe (SrcState ValueState Value)
forall a. a -> Maybe a
Just SrcState ValueState Value
f) (SrcState ValueState Value -> SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileLnFunc SrcState ValueState Value
f) (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> (ClassName -> SrcState ValueState Value)
-> ClassName
-> SrcState MethodState (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> SrcState ValueState Value
forall (r :: * -> *). Literal r => ClassName -> SValue r
litString

  getInput :: SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
getInput SrcState ValueState Variable
v = SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
cppInput SrcState ValueState Variable
v SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r
inputFunc
  discardInput :: SrcState MethodState (Doc, Terminator)
discardInput = SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a. MS a -> MS a
addAlgorithmImport (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a. MS a -> MS a
addLimitsImport (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ Char
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
cppDiscardInput Char
'\n'
    SrcState ValueState Value
forall (r :: * -> *). RenderValue r => SValue r
inputFunc
  getFileInput :: SrcState ValueState Value
-> SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
getFileInput SrcState ValueState Value
f SrcState ValueState Variable
v = SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
cppInput SrcState ValueState Variable
v SrcState ValueState Value
f
  discardFileInput :: SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
discardFileInput SrcState ValueState Value
f = SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a. MS a -> MS a
addAlgorithmImport (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a. MS a -> MS a
addLimitsImport (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$
    Char
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
cppDiscardInput Char
' ' SrcState ValueState Value
f

  openFileR :: SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
openFileR = ClassName
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
cppOpenFile ClassName
cppR
  openFileW :: SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
openFileW = ClassName
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
cppOpenFile ClassName
cppW
  openFileA :: SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
openFileA = ClassName
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
cppOpenFile ClassName
cppA
  closeFile :: SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
closeFile = ClassName
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalValueExp r, StatementSym r smt) =>
ClassName -> SValue r -> MS (r smt)
G.closeFile ClassName
cppClose

  getFileInputLine :: SrcState ValueState Value
-> SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
getFileInputLine SrcState ValueState Value
f SrcState ValueState Variable
v = SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
SValue r -> MS (r smt)
valStmt (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
getLineFunc SrcState ValueState Value
f (SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SrcState ValueState Variable
v)
  discardFileLine :: SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
discardFileLine SrcState ValueState Value
f = SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a. MS a -> MS a
addLimitsImport (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ Char
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
cppDiscardInput Char
'\n' SrcState ValueState Value
f
  getFileInputAll :: SrcState ValueState Value
-> SrcState ValueState Variable
-> SrcState MethodState (Doc, Terminator)
getFileInputAll SrcState ValueState Value
f SrcState ValueState Variable
v = do
    CppSrcCode Variable
v' <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
v
    ScopeData
scpData <- ClassName -> MS ScopeData
getVarScope (ClassName -> MS ScopeData) -> ClassName -> MS ScopeData
forall a b. (a -> b) -> a -> b
$ CppSrcCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName CppSrcCode Variable
v'
    let scp :: CppSrcCode ScopeData
scp = ScopeData -> CppSrcCode ScopeData
forall (r :: * -> *). ScopeSym r => ScopeData -> r ScopeData
convScope ScopeData
scpData
        l_line :: ClassName
l_line = ClassName
"nextLine"
        var_line :: SrcState ValueState Variable
var_line = ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
VariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
var ClassName
l_line State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
string
        v_line :: SrcState ValueState Value
v_line = SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SrcState ValueState Variable
var_line
    [SrcState MethodState (Doc, Terminator)]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
[MS (r smt)] -> MS (r smt)
multi [SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
varDec SrcState ValueState Variable
var_line CppSrcCode ScopeData
scp,
      SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r Doc) -> MS (r smt)
while (SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
getLineFunc SrcState ValueState Value
f SrcState ValueState Value
v_line)
        (SrcState MethodState (Doc, Terminator) -> SrcState MethodState Doc
forall (r :: * -> *) smt. BodySym r smt => MS (r smt) -> MS (r Doc)
oneLiner (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState Doc)
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
forall a b. (a -> b) -> a -> b
$ SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> MS (r smt)
listAppend (SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SrcState ValueState Variable
v) SrcState ValueState Value
v_line)]

instance StringStatement CppSrcCode (Doc, Terminator) where
  stringSplit :: Char
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
stringSplit Char
d SrcState ValueState Variable
vnew SrcState ValueState Value
s = do
    CppSrcCode Variable
vn <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
vnew
    ScopeData
scpData <- ClassName -> MS ScopeData
getVarScope (ClassName -> MS ScopeData) -> ClassName -> MS ScopeData
forall a b. (a -> b) -> a -> b
$ CppSrcCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName CppSrcCode Variable
vn
    let scp :: CppSrcCode ScopeData
scp = ScopeData -> CppSrcCode ScopeData
forall (r :: * -> *). ScopeSym r => ScopeData -> r ScopeData
convScope ScopeData
scpData
        l_ss :: ClassName
l_ss = ClassName
"ss"
        var_ss :: SrcState ValueState Variable
var_ss = ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
VariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
var ClassName
l_ss (ClassName -> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). OOTypeSym r => ClassName -> VS (r TypeData)
obj ClassName
stringstream)
        v_ss :: SrcState ValueState Value
v_ss = SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SrcState ValueState Variable
var_ss
        l_word :: ClassName
l_word = ClassName
"word"
        var_word :: SrcState ValueState Variable
var_word = ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
VariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
var ClassName
l_word State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
string
        v_word :: SrcState ValueState Value
v_word = SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SrcState ValueState Variable
var_word
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> MethodState -> MethodState
addLangImport ClassName
sstream) StateT MethodState Identity ()
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b.
StateT MethodState Identity a
-> StateT MethodState Identity b -> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [SrcState MethodState (Doc, Terminator)]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
[MS (r smt)] -> MS (r smt)
multi [
        SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
SValue r -> MS (r smt)
valStmt (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SrcState ValueState Variable
vnew SrcState ValueState Value
-> SrcState ValueState FuncData -> SrcState ValueState Value
forall (r :: * -> *).
OOFunctionSym r =>
SValue r -> VS (r FuncData) -> SValue r
$. SrcState ValueState FuncData
clearFunc,
        SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
varDec SrcState ValueState Variable
var_ss CppSrcCode ScopeData
scp,
        SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
SValue r -> MS (r smt)
valStmt (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
strFunc SrcState ValueState Value
v_ss SrcState ValueState Value
s,
        SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
varDec SrcState ValueState Variable
var_word CppSrcCode ScopeData
scp,
        SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r Doc) -> MS (r smt)
while (SrcState ValueState Value
-> SrcState ValueState Value -> Char -> SrcState ValueState Value
getLine3ArgFunc SrcState ValueState Value
v_ss SrcState ValueState Value
v_word Char
d)
          (SrcState MethodState (Doc, Terminator) -> SrcState MethodState Doc
forall (r :: * -> *) smt. BodySym r smt => MS (r smt) -> MS (r Doc)
oneLiner (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState Doc)
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
forall a b. (a -> b) -> a -> b
$ SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> MS (r smt)
listAppend (SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SrcState ValueState Variable
vnew) SrcState ValueState Value
v_word)
      ]

  stringListVals :: [SrcState ValueState Variable]
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
stringListVals = [SrcState ValueState Variable]
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(AssignStatement r smt, List r smt, Literal r, RenderValue r,
 TypeElim r, VariableElim r) =>
[SVariable r] -> SValue r -> MS (r smt)
M.stringListVals
  stringListLists :: [SrcState ValueState Variable]
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
stringListLists = [SrcState ValueState Variable]
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(RenderValue r, SharedStatement r smt, TypeElim r,
 VariableElim r) =>
[SVariable r] -> SValue r -> MS (r smt)
M.stringListLists

instance FuncAppStatement CppSrcCode (Doc, Terminator) where
  inOutCall :: InOutCall CppSrcCode (Doc, Terminator)
inOutCall = (ClassName
 -> State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value]
 -> SrcState ValueState Value)
-> InOutCall CppSrcCode (Doc, Terminator)
cppInOutCall ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp
  extInOutCall :: ClassName -> InOutCall CppSrcCode (Doc, Terminator)
extInOutCall ClassName
m = (ClassName
 -> State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value]
 -> SrcState ValueState Value)
-> InOutCall CppSrcCode (Doc, Terminator)
cppInOutCall (ClassName
-> ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *). ValueExpression r => ClassName -> PosCall r
extFuncApp ClassName
m)

instance OOFuncAppStatement CppSrcCode (Doc, Terminator) where
  selfInOutCall :: InOutCall CppSrcCode (Doc, Terminator)
selfInOutCall = (ClassName
 -> State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value]
 -> SrcState ValueState Value)
-> InOutCall CppSrcCode (Doc, Terminator)
cppInOutCall ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *).
(InternalValueExp r, VariableValue r, SelfSym r) =>
PosCall r
selfMethodCall

instance CommentStatement CppSrcCode (Doc, Terminator) where
  comment :: ClassName -> SrcState MethodState (Doc, Terminator)
comment = Doc -> ClassName -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> ClassName -> MS (r smt)
G.comment Doc
commentStart

instance ControlStatement CppSrcCode (Doc, Terminator) where
  break :: SrcState MethodState (Doc, Terminator)
break = Doc -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmt Doc
R.break
  continue :: SrcState MethodState (Doc, Terminator)
continue = Doc -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmt Doc
R.continue

  returnStmt :: SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
returnStmt = Terminator
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(RenderStatement r smt, ValueElim r) =>
Terminator -> SValue r -> MS (r smt)
G.returnStmt Terminator
Semi

  throw :: ClassName -> SrcState MethodState (Doc, Terminator)
throw = (CppSrcCode Value -> Doc)
-> Terminator
-> ClassName
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(Literal r, RenderStatement r smt) =>
(r Value -> Doc) -> Terminator -> ClassName -> MS (r smt)
G.throw CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
cppThrowDoc Terminator
Semi

  ifCond :: [(SrcState ValueState Value, SrcState MethodState Doc)]
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
ifCond = (Doc -> Doc)
-> Doc
-> OptionalSpace
-> Doc
-> Doc
-> Doc
-> [(SrcState ValueState Value, SrcState MethodState Doc)]
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(BodyElim r, RenderStatement r smt, ValueElim r) =>
(Doc -> Doc)
-> Doc
-> OptionalSpace
-> Doc
-> Doc
-> Doc
-> [(SValue r, MS (r Doc))]
-> MS (r Doc)
-> MS (r smt)
G.ifCond Doc -> Doc
parens Doc
bodyStart OptionalSpace
G.defaultOptSpace Doc
elseIfLabel Doc
bodyEnd Doc
empty
  switch :: SrcState ValueState Value
-> [(SrcState ValueState Value, SrcState MethodState Doc)]
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
switch = (Doc -> Doc)
-> SrcState MethodState (Doc, Terminator)
-> SrcState ValueState Value
-> [(SrcState ValueState Value, SrcState MethodState Doc)]
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(BodyElim r, RenderStatement r smt, StatementElim r smt,
 ValueElim r) =>
(Doc -> Doc)
-> MS (r smt)
-> SValue r
-> [(SValue r, MS (r Doc))]
-> MS (r Doc)
-> MS (r smt)
C.switch Doc -> Doc
parens SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. ControlStatement r smt => MS (r smt)
break

  ifExists :: SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
ifExists SrcState ValueState Value
_ SrcState MethodState Doc
ifBody SrcState MethodState Doc
_ = do
    CppSrcCode Doc
ifb <- SrcState MethodState Doc
ifBody
    Doc -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmtNoEnd (CppSrcCode Doc -> Doc
forall (r :: * -> *). BodyElim r => r Doc -> Doc
RC.body CppSrcCode Doc
ifb) -- All variables are initialized in C++

  for :: SrcState MethodState (Doc, Terminator)
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
for = Doc
-> Doc
-> SrcState MethodState (Doc, Terminator)
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(BodyElim r, RenderStatement r smt, StatementElim r smt,
 ValueElim r) =>
Doc
-> Doc
-> MS (r smt)
-> SValue r
-> MS (r smt)
-> MS (r Doc)
-> MS (r smt)
C.for Doc
bodyStart Doc
bodyEnd
  forRange :: SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forRange = SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
SharedStatement r smt =>
SVariable r
-> SValue r -> SValue r -> SValue r -> MS (r Doc) -> MS (r smt)
M.forRange
  forEach :: SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forEach = Doc
-> Doc
-> Doc
-> Doc
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
cppForEach Doc
bodyStart Doc
bodyEnd (ClassName -> Doc
text ClassName
cppFor) (ClassName -> Doc
text ClassName
cppIn)
  while :: SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
while = (Doc -> Doc)
-> Doc
-> Doc
-> SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(BodyElim r, RenderStatement r smt, ValueElim r) =>
(Doc -> Doc) -> Doc -> Doc -> SValue r -> MS (r Doc) -> MS (r smt)
C.while Doc -> Doc
parens Doc
bodyStart Doc
bodyEnd

  tryCatch :: SrcState MethodState Doc
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
tryCatch = (CppSrcCode Doc -> CppSrcCode Doc -> Doc)
-> SrcState MethodState Doc
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
(r Doc -> r Doc -> Doc) -> MS (r Doc) -> MS (r Doc) -> MS (r smt)
G.tryCatch CppSrcCode Doc -> CppSrcCode Doc -> Doc
forall (r :: * -> *). BodyElim r => r Doc -> r Doc -> Doc
cppTryCatch

  assert :: SrcState ValueState Value
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
assert SrcState ValueState Value
condition SrcState ValueState Value
errorMessage = do
    SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a. MS a -> MS a
addCAssertImport (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ do
      CppSrcCode Value
cond <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
-> SrcState ValueState Value
-> StateT MethodState Identity (CppSrcCode Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Value) ValueState)
-> MethodState -> Focusing Identity (CppSrcCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Value
condition
      CppSrcCode Value
errMsg <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
-> SrcState ValueState Value
-> StateT MethodState Identity (CppSrcCode Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Value) ValueState)
-> MethodState -> Focusing Identity (CppSrcCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Value
errorMessage
      Doc -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmtNoEnd (CppSrcCode Value -> CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> r Value -> Doc
cppAssert CppSrcCode Value
cond CppSrcCode Value
errMsg)

instance ObserverPattern CppSrcCode (Doc, Terminator) where
  notifyObservers :: SrcState ValueState FuncData
-> State ValueState (CppSrcCode TypeData)
-> SrcState MethodState (Doc, Terminator)
notifyObservers = SrcState ValueState FuncData
-> State ValueState (CppSrcCode TypeData)
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
OOStatement r smt =>
VS (r FuncData) -> VS (r TypeData) -> MS (r smt)
M.notifyObservers

instance StrategyPattern CppSrcCode (Doc, Terminator) where
  runStrategy :: ClassName
-> [(ClassName, SrcState MethodState Doc)]
-> Maybe (SrcState ValueState Value)
-> Maybe (SrcState ValueState Variable)
-> SrcState MethodState Doc
runStrategy = ClassName
-> [(ClassName, SrcState MethodState Doc)]
-> Maybe (SrcState ValueState Value)
-> Maybe (SrcState ValueState Variable)
-> SrcState MethodState Doc
forall (r :: * -> *) smt.
(AssignStatement r smt, BodyElim r, Monad r, RenderStatement r smt,
 StatementElim r smt) =>
ClassName
-> [(ClassName, MS (r Doc))]
-> Maybe (SValue r)
-> Maybe (SVariable r)
-> MS (r Doc)
M.runStrategy

instance VisibilitySym CppSrcCode (Doc, VisibilityTag) where
  private :: CppSrcCode (Doc, VisibilityTag)
private = (Doc, VisibilityTag) -> CppSrcCode (Doc, VisibilityTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
R.private, VisibilityTag
Priv)
  public :: CppSrcCode (Doc, VisibilityTag)
public = (Doc, VisibilityTag) -> CppSrcCode (Doc, VisibilityTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
R.public, VisibilityTag
Pub)

instance RenderVisibility CppSrcCode (Doc, VisibilityTag) where
  visibilityFromData :: VisibilityTag -> Doc -> CppSrcCode (Doc, VisibilityTag)
visibilityFromData VisibilityTag
s Doc
d = (Doc, VisibilityTag) -> CppSrcCode (Doc, VisibilityTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, VisibilityTag
s)

instance VisibilityElim CppSrcCode (Doc, VisibilityTag) where
  visibility :: CppSrcCode (Doc, VisibilityTag) -> Doc
visibility = (Doc, VisibilityTag) -> Doc
forall a b. (a, b) -> a
fst ((Doc, VisibilityTag) -> Doc)
-> (CppSrcCode (Doc, VisibilityTag) -> (Doc, VisibilityTag))
-> CppSrcCode (Doc, VisibilityTag)
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppSrcCode a -> a
unCPPSC

instance MethodTypeSym CppSrcCode where
  mType :: State ValueState (CppSrcCode TypeData)
-> SrcState MethodState TypeData
mType = LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode TypeData))
  MethodState
  ValueState
-> State ValueState (CppSrcCode TypeData)
-> SrcState MethodState TypeData
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode TypeData))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS

instance OOMethodTypeSym CppSrcCode where
  construct :: ClassName -> SrcState MethodState TypeData
construct = ClassName -> SrcState MethodState TypeData
forall (r :: * -> *). Monad r => ClassName -> MS (r TypeData)
G.construct

instance ParameterSym CppSrcCode where
  param :: SrcState ValueState Variable -> SrcState MethodState ParamData
param = (CppSrcCode Variable -> Doc)
-> SrcState ValueState Variable -> SrcState MethodState ParamData
forall (r :: * -> *).
(RenderParam r, VariableElim r) =>
(r Variable -> Doc) -> SVariable r -> MS (r ParamData)
G.param CppSrcCode Variable -> Doc
forall (r :: * -> *).
(InternalVarElim r, UnRepr r TypeData, VariableElim r) =>
r Variable -> Doc
renderParam
  pointerParam :: SrcState ValueState Variable -> SrcState MethodState ParamData
pointerParam = (CppSrcCode Variable -> Doc)
-> SrcState ValueState Variable -> SrcState MethodState ParamData
forall (r :: * -> *).
(RenderParam r, VariableElim r) =>
(r Variable -> Doc) -> SVariable r -> MS (r ParamData)
G.param CppSrcCode Variable -> Doc
forall (r :: * -> *).
(InternalVarElim r, UnRepr r TypeData, VariableElim r) =>
r Variable -> Doc
cppPointerParamDoc

instance RenderParam CppSrcCode where
  paramFromData :: SrcState ValueState Variable
-> Doc -> SrcState MethodState ParamData
paramFromData SrcState ValueState Variable
v' Doc
d = do
    CppSrcCode Variable
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
v'
    CppSrcCode ParamData -> SrcState MethodState ParamData
forall a s. a -> State s a
toState (CppSrcCode ParamData -> SrcState MethodState ParamData)
-> CppSrcCode ParamData -> SrcState MethodState ParamData
forall a b. (a -> b) -> a -> b
$ (Variable -> Doc -> ParamData)
-> CppSrcCode Variable -> CppSrcCode Doc -> CppSrcCode ParamData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues Variable -> Doc -> ParamData
pd CppSrcCode Variable
v (Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)

instance ParamElim CppSrcCode where
  parameterName :: CppSrcCode ParamData -> ClassName
parameterName = CppSrcCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName (CppSrcCode Variable -> ClassName)
-> (CppSrcCode ParamData -> CppSrcCode Variable)
-> CppSrcCode ParamData
-> ClassName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> Variable)
-> CppSrcCode ParamData -> CppSrcCode Variable
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ParamData -> Variable
paramVar
  parameterType :: CppSrcCode ParamData -> CppSrcCode TypeData
parameterType = CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType (CppSrcCode Variable -> CppSrcCode TypeData)
-> (CppSrcCode ParamData -> CppSrcCode Variable)
-> CppSrcCode ParamData
-> CppSrcCode TypeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> Variable)
-> CppSrcCode ParamData -> CppSrcCode Variable
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ParamData -> Variable
paramVar
  parameter :: CppSrcCode ParamData -> Doc
parameter = ParamData -> Doc
paramDoc (ParamData -> Doc)
-> (CppSrcCode ParamData -> ParamData)
-> CppSrcCode ParamData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode ParamData -> ParamData
forall a. CppSrcCode a -> a
unCPPSC

instance MethodSym CppSrcCode (Doc, VisibilityTag) (Doc, Terminator) MethodData where
  docMain :: SrcState MethodState Doc -> SrcState MethodState MethodData
docMain SrcState MethodState Doc
b = SrcState MethodState Doc
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall (r :: * -> *) md.
RenderMethod r md =>
MS (r Doc) -> MS (r md) -> MS (r md)
commentedFunc (State MethodState [ClassName] -> SrcState MethodState Doc
forall a. State a [ClassName] -> State a (CppSrcCode Doc)
forall (r :: * -> *) a.
BlockCommentSym r =>
State a [ClassName] -> State a (r Doc)
docComment (State MethodState [ClassName] -> SrcState MethodState Doc)
-> State MethodState [ClassName] -> SrcState MethodState Doc
forall a b. (a -> b) -> a -> b
$ [ClassName] -> State MethodState [ClassName]
forall a s. a -> State s a
toState ([ClassName] -> State MethodState [ClassName])
-> [ClassName] -> State MethodState [ClassName]
forall a b. (a -> b) -> a -> b
$ FuncDocRenderer
functionDox ClassName
mainDesc
    [(ClassName
argc, ClassName
argcDesc), (ClassName
argv, ClassName
argvDesc)] [ClassName
mainReturnDesc]) (SrcState MethodState Doc -> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
MS (r Doc) -> MS (r md)
mainFunction SrcState MethodState Doc
b)
  function :: ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
function = ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) att vis md.
(AttachmentSym r att, OORenderMethod r vis md att) =>
ClassName
-> r vis
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
G.function
  mainFunction :: SrcState MethodState Doc -> SrcState MethodState MethodData
mainFunction SrcState MethodState Doc
b = Bool
-> ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis md att.
OORenderMethod r vis md att =>
Bool
-> ClassName
-> r vis
-> r att
-> MSMthdType r
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
intFunc Bool
True ClassName
mainFunc CppSrcCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
public CppSrcCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
classLevel (State ValueState (CppSrcCode TypeData)
-> SrcState MethodState TypeData
forall (r :: * -> *).
MethodTypeSym r =>
VS (r TypeData) -> MSMthdType r
mType State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
int)
    [SrcState ValueState Variable -> SrcState MethodState ParamData
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
param SrcState ValueState Variable
argcVar, SrcState ValueState Variable -> SrcState MethodState ParamData
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
param SrcState ValueState Variable
argvVar]
    ((CppSrcCode Doc -> CppSrcCode (Doc, Terminator) -> CppSrcCode Doc)
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues ((Doc -> (Doc, Terminator) -> Doc)
-> CppSrcCode Doc -> CppSrcCode (Doc, Terminator) -> CppSrcCode Doc
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues Doc -> (Doc, Terminator) -> Doc
appendToBody) SrcState MethodState Doc
b (SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r smt)
returnStmt (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ Integer -> SrcState ValueState Value
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt Integer
0))
    where argcVar :: SrcState ValueState Variable
argcVar = ClassName
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall (r :: * -> *).
VariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
var ClassName
argc State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
int
          argvVar :: SrcState ValueState Variable
argvVar = do
            CppSrcCode TypeData
t <- CodeType
-> ClassName -> Doc -> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> ClassName -> Doc -> VS (r TypeData)
typeFromData (CodeType -> CodeType
List CodeType
String)
              (ClassName
constDec ClassName -> ClassName -> ClassName
forall a. [a] -> [a] -> [a]
++ ClassName
" " ClassName -> ClassName -> ClassName
forall a. [a] -> [a] -> [a]
++ ClassName
C.charRender) (Doc
constDec' Doc -> Doc -> Doc
<+> ClassName -> Doc
text
              ClassName
C.charRender)
            ClassName
-> CppSrcCode TypeData -> Doc -> SrcState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> r TypeData -> Doc -> SVariable r
mkVar ClassName
argv CppSrcCode TypeData
t (Doc
cppDeref Doc -> Doc -> Doc
<> ClassName -> Doc
text ClassName
argv Doc -> Doc -> Doc
<> Doc
array')
  docFunc :: ClassName
-> [ClassName]
-> Maybe ClassName
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
docFunc = ClassName
-> [ClassName]
-> Maybe ClassName
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall (r :: * -> *) md.
RenderMethod r md =>
ClassName
-> [ClassName] -> Maybe ClassName -> MS (r md) -> MS (r md)
CP.doxFunc

  inOutFunc :: ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
inOutFunc ClassName
n CppSrcCode (Doc, VisibilityTag)
s = (State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall md.
(State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> MS (CppSrcCode md))
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> MS (CppSrcCode md)
cppsInOut (ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
ClassName
-> r vis
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
function ClassName
n CppSrcCode (Doc, VisibilityTag)
s)
  docInOutFunc :: ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> DocInOutFunc CppSrcCode MethodData
docInOutFunc ClassName
n CppSrcCode (Doc, VisibilityTag)
s = ([SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> DocInOutFunc CppSrcCode MethodData
forall (r :: * -> *) md.
RenderMethod r md =>
([SVariable r]
 -> [SVariable r] -> [SVariable r] -> MS (r Doc) -> MS (r md))
-> ClassName
-> [(ClassName, SVariable r)]
-> [(ClassName, SVariable r)]
-> [(ClassName, SVariable r)]
-> MS (r Doc)
-> MS (r md)
CP.docInOutFunc (ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
ClassName -> r vis -> InOutFunc r md
inOutFunc ClassName
n CppSrcCode (Doc, VisibilityTag)
s)

instance OOMethodSym CppSrcCode (Doc, VisibilityTag) (Doc, Terminator) MethodData AttachmentData where
  method :: ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
method = ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis md att.
OORenderMethod r vis md att =>
ClassName
-> r vis
-> r att
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
G.method
  getMethod :: SrcState ValueState Variable -> SrcState MethodState MethodData
getMethod = SrcState ValueState Variable -> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md svr att.
OORenderSym r vis smt md svr att =>
SVariable r -> MS (r md)
G.getMethod
  setMethod :: SrcState ValueState Variable -> SrcState MethodState MethodData
setMethod = SrcState ValueState Variable -> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md svr att.
OORenderSym r vis smt md svr att =>
SVariable r -> MS (r md)
G.setMethod
  constructor :: [SrcState MethodState ParamData]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
constructor = [SrcState MethodState ParamData]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
cppConstructor

  inOutMethod :: ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
inOutMethod ClassName
n CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
p = (State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall md.
(State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> MS (CppSrcCode md))
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> MS (CppSrcCode md)
cppsInOut (ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
ClassName
-> r vis
-> r att
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
method ClassName
n CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
p)
  docInOutMethod :: ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> DocInOutFunc CppSrcCode MethodData
docInOutMethod ClassName
n CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
p = ([SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> DocInOutFunc CppSrcCode MethodData
forall (r :: * -> *) md.
RenderMethod r md =>
([SVariable r]
 -> [SVariable r] -> [SVariable r] -> MS (r Doc) -> MS (r md))
-> ClassName
-> [(ClassName, SVariable r)]
-> [(ClassName, SVariable r)]
-> [(ClassName, SVariable r)]
-> MS (r Doc)
-> MS (r md)
CP.docInOutFunc (ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
ClassName -> r vis -> r att -> InOutFunc r md
inOutMethod ClassName
n CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
p)

instance RenderMethod CppSrcCode MethodData where
  commentedFunc :: SrcState MethodState Doc
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
commentedFunc = FileType
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall (r :: * -> *).
(BlockCommentElim r, Monad r) =>
FileType -> MS (r Doc) -> MS (r MethodData) -> MS (r MethodData)
cppCommentedFunc FileType
Source

  mthdFromData :: VisibilityTag -> Doc -> SrcState MethodState MethodData
mthdFromData VisibilityTag
s Doc
d = CppSrcCode MethodData -> SrcState MethodState MethodData
forall a s. a -> State s a
toState (CppSrcCode MethodData -> SrcState MethodState MethodData)
-> CppSrcCode MethodData -> SrcState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ MethodData -> CppSrcCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> CppSrcCode MethodData)
-> MethodData -> CppSrcCode MethodData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> MethodData
mthd VisibilityTag
s Doc
d

instance OORenderMethod CppSrcCode (Doc, VisibilityTag) MethodData AttachmentData where
  intMethod :: Bool
-> ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
intMethod Bool
m ClassName
n CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
_ SrcState MethodState TypeData
t [SrcState MethodState ParamData]
ps SrcState MethodState Doc
b = do
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (if Bool
m then MethodState -> MethodState
setCurrMain else MethodState -> MethodState
forall a. a -> a
id)
    ClassName
c <- StateT MethodState Identity ClassName
getClassName
    (CppSrcCode TypeData
 -> [CppSrcCode ParamData] -> CppSrcCode Doc -> Doc)
-> CppSrcCode (Doc, VisibilityTag)
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
cppsIntFunc ([Doc]
-> ClassName
-> ClassName
-> CppSrcCode TypeData
-> [CppSrcCode ParamData]
-> CppSrcCode Doc
-> Doc
cppsMethod [] ClassName
n ClassName
c) CppSrcCode (Doc, VisibilityTag)
s SrcState MethodState TypeData
t [SrcState MethodState ParamData]
ps SrcState MethodState Doc
b
  intFunc :: Bool
-> ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
intFunc Bool
m ClassName
n CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
_ SrcState MethodState TypeData
t [SrcState MethodState ParamData]
ps SrcState MethodState Doc
b = do
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (if Bool
m then Bool -> MethodState -> MethodState
setCurrMainFunc Bool
m (MethodState -> MethodState)
-> (MethodState -> MethodState) -> MethodState -> MethodState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MethodState -> MethodState
setCurrMain else MethodState -> MethodState
forall a. a -> a
id)
    (CppSrcCode TypeData
 -> [CppSrcCode ParamData] -> CppSrcCode Doc -> Doc)
-> CppSrcCode (Doc, VisibilityTag)
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
cppsIntFunc (ClassName
-> CppSrcCode TypeData
-> [CppSrcCode ParamData]
-> CppSrcCode Doc
-> Doc
cppsFunction ClassName
n) CppSrcCode (Doc, VisibilityTag)
s SrcState MethodState TypeData
t [SrcState MethodState ParamData]
ps SrcState MethodState Doc
b
  destructor :: forall svr.
[CSStateVar CppSrcCode svr] -> SrcState MethodState MethodData
destructor = ClassName
-> [CSStateVar CppSrcCode svr] -> SrcState MethodState MethodData
forall a. HasCallStack => ClassName -> a
error (ClassName
 -> [CSStateVar CppSrcCode svr] -> SrcState MethodState MethodData)
-> ClassName
-> [CSStateVar CppSrcCode svr]
-> SrcState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ ClassName -> ClassName
CP.destructorError ClassName
cppName

instance MethodElim CppSrcCode MethodData where
  method :: CppSrcCode MethodData -> Doc
method = MethodData -> Doc
mthdDoc (MethodData -> Doc)
-> (CppSrcCode MethodData -> MethodData)
-> CppSrcCode MethodData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode MethodData -> MethodData
forall a. CppSrcCode a -> a
unCPPSC

instance StateVarSym CppSrcCode (Doc, VisibilityTag) StateVarData AttachmentData where
  stateVar :: CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> SrcState ClassState StateVarData
stateVar CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
_ SrcState ValueState Variable
_ = CppSrcCode StateVarData -> SrcState ClassState StateVarData
forall a. a -> StateT ClassState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppSrcCode StateVarData -> SrcState ClassState StateVarData)
-> CppSrcCode StateVarData -> SrcState ClassState StateVarData
forall a b. (a -> b) -> a -> b
$ StateVarData -> CppSrcCode StateVarData
forall a. a -> CppSrcCode a
forall (m :: * -> *) a. Monad m => a -> m a
return (StateVarData -> CppSrcCode StateVarData)
-> StateVarData -> CppSrcCode StateVarData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> StateVarData
svd ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd (CppSrcCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppSrcCode a -> a
unCPPSC CppSrcCode (Doc, VisibilityTag)
s)) Doc
empty
  stateVarDef :: CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ClassState StateVarData
stateVarDef = Doc
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ClassState StateVarData
cppsStateVarDef Doc
empty
  constVar :: CppSrcCode (Doc, VisibilityTag)
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ClassState StateVarData
constVar CppSrcCode (Doc, VisibilityTag)
s = Doc
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ClassState StateVarData
cppsStateVarDef Doc
constDec' CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
classLevel

instance StateVarElim CppSrcCode StateVarData where
  stateVar :: CppSrcCode StateVarData -> Doc
stateVar = StateVarData -> Doc
stVar (StateVarData -> Doc)
-> (CppSrcCode StateVarData -> StateVarData)
-> CppSrcCode StateVarData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode StateVarData -> StateVarData
forall a. CppSrcCode a -> a
unCPPSC

instance ClassSym CppSrcCode (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData where
  buildClass :: Maybe ClassName
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
buildClass = Maybe ClassName
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall (r :: * -> *) vis md svr.
(RenderClass r vis md svr, VisibilitySym r vis) =>
Maybe ClassName
-> [CSStateVar r svr] -> [MS (r md)] -> [MS (r md)] -> CS (r Doc)
G.buildClass
  extraClass :: ClassName
-> Maybe ClassName
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
extraClass = ClassName
-> Maybe ClassName
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall (r :: * -> *) vis md svr.
(RenderClass r vis md svr, VisibilitySym r vis) =>
ClassName
-> Maybe ClassName
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Doc)
CP.extraClass
  implementingClass :: ClassName
-> [ClassName]
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
implementingClass = ClassName
-> [ClassName]
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall (r :: * -> *) vis md svr.
(RenderClass r vis md svr, VisibilitySym r vis) =>
ClassName
-> [ClassName]
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Doc)
G.implementingClass

  docClass :: ClassName -> SrcState ClassState Doc -> SrcState ClassState Doc
docClass = ClassName -> SrcState ClassState Doc -> SrcState ClassState Doc
forall (r :: * -> *) vis md svr.
RenderClass r vis md svr =>
ClassName -> CS (r Doc) -> CS (r Doc)
CP.doxClass

instance RenderClass CppSrcCode (Doc, VisibilityTag) MethodData StateVarData where
  intClass :: ClassName
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode Doc
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
intClass ClassName
n CppSrcCode (Doc, VisibilityTag)
_ CppSrcCode Doc
_ [SrcState ClassState StateVarData]
vs [SrcState MethodState MethodData]
cs [SrcState MethodState MethodData]
fs = do
    (ClassState -> ClassState) -> StateT ClassState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ClassState -> ClassState
setClassName ClassName
n)
    ([CppSrcCode StateVarData]
 -> [CppSrcCode MethodData] -> CppSrcCode Doc)
-> [SrcState ClassState StateVarData]
-> [State ClassState (CppSrcCode MethodData)]
-> SrcState ClassState Doc
forall a b c s.
([a] -> [b] -> c) -> [State s a] -> [State s b] -> State s c
on2StateLists [CppSrcCode StateVarData]
-> [CppSrcCode MethodData] -> CppSrcCode Doc
cppsClass [SrcState ClassState StateVarData]
vs ((SrcState MethodState MethodData
 -> State ClassState (CppSrcCode MethodData))
-> [SrcState MethodState MethodData]
-> [State ClassState (CppSrcCode MethodData)]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed (StateT MethodState Identity) (CppSrcCode MethodData))
  ClassState
  MethodState
-> SrcState MethodState MethodData
-> State ClassState (CppSrcCode MethodData)
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT MethodState Identity) (CppSrcCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing Identity (CppSrcCode MethodData) MethodState)
-> ClassState
-> Focusing Identity (CppSrcCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS) ([SrcState MethodState MethodData]
 -> [State ClassState (CppSrcCode MethodData)])
-> [SrcState MethodState MethodData]
-> [State ClassState (CppSrcCode MethodData)]
forall a b. (a -> b) -> a -> b
$ [SrcState MethodState MethodData]
cs [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
forall a. [a] -> [a] -> [a]
++ [SrcState MethodState MethodData]
fs)

  inherit :: Maybe ClassName -> CppSrcCode Doc
inherit Maybe ClassName
n = ((Doc, VisibilityTag) -> Doc)
-> CppSrcCode (Doc, VisibilityTag) -> CppSrcCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (Maybe ClassName -> Doc -> Doc
cppInherit Maybe ClassName
n (Doc -> Doc)
-> ((Doc, VisibilityTag) -> Doc) -> (Doc, VisibilityTag) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Doc, VisibilityTag) -> Doc
forall a b. (a, b) -> a
fst) CppSrcCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
public
  implements :: [ClassName] -> CppSrcCode Doc
implements [ClassName]
is = ((Doc, VisibilityTag) -> Doc)
-> CppSrcCode (Doc, VisibilityTag) -> CppSrcCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ((\Doc
p -> Doc
colon Doc -> Doc -> Doc
<+> [Doc] -> Doc
hcat ((ClassName -> Doc) -> [ClassName] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map ((Doc
p <+>) (Doc -> Doc) -> (ClassName -> Doc) -> ClassName -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> Doc
text) [ClassName]
is))
    (Doc -> Doc)
-> ((Doc, VisibilityTag) -> Doc) -> (Doc, VisibilityTag) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Doc, VisibilityTag) -> Doc
forall a b. (a, b) -> a
fst) CppSrcCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
public

  commentedClass :: SrcState ClassState Doc
-> SrcState ClassState Doc -> SrcState ClassState Doc
commentedClass SrcState ClassState Doc
_ SrcState ClassState Doc
cs = SrcState ClassState Doc
cs

instance ClassElim CppSrcCode where
  class' :: CppSrcCode Doc -> Doc
class' = CppSrcCode Doc -> Doc
forall a. CppSrcCode a -> a
unCPPSC

instance ModuleSym CppSrcCode (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData where
  buildModule :: ClassName
-> [ClassName]
-> [SrcState MethodState MethodData]
-> [SrcState ClassState Doc]
-> SrcState FileState Module
buildModule ClassName
n [ClassName]
is [SrcState MethodState MethodData]
ms [SrcState ClassState Doc]
cs = ClassName
-> FS Doc
-> FS Doc
-> FS Doc
-> [SrcState MethodState MethodData]
-> [SrcState ClassState Doc]
-> SrcState FileState Module
forall (r :: * -> *) md.
(ClassElim r, MethodElim r md, RenderMod r) =>
ClassName
-> FS Doc
-> FS Doc
-> FS Doc
-> [MS (r md)]
-> [CS (r Doc)]
-> FS (r Module)
CP.buildModule ClassName
n (do
    [ClassName]
ds <- FS [ClassName]
getDefines
    [ClassName]
lis <- FS [ClassName]
getLangImports
    [ClassName]
libis <- FS [ClassName]
getLibImports
    [ClassName]
mis <- FS [ClassName]
getModuleImports
    [ClassName]
us <- FS [ClassName]
getUsing
    Bool
mn <- State FileState Bool
getCurrMain
    Doc -> FS Doc
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Doc -> FS Doc) -> Doc -> FS Doc
forall a b. (a -> b) -> a -> b
$ [Doc] -> Doc
vibcat [
      if Bool
mn Bool -> Bool -> Bool
&& [SrcState MethodState MethodData] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcState MethodState MethodData]
ms Int -> Int -> Int
forall a. Num a => a -> a -> a
+ [SrcState ClassState Doc] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcState ClassState Doc]
cs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1 then Doc
empty else CppSrcCode Doc -> Doc
forall (r :: * -> *). UnRepr r Doc => r Doc -> Doc
RC.import' (CppSrcCode Doc -> Doc) -> CppSrcCode Doc -> Doc
forall a b. (a -> b) -> a -> b
$ ClassName -> CppSrcCode Doc
mi ClassName
n,
      [Doc] -> Doc
vcat ((ClassName -> Doc) -> [ClassName] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map ((Doc
define <+>) (Doc -> Doc) -> (ClassName -> Doc) -> ClassName -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> Doc
text) [ClassName]
ds),
      [Doc] -> Doc
vcat ((ClassName -> Doc) -> [ClassName] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode Doc -> Doc
forall (r :: * -> *). UnRepr r Doc => r Doc -> Doc
RC.import' (CppSrcCode Doc -> Doc)
-> (ClassName -> CppSrcCode Doc) -> ClassName -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> CppSrcCode Doc
li) [ClassName]
lis),
      [Doc] -> Doc
vcat ((ClassName -> Doc) -> [ClassName] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode Doc -> Doc
forall (r :: * -> *). UnRepr r Doc => r Doc -> Doc
RC.import' (CppSrcCode Doc -> Doc)
-> (ClassName -> CppSrcCode Doc) -> ClassName -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> CppSrcCode Doc
mi) ([ClassName] -> [ClassName]
forall a. Ord a => [a] -> [a]
sort ([ClassName]
is [ClassName] -> [ClassName] -> [ClassName]
forall a. [a] -> [a] -> [a]
++ [ClassName]
libis) [ClassName] -> [ClassName] -> [ClassName]
forall a. [a] -> [a] -> [a]
++ [ClassName]
mis)),
      [Doc] -> Doc
vcat ((ClassName -> Doc) -> [ClassName] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName -> Maybe ClassName -> Doc
usingNameSpace ClassName
std (Maybe ClassName -> Doc)
-> (ClassName -> Maybe ClassName) -> ClassName -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> Maybe ClassName
forall a. a -> Maybe a
Just) [ClassName]
us)])
    (Doc -> FS Doc
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Doc
empty) (Doc -> FS Doc
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Doc
empty) [SrcState MethodState MethodData]
ms [SrcState ClassState Doc]
cs
    where mi, li :: Label -> CppSrcCode Doc
          mi :: ClassName -> CppSrcCode Doc
mi = ClassName -> CppSrcCode Doc
forall (r :: * -> *). ImportSym r => ClassName -> r Doc
modImport
          li :: ClassName -> CppSrcCode Doc
li = ClassName -> CppSrcCode Doc
forall (r :: * -> *). ImportSym r => ClassName -> r Doc
langImport

instance RenderMod CppSrcCode where
  modFromData :: ClassName -> FS Doc -> SrcState FileState Module
modFromData ClassName
n = ClassName
-> (Doc -> CppSrcCode Module)
-> FS Doc
-> SrcState FileState Module
forall (r :: * -> *).
ClassName -> (Doc -> r Module) -> FS Doc -> FS (r Module)
G.modFromData ClassName
n (Module -> CppSrcCode Module
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Module -> CppSrcCode Module)
-> (Doc -> Module) -> Doc -> CppSrcCode Module
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> Doc -> Module
md ClassName
n)
  updateModuleDoc :: (Doc -> Doc) -> CppSrcCode Module -> CppSrcCode Module
updateModuleDoc Doc -> Doc
f = (Module -> Module) -> CppSrcCode Module -> CppSrcCode Module
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ((Doc -> Doc) -> Module -> Module
updateMod Doc -> Doc
f)

instance ModuleElim CppSrcCode where
  module' :: CppSrcCode Module -> Doc
module' = Module -> Doc
modDoc (Module -> Doc)
-> (CppSrcCode Module -> Module) -> CppSrcCode Module -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Module -> Module
forall a. CppSrcCode a -> a
unCPPSC

instance BlockCommentSym CppSrcCode where
  blockComment :: [ClassName] -> CppSrcCode Doc
blockComment [ClassName]
lns = Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode Doc) -> Doc -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ [ClassName] -> Doc -> Doc -> Doc
R.blockCmt [ClassName]
lns Doc
blockCmtStart Doc
blockCmtEnd
  docComment :: forall a. State a [ClassName] -> State a (CppSrcCode Doc)
docComment = ([ClassName] -> CppSrcCode Doc)
-> State a [ClassName] -> State a (CppSrcCode Doc)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue (\[ClassName]
lns -> Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode Doc) -> Doc -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ [ClassName] -> Doc -> Doc -> Doc
R.docCmt [ClassName]
lns Doc
docCmtStart
    Doc
blockCmtEnd)

instance BlockCommentElim CppSrcCode where
  blockComment' :: CppSrcCode Doc -> Doc
blockComment' = CppSrcCode Doc -> Doc
forall a. CppSrcCode a -> a
unCPPSC

-----------------
-- Header File --
-----------------

newtype CppHdrCode a = CPPHC {forall a. CppHdrCode a -> a
unCPPHC :: a} deriving CppHdrCode a -> CppHdrCode a -> Bool
(CppHdrCode a -> CppHdrCode a -> Bool)
-> (CppHdrCode a -> CppHdrCode a -> Bool) -> Eq (CppHdrCode a)
forall a. Eq a => CppHdrCode a -> CppHdrCode a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => CppHdrCode a -> CppHdrCode a -> Bool
== :: CppHdrCode a -> CppHdrCode a -> Bool
$c/= :: forall a. Eq a => CppHdrCode a -> CppHdrCode a -> Bool
/= :: CppHdrCode a -> CppHdrCode a -> Bool
Eq

instance Functor CppHdrCode where
  fmap :: forall a b. (a -> b) -> CppHdrCode a -> CppHdrCode b
fmap a -> b
f (CPPHC a
x) = b -> CppHdrCode b
forall a. a -> CppHdrCode a
CPPHC (a -> b
f a
x)

instance Applicative CppHdrCode where
  pure :: forall a. a -> CppHdrCode a
pure = a -> CppHdrCode a
forall a. a -> CppHdrCode a
CPPHC
  (CPPHC a -> b
f) <*> :: forall a b. CppHdrCode (a -> b) -> CppHdrCode a -> CppHdrCode b
<*> (CPPHC a
x) = b -> CppHdrCode b
forall a. a -> CppHdrCode a
CPPHC (a -> b
f a
x)

instance Monad CppHdrCode where
  CPPHC a
x >>= :: forall a b. CppHdrCode a -> (a -> CppHdrCode b) -> CppHdrCode b
>>= a -> CppHdrCode b
f = a -> CppHdrCode b
f a
x

instance CommonRenderSym CppHdrCode (Doc, VisibilityTag) (Doc, Terminator) MethodData
instance OORenderSym CppHdrCode (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData
instance SharedStatement CppHdrCode (Doc, Terminator) where
instance OOStatement CppHdrCode (Doc, Terminator) where

instance UnRepr CppHdrCode contents where
  unRepr :: CppHdrCode contents -> contents
unRepr = CppHdrCode contents -> contents
forall a. CppHdrCode a -> a
unCPPHC

instance FileSym CppHdrCode (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData where
  fileDoc :: HdrState FileState Module -> HdrState FileState File
fileDoc HdrState FileState Module
m = do
    (FileState -> FileState) -> StateT FileState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (FileType -> FileState -> FileState
setFileType FileType
Header)
    ClassName
-> (CppHdrCode Module -> CppHdrCode Doc)
-> CppHdrCode Doc
-> HdrState FileState Module
-> HdrState FileState File
forall (r :: * -> *).
(BlockElim r, RenderMod r, RenderFile r) =>
ClassName
-> (r Module -> r Doc) -> r Doc -> FS (r Module) -> FS (r File)
G.fileDoc ClassName
cppHdrExt CppHdrCode Module -> CppHdrCode Doc
forall (r :: * -> *). RenderFile r => r Module -> r Doc
top CppHdrCode Doc
forall (r :: * -> *). RenderFile r => r Doc
bottom HdrState FileState Module
m

  docMod :: ClassName
-> ClassName
-> [ClassName]
-> ClassName
-> HdrState FileState File
-> HdrState FileState File
docMod = ClassName
-> ClassName
-> ClassName
-> [ClassName]
-> ClassName
-> HdrState FileState File
-> HdrState FileState File
forall (r :: * -> *).
RenderFile r =>
ClassName
-> ClassName
-> ClassName
-> [ClassName]
-> ClassName
-> FS (r File)
-> FS (r File)
CP.doxMod ClassName
cppHdrExt

instance RenderFile CppHdrCode where
  top :: CppHdrCode Module -> CppHdrCode Doc
top = (Module -> Doc) -> CppHdrCode Module -> CppHdrCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue Module -> Doc
cpphtop
  bottom :: CppHdrCode Doc
bottom = Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
endif

  commentedMod :: HdrState FileState File
-> HdrState FileState Doc -> HdrState FileState File
commentedMod = (CppHdrCode File -> CppHdrCode Doc -> CppHdrCode File)
-> HdrState FileState File
-> HdrState FileState Doc
-> HdrState FileState File
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues (\CppHdrCode File
m CppHdrCode Doc
cmt -> if Doc -> Bool
isEmpty (CppHdrCode Module -> Doc
forall (r :: * -> *). ModuleElim r => r Module -> Doc
RC.module' (CppHdrCode Module -> Doc) -> CppHdrCode Module -> Doc
forall a b. (a -> b) -> a -> b
$
    (File -> Module) -> CppHdrCode File -> CppHdrCode Module
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue File -> Module
fileMod CppHdrCode File
m) then CppHdrCode File
m else (File -> Doc -> File)
-> CppHdrCode File -> CppHdrCode Doc -> CppHdrCode File
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues File -> Doc -> File
R.commentedMod CppHdrCode File
m CppHdrCode Doc
cmt)

  fileFromData :: ClassName -> HdrState FileState Module -> HdrState FileState File
fileFromData = (ClassName -> CppHdrCode Module -> CppHdrCode File)
-> ClassName
-> HdrState FileState Module
-> HdrState FileState File
forall (r :: * -> *).
ModuleElim r =>
(ClassName -> r Module -> r File)
-> ClassName -> FS (r Module) -> FS (r File)
G.fileFromData ((Module -> File) -> CppHdrCode Module -> CppHdrCode File
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ((Module -> File) -> CppHdrCode Module -> CppHdrCode File)
-> (ClassName -> Module -> File)
-> ClassName
-> CppHdrCode Module
-> CppHdrCode File
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> Module -> File
fileD)

instance ImportSym CppHdrCode where
  langImport :: ClassName -> CppHdrCode Doc
langImport ClassName
n = Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppHdrCode Doc) -> Doc -> CppHdrCode Doc
forall a b. (a -> b) -> a -> b
$ Doc
inc Doc -> Doc -> Doc
<+> Doc -> Doc
angles (ClassName -> Doc
text ClassName
n)
  modImport :: ClassName -> CppHdrCode Doc
modImport ClassName
n = Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppHdrCode Doc) -> Doc -> CppHdrCode Doc
forall a b. (a -> b) -> a -> b
$ Doc
inc Doc -> Doc -> Doc
<+> ClassName -> Doc
doubleQuotedText (ClassName -> ClassName -> ClassName
addExt ClassName
cppHdrExt ClassName
n)

instance AttachmentSym CppHdrCode AttachmentData where
  classLevel :: CppHdrCode AttachmentData
classLevel = AttachmentData -> CppHdrCode AttachmentData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (AttachmentData -> CppHdrCode AttachmentData)
-> AttachmentData -> CppHdrCode AttachmentData
forall a b. (a -> b) -> a -> b
$ AttachmentTag -> Doc -> AttachmentData
ad AttachmentTag
ClassLevel Doc
R.classLevel
  instanceLevel :: CppHdrCode AttachmentData
instanceLevel = AttachmentData -> CppHdrCode AttachmentData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (AttachmentData -> CppHdrCode AttachmentData)
-> AttachmentData -> CppHdrCode AttachmentData
forall a b. (a -> b) -> a -> b
$ AttachmentTag -> Doc -> AttachmentData
ad AttachmentTag
InstanceLevel Doc
R.instanceLevel

instance PermElim CppHdrCode AttachmentData where
  perm :: CppHdrCode AttachmentData -> Doc
perm = AttachmentData -> Doc
attachmentDoc (AttachmentData -> Doc)
-> (CppHdrCode AttachmentData -> AttachmentData)
-> CppHdrCode AttachmentData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode AttachmentData -> AttachmentData
forall a. CppHdrCode a -> a
unCPPHC
  binding :: CppHdrCode AttachmentData -> AttachmentTag
binding = AttachmentData -> AttachmentTag
attachment (AttachmentData -> AttachmentTag)
-> (CppHdrCode AttachmentData -> AttachmentData)
-> CppHdrCode AttachmentData
-> AttachmentTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode AttachmentData -> AttachmentData
forall a. CppHdrCode a -> a
unCPPHC

instance BodySym CppHdrCode (Doc, Terminator) where
  body :: [HdrState MethodState Doc] -> HdrState MethodState Doc
body [HdrState MethodState Doc]
_ = CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

  addComments :: ClassName -> HdrState MethodState Doc -> HdrState MethodState Doc
addComments ClassName
_ HdrState MethodState Doc
_ = CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

instance RenderBody CppHdrCode where
  multiBody :: [HdrState MethodState Doc] -> HdrState MethodState Doc
multiBody = [HdrState MethodState Doc] -> HdrState MethodState Doc
forall (r :: * -> *).
(BodyElim r, Monad r) =>
[MS (r Doc)] -> MS (r Doc)
G.multiBody

instance BodyElim CppHdrCode where
  body :: CppHdrCode Doc -> Doc
body = CppHdrCode Doc -> Doc
forall a. CppHdrCode a -> a
unCPPHC

instance BlockSym CppHdrCode (Doc, Terminator) where
  block :: [HdrState MethodState (Doc, Terminator)]
-> HdrState MethodState Doc
block [HdrState MethodState (Doc, Terminator)]
_ = CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

instance RenderBlock CppHdrCode where
  multiBlock :: [HdrState MethodState Doc] -> HdrState MethodState Doc
multiBlock = [HdrState MethodState Doc] -> HdrState MethodState Doc
forall (r :: * -> *).
(BlockElim r, Monad r) =>
[MS (r Doc)] -> MS (r Doc)
G.multiBlock

instance BlockElim CppHdrCode where
  block :: CppHdrCode Doc -> Doc
block = CppHdrCode Doc -> Doc
forall a. CppHdrCode a -> a
unCPPHC

instance TypeSym CppHdrCode where
  bool :: State ValueState (CppHdrCode TypeData)
bool = State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
cppBoolType
  int :: State ValueState (CppHdrCode TypeData)
int = State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
CP.int
  float :: State ValueState (CppHdrCode TypeData)
float = State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.float
  double :: State ValueState (CppHdrCode TypeData)
double = State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.double
  char :: State ValueState (CppHdrCode TypeData)
char = State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.char
  string :: State ValueState (CppHdrCode TypeData)
string = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addHeaderUsing ClassName
cppString (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> ValueState -> ValueState
addHeaderLangImport ClassName
cppString)
    State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
CP.string
  infile :: State ValueState (CppHdrCode TypeData)
infile = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addHeaderUsing ClassName
cppInfile)
    State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
cppInfileType
  outfile :: State ValueState (CppHdrCode TypeData)
outfile = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addHeaderUsing ClassName
cppOutfile)
    State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
cppOutfileType
  referenceType :: State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
referenceType = State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r, UnRepr r TypeData) =>
VS (r TypeData) -> VS (r TypeData)
cppReferenceType
  listType :: State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
listType State ValueState (CppHdrCode TypeData)
t = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addHeaderUsing ClassName
vector (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> ValueState -> ValueState
addHeaderLangImport ClassName
vector)
    ClassName
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r, UnRepr r TypeData) =>
ClassName -> VS (r TypeData) -> VS (r TypeData)
C.listType ClassName
vector State ValueState (CppHdrCode TypeData)
t
  setType :: State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
setType State ValueState (CppHdrCode TypeData)
t = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addHeaderUsing ClassName
cppSet (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> ValueState -> ValueState
addHeaderLangImport ClassName
cppSet)
    ClassName
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r, UnRepr r TypeData) =>
ClassName -> VS (r TypeData) -> VS (r TypeData)
C.setType ClassName
cppSet State ValueState (CppHdrCode TypeData)
t
  arrayType :: State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
arrayType = State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
listType
  innerType :: State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
innerType = State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
(TypeElim r, OOTypeSym r) =>
VS (r TypeData) -> VS (r TypeData)
CG.innerType
  funcType :: [State ValueState (CppHdrCode TypeData)]
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
funcType = [State ValueState (CppHdrCode TypeData)]
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r) =>
[VS (r TypeData)] -> VS (r TypeData) -> VS (r TypeData)
CS.funcType
  void :: State ValueState (CppHdrCode TypeData)
void = State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.void

instance TypeElim CppHdrCode where
  getCodeType :: CppHdrCode TypeData -> CodeType
getCodeType = TypeData -> CodeType
cType (TypeData -> CodeType)
-> (CppHdrCode TypeData -> TypeData)
-> CppHdrCode TypeData
-> CodeType
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode TypeData -> TypeData
forall a. CppHdrCode a -> a
unCPPHC

instance OOTypeSym CppHdrCode where
  obj :: ClassName -> State ValueState (CppHdrCode TypeData)
obj ClassName
n = VS (Map ClassName ClassName)
getClassMap VS (Map ClassName ClassName)
-> (Map ClassName ClassName
    -> State ValueState (CppHdrCode TypeData))
-> State ValueState (CppHdrCode TypeData)
forall a b.
StateT ValueState Identity a
-> (a -> StateT ValueState Identity b)
-> StateT ValueState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\Map ClassName ClassName
cm -> (State ValueState (CppHdrCode TypeData)
 -> State ValueState (CppHdrCode TypeData))
-> (ClassName
    -> State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> Maybe ClassName
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall a. a -> a
id (StateT ValueState Identity ()
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall a b.
StateT ValueState Identity a
-> StateT ValueState Identity b -> StateT ValueState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (StateT ValueState Identity ()
 -> State ValueState (CppHdrCode TypeData)
 -> State ValueState (CppHdrCode TypeData))
-> (ClassName -> StateT ValueState Identity ())
-> ClassName
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify ((ValueState -> ValueState) -> StateT ValueState Identity ())
-> (ClassName -> ValueState -> ValueState)
-> ClassName
-> StateT ValueState Identity ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> ValueState -> ValueState
addHeaderModImport)
    (ClassName -> Map ClassName ClassName -> Maybe ClassName
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup ClassName
n Map ClassName ClassName
cm) (State ValueState (CppHdrCode TypeData)
 -> State ValueState (CppHdrCode TypeData))
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall a b. (a -> b) -> a -> b
$ ClassName -> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => ClassName -> VS (r TypeData)
G.obj ClassName
n)

instance RenderType CppHdrCode where
  multiType :: [State ValueState (CppHdrCode TypeData)]
-> State ValueState (CppHdrCode TypeData)
multiType [State ValueState (CppHdrCode TypeData)]
_ = ClassName -> State ValueState (CppHdrCode TypeData)
forall a. HasCallStack => ClassName -> a
error (ClassName -> State ValueState (CppHdrCode TypeData))
-> ClassName -> State ValueState (CppHdrCode TypeData)
forall a b. (a -> b) -> a -> b
$ ClassName -> ClassName
C.multiTypeError ClassName
cppName

instance UnaryOpSym CppHdrCode where
  notOp :: State ValueState (CppHdrCode OpData)
notOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  negateOp :: State ValueState (CppHdrCode OpData)
negateOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  sqrtOp :: State ValueState (CppHdrCode OpData)
sqrtOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  absOp :: State ValueState (CppHdrCode OpData)
absOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  logOp :: State ValueState (CppHdrCode OpData)
logOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  lnOp :: State ValueState (CppHdrCode OpData)
lnOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  expOp :: State ValueState (CppHdrCode OpData)
expOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  sinOp :: State ValueState (CppHdrCode OpData)
sinOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  cosOp :: State ValueState (CppHdrCode OpData)
cosOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  tanOp :: State ValueState (CppHdrCode OpData)
tanOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  asinOp :: State ValueState (CppHdrCode OpData)
asinOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  acosOp :: State ValueState (CppHdrCode OpData)
acosOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  atanOp :: State ValueState (CppHdrCode OpData)
atanOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  floorOp :: State ValueState (CppHdrCode OpData)
floorOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  ceilOp :: State ValueState (CppHdrCode OpData)
ceilOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty

instance BinaryOpSym CppHdrCode where
  equalOp :: State ValueState (CppHdrCode OpData)
equalOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  notEqualOp :: State ValueState (CppHdrCode OpData)
notEqualOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  greaterOp :: State ValueState (CppHdrCode OpData)
greaterOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  greaterEqualOp :: State ValueState (CppHdrCode OpData)
greaterEqualOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  lessOp :: State ValueState (CppHdrCode OpData)
lessOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  lessEqualOp :: State ValueState (CppHdrCode OpData)
lessEqualOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  plusOp :: State ValueState (CppHdrCode OpData)
plusOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  minusOp :: State ValueState (CppHdrCode OpData)
minusOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  multOp :: State ValueState (CppHdrCode OpData)
multOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  divideOp :: State ValueState (CppHdrCode OpData)
divideOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  powerOp :: State ValueState (CppHdrCode OpData)
powerOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  moduloOp :: State ValueState (CppHdrCode OpData)
moduloOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  andOp :: State ValueState (CppHdrCode OpData)
andOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  orOp :: State ValueState (CppHdrCode OpData)
orOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty

instance OpElim CppHdrCode where
  uOp :: CppHdrCode OpData -> Doc
uOp = OpData -> Doc
opDoc (OpData -> Doc)
-> (CppHdrCode OpData -> OpData) -> CppHdrCode OpData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode OpData -> OpData
forall a. CppHdrCode a -> a
unCPPHC
  bOp :: CppHdrCode OpData -> Doc
bOp = OpData -> Doc
opDoc (OpData -> Doc)
-> (CppHdrCode OpData -> OpData) -> CppHdrCode OpData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode OpData -> OpData
forall a. CppHdrCode a -> a
unCPPHC
  uOpPrec :: CppHdrCode OpData -> Int
uOpPrec = OpData -> Int
opPrec (OpData -> Int)
-> (CppHdrCode OpData -> OpData) -> CppHdrCode OpData -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode OpData -> OpData
forall a. CppHdrCode a -> a
unCPPHC
  bOpPrec :: CppHdrCode OpData -> Int
bOpPrec = OpData -> Int
opPrec (OpData -> Int)
-> (CppHdrCode OpData -> OpData) -> CppHdrCode OpData -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode OpData -> OpData
forall a. CppHdrCode a -> a
unCPPHC

instance ScopeSym CppHdrCode where
  global :: CppHdrCode ScopeData
global = CppHdrCode ScopeData
forall (r :: * -> *). Monad r => r ScopeData
CP.global
  mainFn :: CppHdrCode ScopeData
mainFn = CppHdrCode ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
local
  local :: CppHdrCode ScopeData
local = CppHdrCode ScopeData
forall (r :: * -> *). Monad r => r ScopeData
G.local

instance ScopeElim CppHdrCode where
  scopeData :: CppHdrCode ScopeData -> ScopeData
scopeData = CppHdrCode ScopeData -> ScopeData
forall a. CppHdrCode a -> a
unCPPHC

instance VariableSym CppHdrCode where
  var :: ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
var           = ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> VS (r TypeData) -> SVariable r
G.var
  constant :: ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
constant  ClassName
_ State ValueState (CppHdrCode TypeData)
_ = ClassName
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> VS (r TypeData) -> Doc -> SVariable r
mkStateVar ClassName
"" State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  extVar :: ClassName
-> ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
extVar  ClassName
_ ClassName
_ State ValueState (CppHdrCode TypeData)
_ = ClassName
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> VS (r TypeData) -> Doc -> SVariable r
mkStateVar ClassName
"" State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance OOVariableSym CppHdrCode where
  classVar :: ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
classVar = ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> VS (r TypeData) -> SVariable r
G.classVar
  classConst :: ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
classConst = ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall (r :: * -> *).
OOVariableSym r =>
ClassName -> VS (r TypeData) -> SVariable r
classVar
  classVarAccess :: State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable -> HdrState ValueState Variable
classVarAccess State ValueState (CppHdrCode TypeData)
_ HdrState ValueState Variable
_ = ClassName
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> VS (r TypeData) -> Doc -> SVariable r
mkStateVar ClassName
"" State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  extClassVarAccess :: State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable -> HdrState ValueState Variable
extClassVarAccess State ValueState (CppHdrCode TypeData)
_ HdrState ValueState Variable
_ = ClassName
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> VS (r TypeData) -> Doc -> SVariable r
mkStateVar ClassName
"" State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  instanceVarAccess :: HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState ValueState Variable
instanceVarAccess = HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState ValueState Variable
forall (r :: * -> *).
(InternalVarElim r, RenderVariable r, ValueElim r,
 VariableElim r) =>
SValue r -> SVariable r -> SVariable r
G.instanceVarAccess

instance SelfSym CppHdrCode where
  self :: HdrState ValueState Variable
self = ClassName
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> VS (r TypeData) -> Doc -> SVariable r
mkStateVar ClassName
"" State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance VariableElim CppHdrCode where
  variableName :: CppHdrCode Variable -> ClassName
variableName = Variable -> ClassName
varName (Variable -> ClassName)
-> (CppHdrCode Variable -> Variable)
-> CppHdrCode Variable
-> ClassName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Variable -> Variable
forall a. CppHdrCode a -> a
unCPPHC
  variableType :: CppHdrCode Variable -> CppHdrCode TypeData
variableType = (Variable -> TypeData)
-> CppHdrCode Variable -> CppHdrCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue Variable -> TypeData
varType

instance InternalVarElim CppHdrCode where
  variableBind :: CppHdrCode Variable -> AttachmentTag
variableBind = Variable -> AttachmentTag
varBind (Variable -> AttachmentTag)
-> (CppHdrCode Variable -> Variable)
-> CppHdrCode Variable
-> AttachmentTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Variable -> Variable
forall a. CppHdrCode a -> a
unCPPHC
  variable :: CppHdrCode Variable -> Doc
variable = Variable -> Doc
varDoc (Variable -> Doc)
-> (CppHdrCode Variable -> Variable) -> CppHdrCode Variable -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Variable -> Variable
forall a. CppHdrCode a -> a
unCPPHC

instance RenderVariable CppHdrCode where
  varFromData :: AttachmentTag
-> ClassName
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
varFromData AttachmentTag
b ClassName
n State ValueState (CppHdrCode TypeData)
t' Doc
d = do
    CppHdrCode TypeData
t <- State ValueState (CppHdrCode TypeData)
t'
    CppHdrCode Variable -> HdrState ValueState Variable
forall a s. a -> State s a
toState (CppHdrCode Variable -> HdrState ValueState Variable)
-> CppHdrCode Variable -> HdrState ValueState Variable
forall a b. (a -> b) -> a -> b
$ (TypeData -> Doc -> Variable)
-> CppHdrCode TypeData -> CppHdrCode Doc -> CppHdrCode Variable
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues (AttachmentTag -> ClassName -> TypeData -> Doc -> Variable
vard AttachmentTag
b ClassName
n) CppHdrCode TypeData
t (Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)

instance ValueSym CppHdrCode where
  valueType :: CppHdrCode Value -> CppHdrCode TypeData
valueType = (Value -> TypeData) -> CppHdrCode Value -> CppHdrCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue Value -> TypeData
valType

instance OOValueSym CppHdrCode where

instance Argument CppHdrCode where
  pointerArg :: HdrState ValueState Value -> HdrState ValueState Value
pointerArg = HdrState ValueState Value -> HdrState ValueState Value
forall a. a -> a
id

instance Literal CppHdrCode where
  litTrue :: HdrState ValueState Value
litTrue = HdrState ValueState Value
forall (r :: * -> *). (RenderValue r, TypeSym r) => SValue r
C.litTrue
  litFalse :: HdrState ValueState Value
litFalse = HdrState ValueState Value
forall (r :: * -> *). (RenderValue r, TypeSym r) => SValue r
C.litFalse
  litChar :: Char -> HdrState ValueState Value
litChar = (Doc -> Doc) -> Char -> HdrState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r) =>
(Doc -> Doc) -> Char -> SValue r
G.litChar Doc -> Doc
quotes
  litDouble :: Double -> HdrState ValueState Value
litDouble = Double -> HdrState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r) =>
Double -> SValue r
G.litDouble
  litFloat :: Float -> HdrState ValueState Value
litFloat = Float -> HdrState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r) =>
Float -> SValue r
C.litFloat
  litInt :: Integer -> HdrState ValueState Value
litInt = Integer -> HdrState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r) =>
Integer -> SValue r
G.litInt
  litString :: ClassName -> HdrState ValueState Value
litString = ClassName -> HdrState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r) =>
ClassName -> SValue r
G.litString
  litArray :: State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
litArray = State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
forall (r :: * -> *).
Literal r =>
VS (r TypeData) -> [SValue r] -> SValue r
litList
  litSet :: State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
litSet = (State ValueState (CppHdrCode TypeData)
 -> State ValueState (CppHdrCode TypeData))
-> State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> HdrState ValueState Value
forall (r :: * -> *).
(RenderValue r, ValueElim r) =>
(VS (r TypeData) -> VS (r TypeData))
-> VS (r TypeData) -> [SValue r] -> SValue r
cppLitSet State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
setType
  litList :: State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
litList = (Doc -> Doc)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> HdrState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r, ValueElim r) =>
(Doc -> Doc) -> VS (r TypeData) -> [SValue r] -> SValue r
CP.litArray Doc -> Doc
braces

instance MathConstant CppHdrCode where
  pi :: HdrState ValueState Value
pi = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addHeaderDefine ClassName
mathDefines (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> ValueState -> ValueState
addHeaderLangImport ClassName
mathh)
    State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
double Doc
cppPi

instance VariableValue CppHdrCode where
  valueOf :: HdrState ValueState Variable -> HdrState ValueState Value
valueOf = HdrState ValueState Variable -> HdrState ValueState Value
forall (r :: * -> *).
(InternalVarElim r, RenderValue r, VariableElim r) =>
SVariable r -> SValue r
G.valueOf

instance OOVariableValue CppHdrCode

instance CommandLineArgs CppHdrCode where
  arg :: Integer -> HdrState ValueState Value
arg Integer
n = HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *).
(RenderValue r, TypeSym r, ValueElim r) =>
SValue r -> SValue r -> SValue r
G.arg (Integer -> HdrState ValueState Value
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt (Integer -> HdrState ValueState Value)
-> Integer -> HdrState ValueState Value
forall a b. (a -> b) -> a -> b
$ Integer
nInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
1) HdrState ValueState Value
forall (r :: * -> *). CommandLineArgs r => SValue r
argsList
  argsList :: HdrState ValueState Value
argsList = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
argvType (ClassName -> Doc
text ClassName
argv)
  argExists :: Integer -> HdrState ValueState Value
argExists Integer
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance NumericExpression CppHdrCode where
  #~ :: HdrState ValueState Value -> HdrState ValueState Value
(#~) HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  #/^ :: HdrState ValueState Value -> HdrState ValueState Value
(#/^) HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  #| :: HdrState ValueState Value -> HdrState ValueState Value
(#|) HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  #+ :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(#+) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  #- :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(#-) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  #* :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(#*) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  #/ :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(#/) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  #% :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(#%) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  #^ :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(#^) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

  log :: HdrState ValueState Value -> HdrState ValueState Value
log HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  ln :: HdrState ValueState Value -> HdrState ValueState Value
ln HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  exp :: HdrState ValueState Value -> HdrState ValueState Value
exp HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  sin :: HdrState ValueState Value -> HdrState ValueState Value
sin HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  cos :: HdrState ValueState Value -> HdrState ValueState Value
cos HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  tan :: HdrState ValueState Value -> HdrState ValueState Value
tan HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  csc :: HdrState ValueState Value -> HdrState ValueState Value
csc HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  sec :: HdrState ValueState Value -> HdrState ValueState Value
sec HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  cot :: HdrState ValueState Value -> HdrState ValueState Value
cot HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  arcsin :: HdrState ValueState Value -> HdrState ValueState Value
arcsin HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  arccos :: HdrState ValueState Value -> HdrState ValueState Value
arccos HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  arctan :: HdrState ValueState Value -> HdrState ValueState Value
arctan HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  floor :: HdrState ValueState Value -> HdrState ValueState Value
floor HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  ceil :: HdrState ValueState Value -> HdrState ValueState Value
ceil HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance BooleanExpression CppHdrCode where
  ?! :: HdrState ValueState Value -> HdrState ValueState Value
(?!) HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  ?&& :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?&&) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  ?|| :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?||) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance Comparison CppHdrCode where
  ?< :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?<) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  ?<= :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?<=) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  ?> :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?>) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  ?>= :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?>=) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  ?== :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?==) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  ?!= :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?!=) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance ValueExpression CppHdrCode where
  inlineIf :: HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
inlineIf HdrState ValueState Value
_ HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

  funcAppMixedArgs :: MixedCall CppHdrCode
funcAppMixedArgs ClassName
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  extFuncAppMixedArgs :: ClassName -> MixedCall CppHdrCode
extFuncAppMixedArgs ClassName
_ ClassName
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  libFuncAppMixedArgs :: ClassName -> MixedCall CppHdrCode
libFuncAppMixedArgs ClassName
_ ClassName
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

  lambda :: [HdrState ValueState BinderD]
-> HdrState ValueState Value -> HdrState ValueState Value
lambda [HdrState ValueState BinderD]
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

  notNull :: HdrState ValueState Value -> HdrState ValueState Value
notNull HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance OOValueExpression CppHdrCode where
  newObjMixedArgs :: State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState ValueState Value
newObjMixedArgs State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  extNewObjMixedArgs :: MixedCall CppHdrCode
extNewObjMixedArgs ClassName
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  libNewObjMixedArgs :: MixedCall CppHdrCode
libNewObjMixedArgs ClassName
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance RenderValue CppHdrCode where
  inputFunc :: HdrState ValueState Value
inputFunc = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  printFunc :: HdrState ValueState Value
printFunc = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  printLnFunc :: HdrState ValueState Value
printLnFunc = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  printFileFunc :: HdrState ValueState Value -> HdrState ValueState Value
printFileFunc HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  printFileLnFunc :: HdrState ValueState Value -> HdrState ValueState Value
printFileLnFunc HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

  cast :: State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Value -> HdrState ValueState Value
cast State ValueState (CppHdrCode TypeData)
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

  call :: Maybe ClassName -> Maybe Doc -> MixedCall CppHdrCode
call Maybe ClassName
_ Maybe Doc
_ ClassName
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

  valFromData :: Maybe Int
-> Maybe Integer
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Value
valFromData Maybe Int
p Maybe Integer
i State ValueState (CppHdrCode TypeData)
t' Doc
d = do
    CppHdrCode TypeData
t <- State ValueState (CppHdrCode TypeData)
t'
    CppHdrCode Value -> HdrState ValueState Value
forall a s. a -> State s a
toState (CppHdrCode Value -> HdrState ValueState Value)
-> CppHdrCode Value -> HdrState ValueState Value
forall a b. (a -> b) -> a -> b
$ (TypeData -> Doc -> Value)
-> CppHdrCode TypeData -> CppHdrCode Doc -> CppHdrCode Value
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues (Maybe Int -> Maybe Integer -> TypeData -> Doc -> Value
vd Maybe Int
p Maybe Integer
i) CppHdrCode TypeData
t (Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)

instance ValueElim CppHdrCode where
  valuePrec :: CppHdrCode Value -> Maybe Int
valuePrec = Value -> Maybe Int
valPrec (Value -> Maybe Int)
-> (CppHdrCode Value -> Value) -> CppHdrCode Value -> Maybe Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Value -> Value
forall a. CppHdrCode a -> a
unCPPHC
  valueInt :: CppHdrCode Value -> Maybe Integer
valueInt = Value -> Maybe Integer
valInt (Value -> Maybe Integer)
-> (CppHdrCode Value -> Value) -> CppHdrCode Value -> Maybe Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Value -> Value
forall a. CppHdrCode a -> a
unCPPHC
  value :: CppHdrCode Value -> Doc
value = Value -> Doc
val (Value -> Doc)
-> (CppHdrCode Value -> Value) -> CppHdrCode Value -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Value -> Value
forall a. CppHdrCode a -> a
unCPPHC

instance InternalValueExp CppHdrCode where
  objMethodCallMixedArgs' :: ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Value
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState ValueState Value
objMethodCallMixedArgs' ClassName
_ State ValueState (CppHdrCode TypeData)
_ HdrState ValueState Value
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  classMethodCallMixedArgs' :: ClassName
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState ValueState Value
classMethodCallMixedArgs' ClassName
_ State ValueState (CppHdrCode TypeData)
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance FunctionSym CppHdrCode where

instance OOFunctionSym CppHdrCode where
  func :: ClassName
-> State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> HdrState ValueState FuncData
func ClassName
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ = Doc
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
forall (r :: * -> *).
RenderFunction r =>
Doc -> VS (r TypeData) -> VS (r FuncData)
funcFromData Doc
empty State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void
  objAccess :: HdrState ValueState Value
-> HdrState ValueState FuncData -> HdrState ValueState Value
objAccess HdrState ValueState Value
_ HdrState ValueState FuncData
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance GetSet CppHdrCode where
  get :: HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState ValueState Value
get HdrState ValueState Value
_ HdrState ValueState Variable
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  set :: HdrState ValueState Value
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ValueState Value
set HdrState ValueState Value
_ HdrState ValueState Variable
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance IndexTranslator CppHdrCode where
  intToIndex :: HdrState ValueState Value -> HdrState ValueState Value
intToIndex HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  indexToInt :: HdrState ValueState Value -> HdrState ValueState Value
indexToInt HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance Reference CppHdrCode where
  makeRef :: HdrState ValueState Value -> HdrState ValueState Value
makeRef = HdrState ValueState Value -> HdrState ValueState Value
forall a. a -> a
id
  maybeDeref :: HdrState ValueState Value -> HdrState ValueState Value
maybeDeref = HdrState ValueState Value -> HdrState ValueState Value
forall a. a -> a
id

instance Array CppHdrCode where
  arrayElem :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Variable
arrayElem HdrState ValueState Value
_ HdrState ValueState Value
_ = ClassName
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall (r :: * -> *).
RenderVariable r =>
ClassName -> VS (r TypeData) -> Doc -> SVariable r
mkStateVar ClassName
"" State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  arrayLength :: HdrState ValueState Value -> HdrState ValueState Value
arrayLength = HdrState ValueState Value -> HdrState ValueState Value
forall (r :: * -> *) smt. List r smt => SValue r -> SValue r
listSize
  arrayCopy :: HdrState ValueState Value -> HdrState ValueState Value
arrayCopy = HdrState ValueState Value -> HdrState ValueState Value
forall a. a -> a
id -- C++ automatically copies std::vectors on assignment

instance List CppHdrCode (Doc, Terminator) where
  listSize :: HdrState ValueState Value -> HdrState ValueState Value
listSize HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  listAdd :: HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
listAdd HdrState ValueState Value
_ HdrState ValueState Value
_ HdrState ValueState Value
_ = Doc -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmt Doc
empty
  listAppend :: HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
listAppend HdrState ValueState Value
_ HdrState ValueState Value
_ = Doc -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmt Doc
empty
  listAccess :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
listAccess HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  listSet :: HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
listSet HdrState ValueState Value
_ HdrState ValueState Value
_ HdrState ValueState Value
_ = Doc -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmtNoEnd Doc
empty
  indexOf :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
indexOf HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance Set CppHdrCode where
  contains :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
contains HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  setAdd :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
setAdd HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  setRemove :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
setRemove HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty
  setUnion :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
setUnion HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void Doc
empty

instance InternalList CppHdrCode where
  listSlice' :: Maybe (HdrState ValueState Value)
-> Maybe (HdrState ValueState Value)
-> Maybe (HdrState ValueState Value)
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState Doc
listSlice' Maybe (HdrState ValueState Value)
_ Maybe (HdrState ValueState Value)
_ Maybe (HdrState ValueState Value)
_ HdrState ValueState Variable
_ HdrState ValueState Value
_ = CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

instance InternalGetSet CppHdrCode where
  getFunc :: HdrState ValueState Variable -> HdrState ValueState FuncData
getFunc HdrState ValueState Variable
_ = Doc
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
forall (r :: * -> *).
RenderFunction r =>
Doc -> VS (r TypeData) -> VS (r FuncData)
funcFromData Doc
empty State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void
  setFunc :: State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ValueState FuncData
setFunc State ValueState (CppHdrCode TypeData)
_ HdrState ValueState Variable
_ HdrState ValueState Value
_ = Doc
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
forall (r :: * -> *).
RenderFunction r =>
Doc -> VS (r TypeData) -> VS (r FuncData)
funcFromData Doc
empty State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void

instance InternalListFunc CppHdrCode where
  listAccessFunc :: State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Value -> HdrState ValueState FuncData
listAccessFunc State ValueState (CppHdrCode TypeData)
_ HdrState ValueState Value
_ = Doc
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
forall (r :: * -> *).
RenderFunction r =>
Doc -> VS (r TypeData) -> VS (r FuncData)
funcFromData Doc
empty State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void

instance BinderSym CppHdrCode where
  binder :: ClassName
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState BinderD
binder ClassName
nm State ValueState (CppHdrCode TypeData)
tp = (TypeData -> BinderD) -> CppHdrCode TypeData -> CppHdrCode BinderD
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (ClassName -> TypeData -> BinderD
bindFormD ClassName
nm) (CppHdrCode TypeData -> CppHdrCode BinderD)
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState BinderD
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
<$> State ValueState (CppHdrCode TypeData)
tp

instance BinderElim CppHdrCode where
  binderName :: CppHdrCode BinderD -> ClassName
binderName = BinderD -> ClassName
bindName (BinderD -> ClassName)
-> (CppHdrCode BinderD -> BinderD)
-> CppHdrCode BinderD
-> ClassName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode BinderD -> BinderD
forall a. CppHdrCode a -> a
unCPPHC
  binderType :: CppHdrCode BinderD -> CppHdrCode TypeData
binderType = (BinderD -> TypeData) -> CppHdrCode BinderD -> CppHdrCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue BinderD -> TypeData
bindType

instance InternalBinderElim CppHdrCode where
  binderElim :: CppHdrCode BinderD -> Doc
binderElim = ClassName -> Doc
text (ClassName -> Doc)
-> (CppHdrCode BinderD -> ClassName) -> CppHdrCode BinderD -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BinderD -> ClassName
bindName (BinderD -> ClassName)
-> (CppHdrCode BinderD -> BinderD)
-> CppHdrCode BinderD
-> ClassName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode BinderD -> BinderD
forall a. CppHdrCode a -> a
unCPPHC

instance RenderFunction CppHdrCode where
  funcFromData :: Doc
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
funcFromData Doc
d = (CppHdrCode TypeData -> CppHdrCode FuncData)
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue ((TypeData -> FuncData)
-> CppHdrCode TypeData -> CppHdrCode FuncData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (TypeData -> Doc -> FuncData
`fd` Doc
d))

instance FunctionElim CppHdrCode where
  functionType :: CppHdrCode FuncData -> CppHdrCode TypeData
functionType = (FuncData -> TypeData)
-> CppHdrCode FuncData -> CppHdrCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue FuncData -> TypeData
fType
  function :: CppHdrCode FuncData -> Doc
function = FuncData -> Doc
funcDoc (FuncData -> Doc)
-> (CppHdrCode FuncData -> FuncData) -> CppHdrCode FuncData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode FuncData -> FuncData
forall a. CppHdrCode a -> a
unCPPHC

instance InternalAssignStmt CppHdrCode (Doc, Terminator) where
  multiAssign :: [HdrState ValueState Variable]
-> [HdrState ValueState Value]
-> HdrState MethodState (Doc, Terminator)
multiAssign [HdrState ValueState Variable]
_ [HdrState ValueState Value]
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance InternalIOStmt CppHdrCode (Doc, Terminator) where
  printSt :: Bool
-> Maybe (HdrState ValueState Value)
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
printSt Bool
_ Maybe (HdrState ValueState Value)
_ HdrState ValueState Value
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance InternalControlStmt CppHdrCode (Doc, Terminator) where
  multiReturn :: [HdrState ValueState Value]
-> HdrState MethodState (Doc, Terminator)
multiReturn [HdrState ValueState Value]
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance RenderStatement CppHdrCode (Doc, Terminator) where
  stmt :: HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
stmt = HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(RenderStatement r smt, StatementElim r smt) =>
MS (r smt) -> MS (r smt)
G.stmt
  loopStmt :: HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
loopStmt HdrState MethodState (Doc, Terminator)
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  stmtFromData :: Doc -> Terminator -> HdrState MethodState (Doc, Terminator)
stmtFromData Doc
d Terminator
t = CppHdrCode (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
forall a s. a -> State s a
toState (CppHdrCode (Doc, Terminator)
 -> HdrState MethodState (Doc, Terminator))
-> CppHdrCode (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ (Doc, Terminator) -> CppHdrCode (Doc, Terminator)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, Terminator
t)

instance StatementElim CppHdrCode (Doc, Terminator) where
  statement :: CppHdrCode (Doc, Terminator) -> Doc
statement = (Doc, Terminator) -> Doc
forall a b. (a, b) -> a
fst ((Doc, Terminator) -> Doc)
-> (CppHdrCode (Doc, Terminator) -> (Doc, Terminator))
-> CppHdrCode (Doc, Terminator)
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode (Doc, Terminator) -> (Doc, Terminator)
forall a. CppHdrCode a -> a
unCPPHC
  statementTerm :: CppHdrCode (Doc, Terminator) -> Terminator
statementTerm = (Doc, Terminator) -> Terminator
forall a b. (a, b) -> b
snd ((Doc, Terminator) -> Terminator)
-> (CppHdrCode (Doc, Terminator) -> (Doc, Terminator))
-> CppHdrCode (Doc, Terminator)
-> Terminator
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode (Doc, Terminator) -> (Doc, Terminator)
forall a. CppHdrCode a -> a
unCPPHC

instance StatementSym CppHdrCode (Doc, Terminator) where
  valStmt :: HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
valStmt HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  emptyStmt :: HdrState MethodState (Doc, Terminator)
emptyStmt = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. RenderStatement r smt => MS (r smt)
G.emptyStmt
  multi :: [HdrState MethodState (Doc, Terminator)]
-> HdrState MethodState (Doc, Terminator)
multi [HdrState MethodState (Doc, Terminator)]
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance AssignStatement CppHdrCode (Doc, Terminator) where
  assign :: HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
assign HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  &-= :: HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
(&-=) HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  &+= :: HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
(&+=) HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  &++ :: HdrState ValueState Variable
-> HdrState MethodState (Doc, Terminator)
(&++) HdrState ValueState Variable
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  &-- :: HdrState ValueState Variable
-> HdrState MethodState (Doc, Terminator)
(&--) HdrState ValueState Variable
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance DeclStatement CppHdrCode (Doc, Terminator) where
  varDec :: HdrState ValueState Variable
-> CppHdrCode ScopeData -> HdrState MethodState (Doc, Terminator)
varDec HdrState ValueState Variable
vr CppHdrCode ScopeData
scp = do
    CppHdrCode Variable
vr' <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
-> HdrState ValueState Variable
-> StateT MethodState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState Variable
vr
    let tp :: CodeType
tp = (TypeData -> CodeType
cType (TypeData -> CodeType)
-> (CppHdrCode Variable -> TypeData)
-> CppHdrCode Variable
-> CodeType
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode TypeData -> TypeData
forall a. CppHdrCode a -> a
unCPPHC (CppHdrCode TypeData -> TypeData)
-> (CppHdrCode Variable -> CppHdrCode TypeData)
-> CppHdrCode Variable
-> TypeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Variable -> CppHdrCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType) CppHdrCode Variable
vr'
    case CodeType
tp of
      (Array CodeType
_) -> ClassName -> HdrState MethodState (Doc, Terminator)
forall a. HasCallStack => ClassName -> a
error ClassName
"Can't use `varDec` for C++ arrays; use `arrayDec`"
      CodeType
_         -> CppHdrCode AttachmentData
-> CppHdrCode AttachmentData
-> Doc
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) att smt.
(InternalVarElim r, PermElim r att, RenderStatement r smt,
 ScopeElim r, UnRepr r TypeData, TypeElim r, VariableElim r) =>
r att -> r att -> Doc -> SVariable r -> r ScopeData -> MS (r smt)
C.varDec CppHdrCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
classLevel CppHdrCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
instanceLevel Doc
empty HdrState ValueState Variable
vr CppHdrCode ScopeData
scp
  varDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
varDecDef = Terminator
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(DeclStatement r smt, RenderStatement r smt, StatementElim r smt,
 ValueElim r) =>
Terminator -> SVariable r -> r ScopeData -> SValue r -> MS (r smt)
C.varDecDef Terminator
Semi
  setDec :: HdrState ValueState Variable
-> CppHdrCode ScopeData -> HdrState MethodState (Doc, Terminator)
setDec = HdrState ValueState Variable
-> CppHdrCode ScopeData -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
varDec
  setDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
setDecDef = HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
varDecDef
  listDec :: Integer
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState MethodState (Doc, Terminator)
listDec Integer
_ HdrState ValueState Variable
_ CppHdrCode ScopeData
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  listDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState (Doc, Terminator)
listDecDef HdrState ValueState Variable
_ CppHdrCode ScopeData
_ [HdrState ValueState Value]
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  arrayDec :: Integer
-> HdrState ValueState Value
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState MethodState (Doc, Terminator)
arrayDec Integer
_ HdrState ValueState Value
_ HdrState ValueState Variable
_ CppHdrCode ScopeData
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  arrayDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState (Doc, Terminator)
arrayDecDef HdrState ValueState Variable
_ CppHdrCode ScopeData
_ [HdrState ValueState Value]
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  constDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
constDecDef = HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
(InternalVarElim r, RenderStatement r smt, ScopeElim r,
 UnRepr r TypeData, ValueElim r, VariableElim r) =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
CG.constDecDef
  funcDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
funcDecDef HdrState ValueState Variable
_ CppHdrCode ScopeData
_ [HdrState ValueState Variable]
_ HdrState MethodState Doc
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance OODeclStatement CppHdrCode (Doc, Terminator) where
  objDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
objDecDef HdrState ValueState Variable
_ CppHdrCode ScopeData
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  objDecNew :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState (Doc, Terminator)
objDecNew HdrState ValueState Variable
_ CppHdrCode ScopeData
_ [HdrState ValueState Value]
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  extObjDecNew :: ClassName
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState (Doc, Terminator)
extObjDecNew ClassName
_ HdrState ValueState Variable
_ CppHdrCode ScopeData
_ [HdrState ValueState Value]
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance IOStatement CppHdrCode (Doc, Terminator) where
  print :: HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
print HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  printLn :: HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
printLn HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  printStr :: ClassName -> HdrState MethodState (Doc, Terminator)
printStr ClassName
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  printStrLn :: ClassName -> HdrState MethodState (Doc, Terminator)
printStrLn ClassName
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

  printFile :: HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
printFile HdrState ValueState Value
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  printFileLn :: HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
printFileLn HdrState ValueState Value
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  printFileStr :: HdrState ValueState Value
-> ClassName -> HdrState MethodState (Doc, Terminator)
printFileStr HdrState ValueState Value
_ ClassName
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  printFileStrLn :: HdrState ValueState Value
-> ClassName -> HdrState MethodState (Doc, Terminator)
printFileStrLn HdrState ValueState Value
_ ClassName
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

  getInput :: HdrState ValueState Variable
-> HdrState MethodState (Doc, Terminator)
getInput HdrState ValueState Variable
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  discardInput :: HdrState MethodState (Doc, Terminator)
discardInput = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  getFileInput :: HdrState ValueState Value
-> HdrState ValueState Variable
-> HdrState MethodState (Doc, Terminator)
getFileInput HdrState ValueState Value
_ HdrState ValueState Variable
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  discardFileInput :: HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
discardFileInput HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

  openFileR :: HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
openFileR HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  openFileW :: HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
openFileW HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  openFileA :: HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
openFileA HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  closeFile :: HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
closeFile HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

  getFileInputLine :: HdrState ValueState Value
-> HdrState ValueState Variable
-> HdrState MethodState (Doc, Terminator)
getFileInputLine HdrState ValueState Value
_ HdrState ValueState Variable
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  discardFileLine :: HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
discardFileLine HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  getFileInputAll :: HdrState ValueState Value
-> HdrState ValueState Variable
-> HdrState MethodState (Doc, Terminator)
getFileInputAll HdrState ValueState Value
_ HdrState ValueState Variable
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance StringStatement CppHdrCode (Doc, Terminator) where
  stringSplit :: Char
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
stringSplit Char
_ HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

  stringListVals :: [HdrState ValueState Variable]
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
stringListVals [HdrState ValueState Variable]
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  stringListLists :: [HdrState ValueState Variable]
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
stringListLists [HdrState ValueState Variable]
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance FuncAppStatement CppHdrCode (Doc, Terminator) where
  inOutCall :: InOutCall CppHdrCode (Doc, Terminator)
inOutCall ClassName
_ [HdrState ValueState Value]
_ [HdrState ValueState Variable]
_ [HdrState ValueState Variable]
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  extInOutCall :: ClassName -> InOutCall CppHdrCode (Doc, Terminator)
extInOutCall ClassName
_ ClassName
_ [HdrState ValueState Value]
_ [HdrState ValueState Variable]
_ [HdrState ValueState Variable]
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance OOFuncAppStatement CppHdrCode (Doc, Terminator) where
  selfInOutCall :: InOutCall CppHdrCode (Doc, Terminator)
selfInOutCall ClassName
_ [HdrState ValueState Value]
_ [HdrState ValueState Variable]
_ [HdrState ValueState Variable]
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance CommentStatement CppHdrCode (Doc, Terminator) where
  comment :: ClassName -> HdrState MethodState (Doc, Terminator)
comment ClassName
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance ControlStatement CppHdrCode (Doc, Terminator) where
  break :: HdrState MethodState (Doc, Terminator)
break = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  continue :: HdrState MethodState (Doc, Terminator)
continue = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

  returnStmt :: HdrState ValueState Value -> HdrState MethodState (Doc, Terminator)
returnStmt HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

  throw :: ClassName -> HdrState MethodState (Doc, Terminator)
throw ClassName
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

  ifCond :: [(HdrState ValueState Value, HdrState MethodState Doc)]
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
ifCond [(HdrState ValueState Value, HdrState MethodState Doc)]
_ HdrState MethodState Doc
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  switch :: HdrState ValueState Value
-> [(HdrState ValueState Value, HdrState MethodState Doc)]
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
switch HdrState ValueState Value
_ [(HdrState ValueState Value, HdrState MethodState Doc)]
_ HdrState MethodState Doc
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

  ifExists :: HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
ifExists HdrState ValueState Value
_ HdrState MethodState Doc
_ HdrState MethodState Doc
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

  for :: HdrState MethodState (Doc, Terminator)
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
for HdrState MethodState (Doc, Terminator)
_ HdrState ValueState Value
_ HdrState MethodState (Doc, Terminator)
_ HdrState MethodState Doc
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  forRange :: HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forRange HdrState ValueState Variable
_ HdrState ValueState Value
_ HdrState ValueState Value
_ HdrState ValueState Value
_ HdrState MethodState Doc
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  forEach :: HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forEach HdrState ValueState Variable
_ HdrState ValueState Value
_ HdrState MethodState Doc
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  while :: HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
while HdrState ValueState Value
_ HdrState MethodState Doc
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

  tryCatch :: HdrState MethodState Doc
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
tryCatch HdrState MethodState Doc
_ HdrState MethodState Doc
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

  assert :: HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
assert HdrState ValueState Value
_ HdrState ValueState Value
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance ObserverPattern CppHdrCode (Doc, Terminator) where
  notifyObservers :: HdrState ValueState FuncData
-> State ValueState (CppHdrCode TypeData)
-> HdrState MethodState (Doc, Terminator)
notifyObservers HdrState ValueState FuncData
_ State ValueState (CppHdrCode TypeData)
_ = HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt

instance StrategyPattern CppHdrCode (Doc, Terminator) where
  runStrategy :: ClassName
-> [(ClassName, HdrState MethodState Doc)]
-> Maybe (HdrState ValueState Value)
-> Maybe (HdrState ValueState Variable)
-> HdrState MethodState Doc
runStrategy ClassName
_ [(ClassName, HdrState MethodState Doc)]
_ Maybe (HdrState ValueState Value)
_ Maybe (HdrState ValueState Variable)
_ = CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

instance VisibilitySym CppHdrCode (Doc, VisibilityTag) where
  private :: CppHdrCode (Doc, VisibilityTag)
private = (Doc, VisibilityTag) -> CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
R.private, VisibilityTag
Priv)
  public :: CppHdrCode (Doc, VisibilityTag)
public = (Doc, VisibilityTag) -> CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
R.public, VisibilityTag
Pub)

instance RenderVisibility CppHdrCode (Doc, VisibilityTag) where
  visibilityFromData :: VisibilityTag -> Doc -> CppHdrCode (Doc, VisibilityTag)
visibilityFromData VisibilityTag
s Doc
d = (Doc, VisibilityTag) -> CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, VisibilityTag
s)

instance VisibilityElim CppHdrCode (Doc, VisibilityTag) where
  visibility :: CppHdrCode (Doc, VisibilityTag) -> Doc
visibility = (Doc, VisibilityTag) -> Doc
forall a b. (a, b) -> a
fst ((Doc, VisibilityTag) -> Doc)
-> (CppHdrCode (Doc, VisibilityTag) -> (Doc, VisibilityTag))
-> CppHdrCode (Doc, VisibilityTag)
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppHdrCode a -> a
unCPPHC

instance MethodTypeSym CppHdrCode where
  mType :: State ValueState (CppHdrCode TypeData)
-> HdrState MethodState TypeData
mType = LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode TypeData))
  MethodState
  ValueState
-> State ValueState (CppHdrCode TypeData)
-> HdrState MethodState TypeData
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode TypeData))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS

instance OOMethodTypeSym CppHdrCode where
  construct :: ClassName -> HdrState MethodState TypeData
construct = ClassName -> HdrState MethodState TypeData
forall (r :: * -> *). Monad r => ClassName -> MS (r TypeData)
G.construct

instance ParameterSym CppHdrCode where
  param :: HdrState ValueState Variable -> HdrState MethodState ParamData
param HdrState ValueState Variable
v' = do
    CppHdrCode Variable
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
-> HdrState ValueState Variable
-> StateT MethodState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState Variable
v'
    HdrState ValueState Variable
-> Doc -> HdrState MethodState ParamData
forall (r :: * -> *).
RenderParam r =>
SVariable r -> Doc -> MS (r ParamData)
paramFromData HdrState ValueState Variable
v' (CppHdrCode Variable -> Doc
forall (r :: * -> *).
(InternalVarElim r, UnRepr r TypeData, VariableElim r) =>
r Variable -> Doc
renderParam CppHdrCode Variable
v)
  pointerParam :: HdrState ValueState Variable -> HdrState MethodState ParamData
pointerParam HdrState ValueState Variable
v' = do
    CppHdrCode Variable
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
-> HdrState ValueState Variable
-> StateT MethodState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState Variable
v'
    HdrState ValueState Variable
-> Doc -> HdrState MethodState ParamData
forall (r :: * -> *).
RenderParam r =>
SVariable r -> Doc -> MS (r ParamData)
paramFromData HdrState ValueState Variable
v' (CppHdrCode Variable -> Doc
forall (r :: * -> *).
(InternalVarElim r, UnRepr r TypeData, VariableElim r) =>
r Variable -> Doc
cppPointerParamDoc CppHdrCode Variable
v)

instance RenderParam CppHdrCode where
  paramFromData :: HdrState ValueState Variable
-> Doc -> HdrState MethodState ParamData
paramFromData HdrState ValueState Variable
v' Doc
d = do
    CppHdrCode Variable
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
-> HdrState ValueState Variable
-> StateT MethodState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState Variable
v'
    CppHdrCode ParamData -> HdrState MethodState ParamData
forall a s. a -> State s a
toState (CppHdrCode ParamData -> HdrState MethodState ParamData)
-> CppHdrCode ParamData -> HdrState MethodState ParamData
forall a b. (a -> b) -> a -> b
$ (Variable -> Doc -> ParamData)
-> CppHdrCode Variable -> CppHdrCode Doc -> CppHdrCode ParamData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues Variable -> Doc -> ParamData
pd CppHdrCode Variable
v (Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)

instance ParamElim CppHdrCode where
  parameterName :: CppHdrCode ParamData -> ClassName
parameterName = CppHdrCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName (CppHdrCode Variable -> ClassName)
-> (CppHdrCode ParamData -> CppHdrCode Variable)
-> CppHdrCode ParamData
-> ClassName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> Variable)
-> CppHdrCode ParamData -> CppHdrCode Variable
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ParamData -> Variable
paramVar
  parameterType :: CppHdrCode ParamData -> CppHdrCode TypeData
parameterType = CppHdrCode Variable -> CppHdrCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType (CppHdrCode Variable -> CppHdrCode TypeData)
-> (CppHdrCode ParamData -> CppHdrCode Variable)
-> CppHdrCode ParamData
-> CppHdrCode TypeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> Variable)
-> CppHdrCode ParamData -> CppHdrCode Variable
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ParamData -> Variable
paramVar
  parameter :: CppHdrCode ParamData -> Doc
parameter = ParamData -> Doc
paramDoc (ParamData -> Doc)
-> (CppHdrCode ParamData -> ParamData)
-> CppHdrCode ParamData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode ParamData -> ParamData
forall a. CppHdrCode a -> a
unCPPHC

instance MethodSym CppHdrCode (Doc, VisibilityTag) (Doc, Terminator) MethodData where
  docMain :: HdrState MethodState Doc -> HdrState MethodState MethodData
docMain = HdrState MethodState Doc -> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
MS (r Doc) -> MS (r md)
mainFunction
  function :: ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
function = ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) att vis md.
(AttachmentSym r att, OORenderMethod r vis md att) =>
ClassName
-> r vis
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
G.function
  mainFunction :: HdrState MethodState Doc -> HdrState MethodState MethodData
mainFunction HdrState MethodState Doc
_ = (MethodState -> MethodState)
-> CppHdrCode MethodData -> HdrState MethodState MethodData
forall s a. (s -> s) -> a -> State s a
modifyReturn (VisibilityTag -> MethodState -> MethodState
setVisibility VisibilityTag
Pub) (CppHdrCode MethodData -> HdrState MethodState MethodData)
-> CppHdrCode MethodData -> HdrState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ MethodData -> CppHdrCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> CppHdrCode MethodData)
-> MethodData -> CppHdrCode MethodData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> MethodData
mthd VisibilityTag
Pub Doc
empty
  docFunc :: ClassName
-> [ClassName]
-> Maybe ClassName
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
docFunc = ClassName
-> [ClassName]
-> Maybe ClassName
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
forall (r :: * -> *) md.
RenderMethod r md =>
ClassName
-> [ClassName] -> Maybe ClassName -> MS (r md) -> MS (r md)
CP.doxFunc

  inOutFunc :: ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
inOutFunc ClassName
n CppHdrCode (Doc, VisibilityTag)
s = (State ValueState (CppHdrCode TypeData)
 -> [HdrState MethodState ParamData]
 -> HdrState MethodState Doc
 -> HdrState MethodState MethodData)
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall md.
(State ValueState (CppHdrCode TypeData)
 -> [HdrState MethodState ParamData]
 -> HdrState MethodState Doc
 -> MS (CppHdrCode md))
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> MS (CppHdrCode md)
cpphInOut (ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
ClassName
-> r vis
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
function ClassName
n CppHdrCode (Doc, VisibilityTag)
s)
  docInOutFunc :: ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> DocInOutFunc CppHdrCode MethodData
docInOutFunc ClassName
n CppHdrCode (Doc, VisibilityTag)
s = ([HdrState ValueState Variable]
 -> [HdrState ValueState Variable]
 -> [HdrState ValueState Variable]
 -> HdrState MethodState Doc
 -> HdrState MethodState MethodData)
-> DocInOutFunc CppHdrCode MethodData
forall (r :: * -> *) md.
RenderMethod r md =>
([SVariable r]
 -> [SVariable r] -> [SVariable r] -> MS (r Doc) -> MS (r md))
-> ClassName
-> [(ClassName, SVariable r)]
-> [(ClassName, SVariable r)]
-> [(ClassName, SVariable r)]
-> MS (r Doc)
-> MS (r md)
CP.docInOutFunc (ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
ClassName -> r vis -> InOutFunc r md
inOutFunc ClassName
n CppHdrCode (Doc, VisibilityTag)
s)

instance OOMethodSym CppHdrCode (Doc, VisibilityTag) (Doc, Terminator) MethodData AttachmentData where
  method :: ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
method = ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis md att.
OORenderMethod r vis md att =>
ClassName
-> r vis
-> r att
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
G.method
  getMethod :: HdrState ValueState Variable -> HdrState MethodState MethodData
getMethod HdrState ValueState Variable
v = LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
-> HdrState ValueState Variable
-> StateT MethodState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState Variable
v StateT MethodState Identity (CppHdrCode Variable)
-> (CppHdrCode Variable -> HdrState MethodState MethodData)
-> HdrState MethodState MethodData
forall a b.
StateT MethodState Identity a
-> (a -> StateT MethodState Identity b)
-> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\CppHdrCode Variable
v' -> ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
ClassName
-> r vis
-> r att
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
method (ClassName -> ClassName
getterName (ClassName -> ClassName) -> ClassName -> ClassName
forall a b. (a -> b) -> a -> b
$ CppHdrCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName
    CppHdrCode Variable
v') CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
public CppHdrCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
instanceLevel (CppHdrCode TypeData -> State ValueState (CppHdrCode TypeData)
forall a s. a -> State s a
toState (CppHdrCode TypeData -> State ValueState (CppHdrCode TypeData))
-> CppHdrCode TypeData -> State ValueState (CppHdrCode TypeData)
forall a b. (a -> b) -> a -> b
$ CppHdrCode Variable -> CppHdrCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType CppHdrCode Variable
v') [] (CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty))
  setMethod :: HdrState ValueState Variable -> HdrState MethodState MethodData
setMethod HdrState ValueState Variable
v = LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
-> HdrState ValueState Variable
-> StateT MethodState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState Variable
v StateT MethodState Identity (CppHdrCode Variable)
-> (CppHdrCode Variable -> HdrState MethodState MethodData)
-> HdrState MethodState MethodData
forall a b.
StateT MethodState Identity a
-> (a -> StateT MethodState Identity b)
-> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\CppHdrCode Variable
v' -> ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
ClassName
-> r vis
-> r att
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
method (ClassName -> ClassName
setterName (ClassName -> ClassName) -> ClassName -> ClassName
forall a b. (a -> b) -> a -> b
$ CppHdrCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName
    CppHdrCode Variable
v') CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
public CppHdrCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
instanceLevel State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void [HdrState ValueState Variable -> HdrState MethodState ParamData
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
param HdrState ValueState Variable
v] (CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty))
  constructor :: [HdrState MethodState ParamData]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
constructor [HdrState MethodState ParamData]
ps [(HdrState ValueState Variable, HdrState ValueState Value)]
is HdrState MethodState Doc
b = StateT MethodState Identity ClassName
getClassName StateT MethodState Identity ClassName
-> (ClassName -> HdrState MethodState MethodData)
-> HdrState MethodState MethodData
forall a b.
StateT MethodState Identity a
-> (a -> StateT MethodState Identity b)
-> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\ClassName
n -> ClassName
-> [HdrState MethodState ParamData]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md svr att.
(OORenderSym r vis smt md svr att, OOStatement r smt) =>
ClassName
-> [MS (r ParamData)] -> Initializers r -> MS (r Doc) -> MS (r md)
CP.constructor ClassName
n [HdrState MethodState ParamData]
ps [(HdrState ValueState Variable, HdrState ValueState Value)]
is HdrState MethodState Doc
b)

  inOutMethod :: ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
inOutMethod ClassName
n CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
p = (State ValueState (CppHdrCode TypeData)
 -> [HdrState MethodState ParamData]
 -> HdrState MethodState Doc
 -> HdrState MethodState MethodData)
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall md.
(State ValueState (CppHdrCode TypeData)
 -> [HdrState MethodState ParamData]
 -> HdrState MethodState Doc
 -> MS (CppHdrCode md))
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> MS (CppHdrCode md)
cpphInOut (ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
ClassName
-> r vis
-> r att
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Doc)
-> MS (r md)
method ClassName
n CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
p)
  docInOutMethod :: ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> DocInOutFunc CppHdrCode MethodData
docInOutMethod ClassName
n CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
p = ([HdrState ValueState Variable]
 -> [HdrState ValueState Variable]
 -> [HdrState ValueState Variable]
 -> HdrState MethodState Doc
 -> HdrState MethodState MethodData)
-> DocInOutFunc CppHdrCode MethodData
forall (r :: * -> *) md.
RenderMethod r md =>
([SVariable r]
 -> [SVariable r] -> [SVariable r] -> MS (r Doc) -> MS (r md))
-> ClassName
-> [(ClassName, SVariable r)]
-> [(ClassName, SVariable r)]
-> [(ClassName, SVariable r)]
-> MS (r Doc)
-> MS (r md)
CP.docInOutFunc (ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
ClassName -> r vis -> r att -> InOutFunc r md
inOutMethod ClassName
n CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
p)

instance RenderMethod CppHdrCode MethodData where
  commentedFunc :: HdrState MethodState Doc
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
commentedFunc = FileType
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
forall (r :: * -> *).
(BlockCommentElim r, Monad r) =>
FileType -> MS (r Doc) -> MS (r MethodData) -> MS (r MethodData)
cppCommentedFunc FileType
Header

  mthdFromData :: VisibilityTag -> Doc -> HdrState MethodState MethodData
mthdFromData VisibilityTag
s Doc
d = CppHdrCode MethodData -> HdrState MethodState MethodData
forall a s. a -> State s a
toState (CppHdrCode MethodData -> HdrState MethodState MethodData)
-> CppHdrCode MethodData -> HdrState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ MethodData -> CppHdrCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> CppHdrCode MethodData)
-> MethodData -> CppHdrCode MethodData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> MethodData
mthd VisibilityTag
s Doc
d

instance OORenderMethod CppHdrCode (Doc, VisibilityTag) MethodData AttachmentData where
  intMethod :: Bool
-> ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
intMethod Bool
_ ClassName
n CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
a HdrState MethodState TypeData
t [HdrState MethodState ParamData]
ps HdrState MethodState Doc
_ = do
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (VisibilityTag -> MethodState -> MethodState
setVisibility ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd ((Doc, VisibilityTag) -> VisibilityTag)
-> (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode (Doc, VisibilityTag)
s))
    CppHdrCode TypeData
tp <- HdrState MethodState TypeData
t
    [CppHdrCode ParamData]
pms <- [HdrState MethodState ParamData]
-> StateT MethodState Identity [CppHdrCode ParamData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [HdrState MethodState ParamData]
ps
    CppHdrCode MethodData -> HdrState MethodState MethodData
forall a. a -> StateT MethodState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode MethodData -> HdrState MethodState MethodData)
-> CppHdrCode MethodData -> HdrState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ MethodData -> CppHdrCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> CppHdrCode MethodData)
-> MethodData -> CppHdrCode MethodData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> MethodData
mthd ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd ((Doc, VisibilityTag) -> VisibilityTag)
-> (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode (Doc, VisibilityTag)
s) (Doc -> MethodData) -> Doc -> MethodData
forall a b. (a -> b) -> a -> b
$ ClassName
-> CppHdrCode TypeData
-> CppHdrCode AttachmentData
-> [CppHdrCode ParamData]
-> Doc
cpphMethod ClassName
n CppHdrCode TypeData
tp CppHdrCode AttachmentData
a [CppHdrCode ParamData]
pms
  intFunc :: Bool
-> ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
intFunc Bool
_ = ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall att.
ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode att
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
cpphIntFunc
  destructor :: forall svr.
[CSStateVar CppHdrCode svr] -> HdrState MethodState MethodData
destructor = ClassName
-> [CSStateVar CppHdrCode svr] -> HdrState MethodState MethodData
forall a. HasCallStack => ClassName -> a
error (ClassName
 -> [CSStateVar CppHdrCode svr] -> HdrState MethodState MethodData)
-> ClassName
-> [CSStateVar CppHdrCode svr]
-> HdrState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ ClassName -> ClassName
CP.destructorError ClassName
cppName

instance MethodElim CppHdrCode MethodData where
  method :: CppHdrCode MethodData -> Doc
method = MethodData -> Doc
mthdDoc (MethodData -> Doc)
-> (CppHdrCode MethodData -> MethodData)
-> CppHdrCode MethodData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode MethodData -> MethodData
forall a. CppHdrCode a -> a
unCPPHC

instance StateVarSym CppHdrCode (Doc, VisibilityTag) StateVarData AttachmentData where
  stateVar :: CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState ValueState Variable
-> HdrState ClassState StateVarData
stateVar CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
p HdrState ValueState Variable
v = do
    CppHdrCode (Doc, Terminator)
dec <- LensLike'
  (Zoomed
     (StateT MethodState Identity) (CppHdrCode (Doc, Terminator)))
  ClassState
  MethodState
-> HdrState MethodState (Doc, Terminator)
-> StateT ClassState Identity (CppHdrCode (Doc, Terminator))
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (CppHdrCode (Doc, Terminator)))
  ClassState
  MethodState
(MethodState
 -> Focusing Identity (CppHdrCode (Doc, Terminator)) MethodState)
-> ClassState
-> Focusing Identity (CppHdrCode (Doc, Terminator)) ClassState
Lens' ClassState MethodState
lensCStoMS (HdrState MethodState (Doc, Terminator)
 -> StateT ClassState Identity (CppHdrCode (Doc, Terminator)))
-> HdrState MethodState (Doc, Terminator)
-> StateT ClassState Identity (CppHdrCode (Doc, Terminator))
forall a b. (a -> b) -> a -> b
$ HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
MS (r smt) -> MS (r smt)
stmt (HdrState MethodState (Doc, Terminator)
 -> HdrState MethodState (Doc, Terminator))
-> HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ CppHdrCode AttachmentData
-> CppHdrCode AttachmentData
-> Doc
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) att smt.
(InternalVarElim r, PermElim r att, RenderStatement r smt,
 ScopeElim r, UnRepr r TypeData, TypeElim r, VariableElim r) =>
r att -> r att -> Doc -> SVariable r -> r ScopeData -> MS (r smt)
C.varDec CppHdrCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
classLevel CppHdrCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
instanceLevel Doc
empty HdrState ValueState Variable
v CppHdrCode ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
local
    CppHdrCode StateVarData -> HdrState ClassState StateVarData
forall a. a -> StateT ClassState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode StateVarData -> HdrState ClassState StateVarData)
-> CppHdrCode StateVarData -> HdrState ClassState StateVarData
forall a b. (a -> b) -> a -> b
$ (VisibilityTag -> Doc -> StateVarData)
-> CppHdrCode VisibilityTag
-> CppHdrCode Doc
-> CppHdrCode StateVarData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues VisibilityTag -> Doc -> StateVarData
svd (((Doc, VisibilityTag) -> VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag) -> CppHdrCode VisibilityTag
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd CppHdrCode (Doc, VisibilityTag)
s)
      (Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppHdrCode Doc) -> Doc -> CppHdrCode Doc
forall a b. (a -> b) -> a -> b
$ Doc -> Doc -> Doc -> Doc
R.stateVar Doc
empty (CppHdrCode AttachmentData -> Doc
forall (r :: * -> *) att. PermElim r att => r att -> Doc
RC.perm CppHdrCode AttachmentData
p) (CppHdrCode (Doc, Terminator) -> Doc
forall (r :: * -> *) smt. StatementElim r smt => r smt -> Doc
RC.statement CppHdrCode (Doc, Terminator)
dec))
  stateVarDef :: CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ClassState StateVarData
stateVarDef CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
p HdrState ValueState Variable
vr HdrState ValueState Value
vl = do
    Doc
d <- Doc
-> CppHdrCode AttachmentData
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> CS Doc
cpphStateVarDef Doc
empty CppHdrCode AttachmentData
p HdrState ValueState Variable
vr HdrState ValueState Value
vl
    CppHdrCode StateVarData -> HdrState ClassState StateVarData
forall a. a -> StateT ClassState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode StateVarData -> HdrState ClassState StateVarData)
-> CppHdrCode StateVarData -> HdrState ClassState StateVarData
forall a b. (a -> b) -> a -> b
$ StateVarData -> CppHdrCode StateVarData
forall a. a -> CppHdrCode a
forall (m :: * -> *) a. Monad m => a -> m a
return (StateVarData -> CppHdrCode StateVarData)
-> StateVarData -> CppHdrCode StateVarData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> StateVarData
svd ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd ((Doc, VisibilityTag) -> VisibilityTag)
-> (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode (Doc, VisibilityTag)
s) Doc
d
  constVar :: CppHdrCode (Doc, VisibilityTag)
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ClassState StateVarData
constVar CppHdrCode (Doc, VisibilityTag)
s HdrState ValueState Variable
vr HdrState ValueState Value
_ = do
    CppHdrCode Variable
vr' <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  ClassState
  ValueState
-> HdrState ValueState Variable
-> StateT ClassState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  ClassState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> ClassState -> Focusing Identity (CppHdrCode Variable) ClassState
Lens' ClassState ValueState
lensCStoVS HdrState ValueState Variable
vr
    let attch :: Doc
attch = Doc -> Doc -> Doc -> Variable -> Doc
R.constVar Doc
empty Doc
endStatement (AttachmentData -> Doc
attachmentDoc (CppHdrCode AttachmentData -> AttachmentData
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode AttachmentData
forall (r :: * -> *) att. AttachmentSym r att => r att
classLevel)) (CppHdrCode Variable -> Variable
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode Variable
vr')
    CppHdrCode StateVarData -> HdrState ClassState StateVarData
forall a. a -> StateT ClassState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode StateVarData -> HdrState ClassState StateVarData)
-> CppHdrCode StateVarData -> HdrState ClassState StateVarData
forall a b. (a -> b) -> a -> b
$ StateVarData -> CppHdrCode StateVarData
forall a. a -> CppHdrCode a
forall (m :: * -> *) a. Monad m => a -> m a
return (StateVarData -> CppHdrCode StateVarData)
-> StateVarData -> CppHdrCode StateVarData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> StateVarData
svd ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd ((Doc, VisibilityTag) -> VisibilityTag)
-> (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode (Doc, VisibilityTag)
s) Doc
attch
  -- constVar s vr _ = on2StateValues (on3CodeValues svd (onCodeValue snd s) .
  --   on2CodeValues (R.constVar empty endStatement) (attachmentDoc <$> classLevel))
  --   (zoom lensCStoVS vr) (zoom lensCStoMS emptyStmt)

instance StateVarElim CppHdrCode StateVarData where
  stateVar :: CppHdrCode StateVarData -> Doc
stateVar = StateVarData -> Doc
stVar (StateVarData -> Doc)
-> (CppHdrCode StateVarData -> StateVarData)
-> CppHdrCode StateVarData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode StateVarData -> StateVarData
forall a. CppHdrCode a -> a
unCPPHC

instance ClassSym CppHdrCode (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData where
  buildClass :: Maybe ClassName
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
buildClass = Maybe ClassName
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall (r :: * -> *) vis md svr.
(RenderClass r vis md svr, VisibilitySym r vis) =>
Maybe ClassName
-> [CSStateVar r svr] -> [MS (r md)] -> [MS (r md)] -> CS (r Doc)
G.buildClass
  extraClass :: ClassName
-> Maybe ClassName
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
extraClass = ClassName
-> Maybe ClassName
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall (r :: * -> *) vis md svr.
(RenderClass r vis md svr, VisibilitySym r vis) =>
ClassName
-> Maybe ClassName
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Doc)
CP.extraClass
  implementingClass :: ClassName
-> [ClassName]
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
implementingClass = ClassName
-> [ClassName]
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall (r :: * -> *) vis md svr.
(RenderClass r vis md svr, VisibilitySym r vis) =>
ClassName
-> [ClassName]
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Doc)
G.implementingClass

  docClass :: ClassName -> HdrState ClassState Doc -> HdrState ClassState Doc
docClass = ClassName -> HdrState ClassState Doc -> HdrState ClassState Doc
forall (r :: * -> *) vis md svr.
RenderClass r vis md svr =>
ClassName -> CS (r Doc) -> CS (r Doc)
CP.doxClass

instance RenderClass CppHdrCode (Doc, VisibilityTag) MethodData StateVarData where
  intClass :: ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode Doc
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
intClass ClassName
n CppHdrCode (Doc, VisibilityTag)
_ CppHdrCode Doc
i [HdrState ClassState StateVarData]
vs [HdrState MethodState MethodData]
cstrs [HdrState MethodState MethodData]
mths = do
    (ClassState -> ClassState) -> StateT ClassState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ClassState -> ClassState
setClassName ClassName
n)
    [CppHdrCode StateVarData]
vars <- [HdrState ClassState StateVarData]
-> StateT ClassState Identity [CppHdrCode StateVarData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [HdrState ClassState StateVarData]
vs
    [CppHdrCode MethodData]
funcs <- [StateT ClassState Identity (CppHdrCode MethodData)]
-> StateT ClassState Identity [CppHdrCode MethodData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [StateT ClassState Identity (CppHdrCode MethodData)]
fs
    CppHdrCode Doc -> HdrState ClassState Doc
forall a. a -> StateT ClassState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode Doc -> HdrState ClassState Doc)
-> CppHdrCode Doc -> HdrState ClassState Doc
forall a b. (a -> b) -> a -> b
$ ClassName
-> CppHdrCode Doc
-> [CppHdrCode StateVarData]
-> [CppHdrCode MethodData]
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode Doc
cpphClass ClassName
n CppHdrCode Doc
i [CppHdrCode StateVarData]
vars [CppHdrCode MethodData]
funcs CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
public CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
private
    where fs :: [StateT ClassState Identity (CppHdrCode MethodData)]
fs = (HdrState MethodState MethodData
 -> StateT ClassState Identity (CppHdrCode MethodData))
-> [HdrState MethodState MethodData]
-> [StateT ClassState Identity (CppHdrCode MethodData)]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed (StateT MethodState Identity) (CppHdrCode MethodData))
  ClassState
  MethodState
-> HdrState MethodState MethodData
-> StateT ClassState Identity (CppHdrCode MethodData)
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT MethodState Identity) (CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing Identity (CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing Identity (CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS) ([HdrState MethodState MethodData]
 -> [StateT ClassState Identity (CppHdrCode MethodData)])
-> [HdrState MethodState MethodData]
-> [StateT ClassState Identity (CppHdrCode MethodData)]
forall a b. (a -> b) -> a -> b
$ [HdrState MethodState MethodData]
cstrs [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
forall a. [a] -> [a] -> [a]
++ [HdrState MethodState MethodData]
mths

  inherit :: Maybe ClassName -> CppHdrCode Doc
inherit Maybe ClassName
n = ((Doc, VisibilityTag) -> Doc)
-> CppHdrCode (Doc, VisibilityTag) -> CppHdrCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (Maybe ClassName -> Doc -> Doc
cppInherit Maybe ClassName
n (Doc -> Doc)
-> ((Doc, VisibilityTag) -> Doc) -> (Doc, VisibilityTag) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Doc, VisibilityTag) -> Doc
forall a b. (a, b) -> a
fst) CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
public
  implements :: [ClassName] -> CppHdrCode Doc
implements [ClassName]
is = ((Doc, VisibilityTag) -> Doc)
-> CppHdrCode (Doc, VisibilityTag) -> CppHdrCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ((\Doc
p -> Doc
colon Doc -> Doc -> Doc
<+> [Doc] -> Doc
hcat ((ClassName -> Doc) -> [ClassName] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map ((Doc
p <+>) (Doc -> Doc) -> (ClassName -> Doc) -> ClassName -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> Doc
text) [ClassName]
is))
    (Doc -> Doc)
-> ((Doc, VisibilityTag) -> Doc) -> (Doc, VisibilityTag) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Doc, VisibilityTag) -> Doc
forall a b. (a, b) -> a
fst) CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
public

  commentedClass :: HdrState ClassState Doc
-> HdrState ClassState Doc -> HdrState ClassState Doc
commentedClass = HdrState ClassState Doc
-> HdrState ClassState Doc -> HdrState ClassState Doc
forall (r :: * -> *).
(BlockCommentElim r, ClassElim r, Monad r) =>
CS (r Doc) -> CS (r Doc) -> CS (r Doc)
G.commentedClass

instance ClassElim CppHdrCode where
  class' :: CppHdrCode Doc -> Doc
class' = CppHdrCode Doc -> Doc
forall a. CppHdrCode a -> a
unCPPHC

instance ModuleSym CppHdrCode (Doc, VisibilityTag) (Doc, Terminator) MethodData StateVarData AttachmentData where
  buildModule :: ClassName
-> [ClassName]
-> [HdrState MethodState MethodData]
-> [HdrState ClassState Doc]
-> HdrState FileState Module
buildModule ClassName
n [ClassName]
is = ClassName
-> FS Doc
-> FS Doc
-> FS Doc
-> [HdrState MethodState MethodData]
-> [HdrState ClassState Doc]
-> HdrState FileState Module
forall (r :: * -> *) md.
(ClassElim r, MethodElim r md, RenderMod r) =>
ClassName
-> FS Doc
-> FS Doc
-> FS Doc
-> [MS (r md)]
-> [CS (r Doc)]
-> FS (r Module)
CP.buildModule ClassName
n (do
    [ClassName]
ds <- FS [ClassName]
getHeaderDefines
    [ClassName]
lis <- FS [ClassName]
getHeaderLangImports
    [ClassName]
libis <- FS [ClassName]
getHeaderLibImports
    [ClassName]
mis <- FS [ClassName]
getHeaderModImports
    [ClassName]
us <- FS [ClassName]
getHeaderUsing
    Doc -> FS Doc
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Doc -> FS Doc) -> Doc -> FS Doc
forall a b. (a -> b) -> a -> b
$ [Doc] -> Doc
vibcat [
      [Doc] -> Doc
vcat ((ClassName -> Doc) -> [ClassName] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map ((Doc
define <+>) (Doc -> Doc) -> (ClassName -> Doc) -> ClassName -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> Doc
text) [ClassName]
ds),
      [Doc] -> Doc
vcat ((ClassName -> Doc) -> [ClassName] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode Doc -> Doc
forall (r :: * -> *). UnRepr r Doc => r Doc -> Doc
RC.import' (CppHdrCode Doc -> Doc)
-> (ClassName -> CppHdrCode Doc) -> ClassName -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> CppHdrCode Doc
li) [ClassName]
lis),
      [Doc] -> Doc
vcat ((ClassName -> Doc) -> [ClassName] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode Doc -> Doc
forall (r :: * -> *). UnRepr r Doc => r Doc -> Doc
RC.import' (CppHdrCode Doc -> Doc)
-> (ClassName -> CppHdrCode Doc) -> ClassName -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> CppHdrCode Doc
mi) ([ClassName] -> [ClassName]
forall a. Ord a => [a] -> [a]
sort ([ClassName]
is [ClassName] -> [ClassName] -> [ClassName]
forall a. [a] -> [a] -> [a]
++ [ClassName]
libis) [ClassName] -> [ClassName] -> [ClassName]
forall a. [a] -> [a] -> [a]
++ [ClassName]
mis)),
      [Doc] -> Doc
vcat ((ClassName -> Doc) -> [ClassName] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (ClassName -> Maybe ClassName -> Doc
usingNameSpace ClassName
std (Maybe ClassName -> Doc)
-> (ClassName -> Maybe ClassName) -> ClassName -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> Maybe ClassName
forall a. a -> Maybe a
Just) [ClassName]
us)])
    (Doc -> FS Doc
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Doc
empty) (Doc -> FS Doc
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Doc
empty)
    where mi, li :: Label -> CppHdrCode Doc
          mi :: ClassName -> CppHdrCode Doc
mi = ClassName -> CppHdrCode Doc
forall (r :: * -> *). ImportSym r => ClassName -> r Doc
modImport
          li :: ClassName -> CppHdrCode Doc
li = ClassName -> CppHdrCode Doc
forall (r :: * -> *). ImportSym r => ClassName -> r Doc
langImport

instance RenderMod CppHdrCode where
  modFromData :: ClassName -> FS Doc -> HdrState FileState Module
modFromData ClassName
n = ClassName
-> (Doc -> CppHdrCode Module)
-> FS Doc
-> HdrState FileState Module
forall (r :: * -> *).
ClassName -> (Doc -> r Module) -> FS Doc -> FS (r Module)
G.modFromData ClassName
n (Module -> CppHdrCode Module
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Module -> CppHdrCode Module)
-> (Doc -> Module) -> Doc -> CppHdrCode Module
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> Doc -> Module
md ClassName
n)
  updateModuleDoc :: (Doc -> Doc) -> CppHdrCode Module -> CppHdrCode Module
updateModuleDoc Doc -> Doc
f = (Module -> Module) -> CppHdrCode Module -> CppHdrCode Module
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ((Doc -> Doc) -> Module -> Module
updateMod Doc -> Doc
f)

instance ModuleElim CppHdrCode where
  module' :: CppHdrCode Module -> Doc
module' = Module -> Doc
modDoc (Module -> Doc)
-> (CppHdrCode Module -> Module) -> CppHdrCode Module -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Module -> Module
forall a. CppHdrCode a -> a
unCPPHC

instance BlockCommentSym CppHdrCode where
  blockComment :: [ClassName] -> CppHdrCode Doc
blockComment [ClassName]
lns = Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppHdrCode Doc) -> Doc -> CppHdrCode Doc
forall a b. (a -> b) -> a -> b
$ [ClassName] -> Doc -> Doc -> Doc
R.blockCmt [ClassName]
lns Doc
blockCmtStart Doc
blockCmtEnd
  docComment :: forall a. State a [ClassName] -> State a (CppHdrCode Doc)
docComment = ([ClassName] -> CppHdrCode Doc)
-> State a [ClassName] -> State a (CppHdrCode Doc)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue (\[ClassName]
lns -> Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppHdrCode Doc) -> Doc -> CppHdrCode Doc
forall a b. (a -> b) -> a -> b
$ [ClassName] -> Doc -> Doc -> Doc
R.docCmt [ClassName]
lns Doc
docCmtStart
    Doc
blockCmtEnd)

instance BlockCommentElim CppHdrCode where
  blockComment' :: CppHdrCode Doc -> Doc
blockComment' = CppHdrCode Doc -> Doc
forall a. CppHdrCode a -> a
unCPPHC

-- helpers
isDtor :: Label -> Bool
isDtor :: ClassName -> Bool
isDtor (Char
'~':ClassName
_) = Bool
True
isDtor ClassName
_ = Bool
False

getParam
  :: (ParameterSym r, TypeElim r, VariableElim r)
  => SVariable r -> MS (r ParamData)
getParam :: forall (r :: * -> *).
(ParameterSym r, TypeElim r, VariableElim r) =>
SVariable r -> MS (r ParamData)
getParam SVariable r
v = LensLike'
  (Zoomed (StateT ValueState Identity) (r Variable))
  MethodState
  ValueState
-> SVariable r -> StateT MethodState Identity (r Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (r Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (r Variable) ValueState)
-> MethodState -> Focusing Identity (r Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable r
v StateT MethodState Identity (r Variable)
-> (r Variable -> StateT MethodState Identity (r ParamData))
-> StateT MethodState Identity (r ParamData)
forall a b.
StateT MethodState Identity a
-> (a -> StateT MethodState Identity b)
-> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\r Variable
v' -> CodeType
-> SVariable r -> StateT MethodState Identity (r ParamData)
forall {r :: * -> *}.
ParameterSym r =>
CodeType -> SVariable r -> MS (r ParamData)
getParamFunc ((r TypeData -> CodeType
forall (r :: * -> *). TypeElim r => r TypeData -> CodeType
getCodeType (r TypeData -> CodeType)
-> (r Variable -> r TypeData) -> r Variable -> CodeType
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
  r Variable -> r TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType) r Variable
v') SVariable r
v)
  where getParamFunc :: CodeType -> SVariable r -> MS (r ParamData)
getParamFunc (List CodeType
_) = SVariable r -> MS (r ParamData)
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
pointerParam
        getParamFunc (Object ClassName
_) = SVariable r -> MS (r ParamData)
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
pointerParam
        getParamFunc CodeType
_ = SVariable r -> MS (r ParamData)
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
param

data MethodData = MthD {MethodData -> VisibilityTag
getMthdScp :: VisibilityTag, MethodData -> Doc
mthdDoc :: Doc}

mthd :: VisibilityTag -> Doc -> MethodData
mthd :: VisibilityTag -> Doc -> MethodData
mthd = VisibilityTag -> Doc -> MethodData
MthD

addAlgorithmImport :: MS a -> MS a
addAlgorithmImport :: forall a. MS a -> MS a
addAlgorithmImport MS a
v = do
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> MethodState -> MethodState
addLangImport ClassName
algorithm)
  MS a
v

addAlgorithmImportVS :: VS a -> VS a
addAlgorithmImportVS :: forall a. VS a -> VS a
addAlgorithmImportVS VS a
v = do
  (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addLangImportVS ClassName
algorithm)
  VS a
v

addFStreamImport :: a -> VS a
addFStreamImport :: forall a. a -> StateT ValueState Identity a
addFStreamImport = (ValueState -> ValueState) -> a -> State ValueState a
forall s a. (s -> s) -> a -> State s a
modifyReturn (ClassName -> ValueState -> ValueState
addLangImportVS ClassName
fstream)

addIOStreamImport :: VS a -> VS a
addIOStreamImport :: forall a. VS a -> VS a
addIOStreamImport VS a
v = do
  (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addLangImportVS ClassName
iostream)
  VS a
v

addMathHImport :: VS a -> VS a
addMathHImport :: forall a. VS a -> VS a
addMathHImport VS a
v = do
  (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addLangImportVS ClassName
mathh)
  VS a
v

addLimitsImport :: MS a -> MS a
addLimitsImport :: forall a. MS a -> MS a
addLimitsImport MS a
v = do
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> MethodState -> MethodState
addLangImport ClassName
limits)
  MS a
v

addCAssertImport :: MS a -> MS a
addCAssertImport :: forall a. MS a -> MS a
addCAssertImport MS a
v = do
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> MethodState -> MethodState
addLangImport ClassName
cassert)
  MS a
v

iterator :: VS (CppSrcCode TypeData) -> VS (CppSrcCode TypeData)
iterator :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
iterator State ValueState (CppSrcCode TypeData)
t = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ClassName -> ValueState -> ValueState
addLangImportVS ClassName
cppIterator)
    State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
cppIterType (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall a b. (a -> b) -> a -> b
$ State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
listType State ValueState (CppSrcCode TypeData)
t

iterBegin :: SValue CppSrcCode -> SValue CppSrcCode
iterBegin :: SrcState ValueState Value -> SrcState ValueState Value
iterBegin SrcState ValueState Value
v = SrcState ValueState Value
v SrcState ValueState Value
-> SrcState ValueState FuncData -> SrcState ValueState Value
forall (r :: * -> *).
OOFunctionSym r =>
SValue r -> VS (r FuncData) -> SValue r
$. State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
cppIterBeginFunc (State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
innerType (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall a b. (a -> b) -> a -> b
$ (CppSrcCode Value -> CppSrcCode TypeData)
-> SrcState ValueState Value
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode Value -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r Value -> r TypeData
valueType SrcState ValueState Value
v)

iterEnd :: SValue CppSrcCode -> SValue CppSrcCode
iterEnd :: SrcState ValueState Value -> SrcState ValueState Value
iterEnd SrcState ValueState Value
v = SrcState ValueState Value
v SrcState ValueState Value
-> SrcState ValueState FuncData -> SrcState ValueState Value
forall (r :: * -> *).
OOFunctionSym r =>
SValue r -> VS (r FuncData) -> SValue r
$. State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
cppIterEndFunc (State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
innerType (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall a b. (a -> b) -> a -> b
$ (CppSrcCode Value -> CppSrcCode TypeData)
-> SrcState ValueState Value
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode Value -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r Value -> r TypeData
valueType SrcState ValueState Value
v)

arrayDecBase :: SVariable CppSrcCode -> CppSrcCode ScopeData -> MS Doc
arrayDecBase :: SrcState ValueState Variable -> CppSrcCode ScopeData -> MS Doc
arrayDecBase SrcState ValueState Variable
vr CppSrcCode ScopeData
scp = do
  CppSrcCode Variable
vr' <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
vr
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify ((MethodState -> MethodState) -> StateT MethodState Identity ())
-> (MethodState -> MethodState) -> StateT MethodState Identity ()
forall a b. (a -> b) -> a -> b
$ ClassName -> MethodState -> MethodState
useVarName (ClassName -> MethodState -> MethodState)
-> ClassName -> MethodState -> MethodState
forall a b. (a -> b) -> a -> b
$ CppSrcCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName CppSrcCode Variable
vr'
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify ((MethodState -> MethodState) -> StateT MethodState Identity ())
-> (MethodState -> MethodState) -> StateT MethodState Identity ()
forall a b. (a -> b) -> a -> b
$ ClassName -> ScopeData -> MethodState -> MethodState
setVarScope (CppSrcCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName CppSrcCode Variable
vr') (CppSrcCode ScopeData -> ScopeData
forall (r :: * -> *). ScopeElim r => r ScopeData -> ScopeData
scopeData CppSrcCode ScopeData
scp)
  Doc -> MS Doc
forall a. a -> StateT MethodState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> MS Doc) -> Doc -> MS Doc
forall a b. (a -> b) -> a -> b
$ CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType (CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType CppSrcCode Variable
vr') Doc -> Doc -> Doc
<+> CppSrcCode Variable -> Doc
forall (r :: * -> *). InternalVarElim r => r Variable -> Doc
RC.variable CppSrcCode Variable
vr'

cppReferenceType :: (Monad r, TypeElim r, UnRepr r TypeData) =>
  VS (r TypeData) -> VS (r TypeData)
cppReferenceType :: forall (r :: * -> *).
(Monad r, TypeElim r, UnRepr r TypeData) =>
VS (r TypeData) -> VS (r TypeData)
cppReferenceType VS (r TypeData)
t = do
    r TypeData
t' <- VS (r TypeData)
t
    CodeType -> ClassName -> Doc -> VS (r TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> ClassName -> Doc -> VS (r TypeData)
typeFromData (CodeType -> CodeType
Reference (r TypeData -> CodeType
forall (r :: * -> *). TypeElim r => r TypeData -> CodeType
getCodeType r TypeData
t')) (r TypeData -> ClassName
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> ClassName
getTypeString r TypeData
t' ClassName -> ClassName -> ClassName
forall a. [a] -> [a] -> [a]
++ ClassName
cppDeref') (r TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType r TypeData
t' Doc -> Doc -> Doc
<> Doc
cppDeref)

-- convenience
cppName, cppVersion :: String
cppName :: ClassName
cppName = ClassName
"C++"
cppVersion :: ClassName
cppVersion = ClassName
"gcc 10.1"

guard, inc, ifndef, define, defineSuffix, endif, using, namespace, cppPtr,
  cppDeref, streamL, streamR, cppLambdaDec, catchAll, cppPi,
  ptrAccess' :: Doc
guard :: Doc
guard = ClassName -> Doc
text ClassName
"#"
inc :: Doc
inc = Doc
guard Doc -> Doc -> Doc
<> ClassName -> Doc
text ClassName
"include"
ifndef :: Doc
ifndef = Doc
guard Doc -> Doc -> Doc
<> ClassName -> Doc
text ClassName
"ifndef"
define :: Doc
define = Doc
guard Doc -> Doc -> Doc
<> ClassName -> Doc
text ClassName
"define"
defineSuffix :: Doc
defineSuffix = ClassName -> Doc
text ClassName
"_h"
endif :: Doc
endif = Doc
guard Doc -> Doc -> Doc
<> ClassName -> Doc
text ClassName
"endif"
using :: Doc
using = ClassName -> Doc
text ClassName
"using"
namespace :: Doc
namespace = ClassName -> Doc
text ClassName
"namespace"
cppPtr :: Doc
cppPtr = ClassName -> Doc
text ClassName
"&"
cppDeref :: Doc
cppDeref = ClassName -> Doc
text ClassName
cppDeref'
streamL :: Doc
streamL = ClassName -> Doc
text ClassName
"<<"
streamR :: Doc
streamR = ClassName -> Doc
text ClassName
">>"
cppLambdaDec :: Doc
cppLambdaDec = ClassName -> Doc
text ClassName
"[]"
catchAll :: Doc
catchAll = ClassName -> Doc
text ClassName
"..."
cppPi :: Doc
cppPi = ClassName -> Doc
text ClassName
"M_PI"
ptrAccess' :: Doc
ptrAccess' = ClassName -> Doc
text ClassName
ptrAccess

nmSpc, ptrAccess, cppFor, std, algorithm, cppString, vector, sstream, stringstream,
  fstream, iostream, limits, mathh, cassert, cppBool, cppInfile, cppOutfile,
  cppIterator, cppOpen, stod, stof, cppIgnore, numLimits, streamsize, max,
  endl, cin, cout, cppIndex, cppListAccess, cppListAdd, cppListRemove, cppListAppend,
  cppIterBegin, cppIterEnd, cppR, cppW, cppA, cppGetLine, cppClose, cppClear,
  cppStr, mathDefines, cppSet, cppIn, cppConst, cppDeref' :: String
nmSpc :: ClassName
nmSpc = ClassName
"::"
ptrAccess :: ClassName
ptrAccess = ClassName
"->"
cppFor :: ClassName
cppFor = ClassName
"for"
std :: ClassName
std = ClassName
"std"
algorithm :: ClassName
algorithm = ClassName
"algorithm"
cppString :: ClassName
cppString = ClassName
"string"
vector :: ClassName
vector = ClassName
"vector"
fstream :: ClassName
fstream = ClassName
"fstream"
iostream :: ClassName
iostream = ClassName
"iostream"
sstream :: ClassName
sstream = ClassName
"sstream"
stringstream :: ClassName
stringstream = ClassName -> ClassName
stdAccess ClassName
"stringstream"
limits :: ClassName
limits = ClassName
"limits"
mathh :: ClassName
mathh = ClassName
"math.h"
cassert :: ClassName
cassert = ClassName
"cassert"
cppBool :: ClassName
cppBool = ClassName
"bool"
cppInfile :: ClassName
cppInfile = ClassName
"ifstream"
cppOutfile :: ClassName
cppOutfile = ClassName
"ofstream"
cppIterator :: ClassName
cppIterator = ClassName
"iterator"
cppOpen :: ClassName
cppOpen = ClassName
"open"
stod :: ClassName
stod = ClassName -> ClassName
stdAccess ClassName
"stod"
stof :: ClassName
stof = ClassName -> ClassName
stdAccess ClassName
"stof"
cppIgnore :: ClassName
cppIgnore = ClassName
"ignore"
numLimits :: ClassName
numLimits = ClassName -> ClassName
stdAccess ClassName
"numeric_limits"
streamsize :: ClassName
streamsize = ClassName -> ClassName
stdAccess ClassName
"streamsize"
max :: ClassName
max = ClassName
"max"
endl :: ClassName
endl = ClassName -> ClassName
stdAccess ClassName
"endl"
cin :: ClassName
cin = ClassName -> ClassName
stdAccess ClassName
"cin"
cout :: ClassName
cout = ClassName -> ClassName
stdAccess ClassName
"cout"
cppIndex :: ClassName
cppIndex= ClassName
"find"
cppListAccess :: ClassName
cppListAccess = ClassName
"at"
cppListAdd :: ClassName
cppListAdd = ClassName
"insert"
cppListRemove :: ClassName
cppListRemove = ClassName
"erase"
cppListAppend :: ClassName
cppListAppend = ClassName
"push_back"
cppIterBegin :: ClassName
cppIterBegin = ClassName
"begin"
cppIterEnd :: ClassName
cppIterEnd = ClassName
"end"
cppR :: ClassName
cppR = ClassName -> ClassName
stdAccess (ClassName
fstream ClassName -> ClassName -> ClassName
`nmSpcAccess` ClassName
"in")
cppW :: ClassName
cppW = ClassName -> ClassName
stdAccess (ClassName
fstream ClassName -> ClassName -> ClassName
`nmSpcAccess` ClassName
"out")
cppA :: ClassName
cppA = ClassName -> ClassName
stdAccess (ClassName
fstream ClassName -> ClassName -> ClassName
`nmSpcAccess` ClassName
"app")
cppGetLine :: ClassName
cppGetLine = ClassName -> ClassName
stdAccess ClassName
"getline"
cppClose :: ClassName
cppClose = ClassName
"close"
cppClear :: ClassName
cppClear = ClassName
"clear"
cppStr :: ClassName
cppStr = ClassName
"str"
mathDefines :: ClassName
mathDefines = ClassName
"_USE_MATH_DEFINES"
cppSet :: ClassName
cppSet = ClassName
"set"
cppIn :: ClassName
cppIn = ClassName
":"
cppConst :: ClassName
cppConst = ClassName
"const"
cppDeref' :: ClassName
cppDeref' = ClassName
"*"

nmSpcAccess :: String -> String -> String
nmSpcAccess :: ClassName -> ClassName -> ClassName
nmSpcAccess ClassName
ns ClassName
e = ClassName
ns ClassName -> ClassName -> ClassName
forall a. [a] -> [a] -> [a]
++ ClassName
nmSpc ClassName -> ClassName -> ClassName
forall a. [a] -> [a] -> [a]
++ ClassName
e

nmSpcAccess' :: Doc -> Doc -> Doc
nmSpcAccess' :: Doc -> Doc -> Doc
nmSpcAccess' Doc
ns Doc
e = Doc
ns Doc -> Doc -> Doc
<> ClassName -> Doc
text ClassName
nmSpc Doc -> Doc -> Doc
<> Doc
e

stdAccess :: String -> String
stdAccess :: ClassName -> ClassName
stdAccess = ClassName -> ClassName -> ClassName
nmSpcAccess ClassName
std

stdAccess' :: Doc -> Doc
stdAccess' :: Doc -> Doc
stdAccess' = Doc -> Doc -> Doc
nmSpcAccess' (ClassName -> Doc
text ClassName
std)

mainDesc, argcDesc, argvDesc, mainReturnDesc :: String
mainDesc :: ClassName
mainDesc = ClassName
"Controls the flow of the program"
argcDesc :: ClassName
argcDesc = ClassName
"Number of command-line arguments"
argvDesc :: ClassName
argvDesc = ClassName
"List of command-line arguments"
mainReturnDesc :: ClassName
mainReturnDesc = ClassName
"exit code"

cppSqrtOp :: (Monad r) => VSOp r
cppSqrtOp :: forall (r :: * -> *). Monad r => VSOp r
cppSqrtOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.sqrt

cppAbsOp :: (Monad r) => VSOp r
cppAbsOp :: forall (r :: * -> *). Monad r => VSOp r
cppAbsOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.fabs

cppLogOp :: (Monad r) => VSOp r
cppLogOp :: forall (r :: * -> *). Monad r => VSOp r
cppLogOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.log10

cppLnOp :: (Monad r) => VSOp r
cppLnOp :: forall (r :: * -> *). Monad r => VSOp r
cppLnOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.log

cppExpOp :: (Monad r) => VSOp r
cppExpOp :: forall (r :: * -> *). Monad r => VSOp r
cppExpOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.exp

cppSinOp :: (Monad r) => VSOp r
cppSinOp :: forall (r :: * -> *). Monad r => VSOp r
cppSinOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.sin

cppCosOp :: (Monad r) => VSOp r
cppCosOp :: forall (r :: * -> *). Monad r => VSOp r
cppCosOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.cos

cppTanOp :: (Monad r) => VSOp r
cppTanOp :: forall (r :: * -> *). Monad r => VSOp r
cppTanOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.tan

cppAsinOp :: (Monad r) => VSOp r
cppAsinOp :: forall (r :: * -> *). Monad r => VSOp r
cppAsinOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.asin

cppAcosOp :: (Monad r) => VSOp r
cppAcosOp :: forall (r :: * -> *). Monad r => VSOp r
cppAcosOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.acos

cppAtanOp :: (Monad r) => VSOp r
cppAtanOp :: forall (r :: * -> *). Monad r => VSOp r
cppAtanOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.atan

cppFloorOp :: (Monad r) => VSOp r
cppFloorOp :: forall (r :: * -> *). Monad r => VSOp r
cppFloorOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.floor

cppCeilOp :: (Monad r) => VSOp r
cppCeilOp :: forall (r :: * -> *). Monad r => VSOp r
cppCeilOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath ClassName
R.ceil

cppUnaryMath :: (Monad r) => String -> VSOp r
cppUnaryMath :: forall (r :: * -> *). Monad r => ClassName -> VSOp r
cppUnaryMath = VS (r OpData) -> VS (r OpData)
forall a. VS a -> VS a
addMathHImport (VS (r OpData) -> VS (r OpData))
-> (ClassName -> VS (r OpData)) -> ClassName -> VS (r OpData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> VS (r OpData)
forall (r :: * -> *). Monad r => ClassName -> VSOp r
unOpPrec

cppPowerOp :: (Monad r) => VSOp r
cppPowerOp :: forall (r :: * -> *). Monad r => VSOp r
cppPowerOp = ClassName -> VSOp r
forall (r :: * -> *). Monad r => ClassName -> VSOp r
powerPrec ClassName
R.pow

getLineFunc :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
getLineFunc :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
getLineFunc SrcState ValueState Value
f SrcState ValueState Value
v = ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp ClassName
cppGetLine State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
string [SrcState ValueState Value
f, SrcState ValueState Value
v]

getLine3ArgFunc :: SValue CppSrcCode -> SValue CppSrcCode -> Char ->
  SValue CppSrcCode
getLine3ArgFunc :: SrcState ValueState Value
-> SrcState ValueState Value -> Char -> SrcState ValueState Value
getLine3ArgFunc SrcState ValueState Value
s SrcState ValueState Value
v Char
d = ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp ClassName
cppGetLine State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
string [SrcState ValueState Value
s, SrcState ValueState Value
v, Char -> SrcState ValueState Value
forall (r :: * -> *). Literal r => Char -> SValue r
litChar Char
d]

clearFunc :: VS (CppSrcCode FuncData)
clearFunc :: SrcState ValueState FuncData
clearFunc = ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState FuncData
forall (r :: * -> *).
OOFunctionSym r =>
ClassName -> VS (r TypeData) -> [SValue r] -> VS (r FuncData)
func ClassName
cppClear State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void []

strFunc :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
strFunc :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
strFunc SrcState ValueState Value
v SrcState ValueState Value
s = State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> ClassName
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *).
InternalValueExp r =>
VS (r TypeData) -> SValue r -> ClassName -> [SValue r] -> SValue r
objMethodCall State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
string SrcState ValueState Value
v ClassName
cppStr [SrcState ValueState Value
s]

cppIndexFunc :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
cppIndexFunc :: SrcState ValueState Value
-> SrcState ValueState Value -> SrcState ValueState Value
cppIndexFunc SrcState ValueState Value
l SrcState ValueState Value
v = ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp ClassName
cppIndex State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
int [SrcState ValueState Value -> SrcState ValueState Value
iterBegin SrcState ValueState Value
l, SrcState ValueState Value -> SrcState ValueState Value
iterEnd SrcState ValueState Value
l, SrcState ValueState Value
v]

cppIterBeginFunc :: VS (CppSrcCode TypeData) -> VS (CppSrcCode FuncData)
cppIterBeginFunc :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
cppIterBeginFunc State ValueState (CppSrcCode TypeData)
t = ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState FuncData
forall (r :: * -> *).
OOFunctionSym r =>
ClassName -> VS (r TypeData) -> [SValue r] -> VS (r FuncData)
func ClassName
cppIterBegin (State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
iterator State ValueState (CppSrcCode TypeData)
t) []

cppIterEndFunc :: VS (CppSrcCode TypeData) -> VS (CppSrcCode FuncData)
cppIterEndFunc :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
cppIterEndFunc State ValueState (CppSrcCode TypeData)
t = ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState FuncData
forall (r :: * -> *).
OOFunctionSym r =>
ClassName -> VS (r TypeData) -> [SValue r] -> VS (r FuncData)
func ClassName
cppIterEnd (State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
iterator State ValueState (CppSrcCode TypeData)
t) []

cppListDecDef
  :: (DeclStatement r smt, RenderStatement r smt, StatementElim r smt)
  => ([r Value] -> Doc)
  -> SVariable r
  -> r ScopeData
  -> [SValue r]
  -> MS (r smt)
cppListDecDef :: forall (r :: * -> *) smt.
(DeclStatement r smt, RenderStatement r smt,
 StatementElim r smt) =>
([r Value] -> Doc)
-> SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
cppListDecDef [r Value] -> Doc
f SVariable r
v r ScopeData
scp [SValue r]
vls = do
  r smt
vdc <- SVariable r -> r ScopeData -> MS (r smt)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
varDec SVariable r
v r ScopeData
scp
  [r Value]
vs <- LensLike'
  (Zoomed (StateT ValueState Identity) [r Value])
  MethodState
  ValueState
-> StateT ValueState Identity [r Value]
-> StateT MethodState Identity [r Value]
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) [r Value])
  MethodState
  ValueState
(ValueState -> Focusing Identity [r Value] ValueState)
-> MethodState -> Focusing Identity [r Value] MethodState
Lens' MethodState ValueState
lensMStoVS (StateT ValueState Identity [r Value]
 -> StateT MethodState Identity [r Value])
-> StateT ValueState Identity [r Value]
-> StateT MethodState Identity [r Value]
forall a b. (a -> b) -> a -> b
$ [SValue r] -> StateT ValueState Identity [r Value]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [SValue r]
vls
  Doc -> MS (r smt)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmt (r smt -> Doc
forall (r :: * -> *) smt. StatementElim r smt => r smt -> Doc
RC.statement r smt
vdc Doc -> Doc -> Doc
<> [r Value] -> Doc
f [r Value]
vs)

cpphtop :: ModData -> Doc
cpphtop :: Module -> Doc
cpphtop Module
m = [Doc] -> Doc
vcat [
  Doc
ifndef Doc -> Doc -> Doc
<+> ClassName -> Doc
text ClassName
n Doc -> Doc -> Doc
<> Doc
defineSuffix,
  Doc
define Doc -> Doc -> Doc
<+> ClassName -> Doc
text ClassName
n Doc -> Doc -> Doc
<> Doc
defineSuffix]
  where n :: ClassName
n = Module -> ClassName
name Module
m

usingNameSpace :: Label -> Maybe Label -> Doc
usingNameSpace :: ClassName -> Maybe ClassName -> Doc
usingNameSpace ClassName
n (Just ClassName
m) = Doc
using Doc -> Doc -> Doc
<+> ClassName -> Doc
text ClassName
n Doc -> Doc -> Doc
<> Doc
colon Doc -> Doc -> Doc
<> Doc
colon Doc -> Doc -> Doc
<>
  ClassName -> Doc
text ClassName
m Doc -> Doc -> Doc
<> Doc
endStatement
usingNameSpace ClassName
n Maybe ClassName
Nothing = Doc
using Doc -> Doc -> Doc
<+> Doc
namespace Doc -> Doc -> Doc
<+> ClassName -> Doc
text ClassName
n Doc -> Doc -> Doc
<> Doc
endStatement

cppInherit :: Maybe Label -> Doc -> Doc
cppInherit :: Maybe ClassName -> Doc -> Doc
cppInherit Maybe ClassName
n Doc
pub = Doc -> (ClassName -> Doc) -> Maybe ClassName -> Doc
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Doc
empty ((Doc
colon Doc -> Doc -> Doc
<+> Doc
pub <+>) (Doc -> Doc) -> (ClassName -> Doc) -> ClassName -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassName -> Doc
text) Maybe ClassName
n

cppBoolType :: (Monad r) => VS (r TypeData)
cppBoolType :: forall (r :: * -> *). Monad r => VS (r TypeData)
cppBoolType = CodeType -> ClassName -> Doc -> VS (r TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> ClassName -> Doc -> VS (r TypeData)
typeFromData CodeType
Boolean ClassName
cppBool (ClassName -> Doc
text ClassName
cppBool)

cppInfileType :: (Monad r) => VS (r TypeData)
cppInfileType :: forall (r :: * -> *). Monad r => VS (r TypeData)
cppInfileType = do
  r TypeData
t <- CodeType -> ClassName -> Doc -> VS (r TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> ClassName -> Doc -> VS (r TypeData)
typeFromData CodeType
InFile ClassName
cppInfile (ClassName -> Doc
text ClassName
cppInfile)
  r TypeData -> VS (r TypeData)
forall a. a -> StateT ValueState Identity a
addFStreamImport r TypeData
t

argvType :: (Monad r) => VS (r TypeData)
argvType :: forall (r :: * -> *). Monad r => VS (r TypeData)
argvType = CodeType -> ClassName -> Doc -> VS (r TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> ClassName -> Doc -> VS (r TypeData)
typeFromData (CodeType -> CodeType
Array CodeType
String) ClassName
"const char**" (ClassName -> Doc
text ClassName
"const char**")

cppOutfileType :: (Monad r) => VS (r TypeData)
cppOutfileType :: forall (r :: * -> *). Monad r => VS (r TypeData)
cppOutfileType = do
  r TypeData
t <- CodeType -> ClassName -> Doc -> VS (r TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> ClassName -> Doc -> VS (r TypeData)
typeFromData CodeType
OutFile ClassName
cppOutfile (ClassName -> Doc
text ClassName
cppOutfile)
  r TypeData -> VS (r TypeData)
forall a. a -> StateT ValueState Identity a
addFStreamImport r TypeData
t

cppIterType :: VS (CppSrcCode TypeData) -> VS (CppSrcCode TypeData)
cppIterType :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
cppIterType State ValueState (CppSrcCode TypeData)
t' = do
  CppSrcCode TypeData
t <- State ValueState (CppSrcCode TypeData)
t'
  CodeType
-> ClassName -> Doc -> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> ClassName -> Doc -> VS (r TypeData)
typeFromData (CppSrcCode TypeData -> CodeType
forall (r :: * -> *). TypeElim r => r TypeData -> CodeType
getCodeType CppSrcCode TypeData
t)
    (CppSrcCode TypeData -> ClassName
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> ClassName
getTypeString CppSrcCode TypeData
t ClassName -> ClassName -> ClassName
`nmSpcAccess` ClassName
cppIterator) (Doc -> Doc
stdAccess' (CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppSrcCode TypeData
t)
    Doc -> Doc -> Doc
`nmSpcAccess'` ClassName -> Doc
text ClassName
cppIterator)

cppClassVarAccess :: Doc -> Doc -> Doc
cppClassVarAccess :: Doc -> Doc -> Doc
cppClassVarAccess Doc
c Doc
v = Doc
c Doc -> Doc -> Doc
`nmSpcAccess'` Doc
v

cppFuncType :: (Monad r, TypeElim r) => [VS (r TypeData)] ->
  VS (r TypeData) -> VS (r TypeData)
cppFuncType :: forall (r :: * -> *).
(Monad r, TypeElim r) =>
[VS (r TypeData)] -> VS (r TypeData) -> VS (r TypeData)
cppFuncType [VS (r TypeData)]
ps' VS (r TypeData)
r' =  do
  [r TypeData]
ps <- [VS (r TypeData)] -> StateT ValueState Identity [r TypeData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [VS (r TypeData)]
ps'
  r TypeData
r <- VS (r TypeData)
r'
  CodeType -> ClassName -> Doc -> VS (r TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> ClassName -> Doc -> VS (r TypeData)
typeFromData ([CodeType] -> CodeType -> CodeType
Func ((r TypeData -> CodeType) -> [r TypeData] -> [CodeType]
forall a b. (a -> b) -> [a] -> [b]
map r TypeData -> CodeType
forall (r :: * -> *). TypeElim r => r TypeData -> CodeType
getCodeType [r TypeData]
ps) (r TypeData -> CodeType
forall (r :: * -> *). TypeElim r => r TypeData -> CodeType
getCodeType r TypeData
r)) ClassName
"auto" (ClassName -> Doc
text ClassName
"auto")

cppLambda :: [CppSrcCode BinderD] -> CppSrcCode Value -> Doc
cppLambda :: [CppSrcCode BinderD] -> CppSrcCode Value -> Doc
cppLambda [CppSrcCode BinderD]
ps CppSrcCode Value
ex = Doc
cppLambdaDec Doc -> Doc -> Doc
<+> Doc -> Doc
parens (Doc -> [Doc] -> Doc
hicat Doc
listSep' ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ (Doc -> Doc -> Doc) -> [Doc] -> [Doc] -> [Doc]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Doc -> Doc -> Doc
(<+>)
  ((CppSrcCode BinderD -> Doc) -> [CppSrcCode BinderD] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType (CppSrcCode TypeData -> Doc)
-> (CppSrcCode BinderD -> CppSrcCode TypeData)
-> CppSrcCode BinderD
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode BinderD -> CppSrcCode TypeData
forall (r :: * -> *). BinderElim r => r BinderD -> r TypeData
binderType) [CppSrcCode BinderD]
ps) ((CppSrcCode BinderD -> Doc) -> [CppSrcCode BinderD] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map CppSrcCode BinderD -> Doc
forall (r :: * -> *). InternalBinderElim r => r BinderD -> Doc
RC.binderElim [CppSrcCode BinderD]
ps)) Doc -> Doc -> Doc
<+>
  Doc
bodyStart Doc -> Doc -> Doc
<> Doc
returnLabel Doc -> Doc -> Doc
<+> CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
ex Doc -> Doc -> Doc
<> Doc
endStatement Doc -> Doc -> Doc
<> Doc
bodyEnd

stodFunc :: SValue CppSrcCode -> SValue CppSrcCode
stodFunc :: SrcState ValueState Value -> SrcState ValueState Value
stodFunc SrcState ValueState Value
v = ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp ClassName
stod State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
double [SrcState ValueState Value
v]

stofFunc :: SValue CppSrcCode -> SValue CppSrcCode
stofFunc :: SrcState ValueState Value -> SrcState ValueState Value
stofFunc SrcState ValueState Value
v = ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp ClassName
stof State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
float [SrcState ValueState Value
v]

ignoreFunc :: Char -> SValue CppSrcCode -> SValue CppSrcCode
ignoreFunc :: Char -> SrcState ValueState Value -> SrcState ValueState Value
ignoreFunc Char
sep SrcState ValueState Value
inFn = State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> ClassName
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *).
InternalValueExp r =>
VS (r TypeData) -> SValue r -> ClassName -> [SValue r] -> SValue r
objMethodCall State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void SrcState ValueState Value
inFn ClassName
cppIgnore [SrcState ValueState Value
maxFunc, Char -> SrcState ValueState Value
forall (r :: * -> *). Literal r => Char -> SValue r
litChar Char
sep]

maxFunc :: SValue CppSrcCode
maxFunc :: SrcState ValueState Value
maxFunc = ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp ((ClassName
numLimits ClassName -> ClassName -> ClassName
`containing` ClassName
streamsize) ClassName -> ClassName -> ClassName
`nmSpcAccess` ClassName
max) State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
int []

cppCast :: VS (CppSrcCode TypeData) -> SValue CppSrcCode -> SValue CppSrcCode
cppCast :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value -> SrcState ValueState Value
cppCast = StateT ValueState Identity (SrcState ValueState Value)
-> SrcState ValueState Value
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (StateT ValueState Identity (SrcState ValueState Value)
 -> SrcState ValueState Value)
-> (State ValueState (CppSrcCode TypeData)
    -> SrcState ValueState Value
    -> StateT ValueState Identity (SrcState ValueState Value))
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> SrcState ValueState Value
forall c d a b. (c -> d) -> (a -> b -> c) -> a -> b -> d
.: (CppSrcCode TypeData
 -> CppSrcCode Value -> SrcState ValueState Value)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> StateT ValueState Identity (SrcState ValueState Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues (\CppSrcCode TypeData
t CppSrcCode Value
v -> CodeType
-> CodeType
-> CppSrcCode TypeData
-> CppSrcCode Value
-> SrcState ValueState Value
cppCast' (CppSrcCode TypeData -> CodeType
forall (r :: * -> *). TypeElim r => r TypeData -> CodeType
getCodeType CppSrcCode TypeData
t) (CppSrcCode TypeData -> CodeType
forall (r :: * -> *). TypeElim r => r TypeData -> CodeType
getCodeType (CppSrcCode TypeData -> CodeType)
-> CppSrcCode TypeData -> CodeType
forall a b. (a -> b) -> a -> b
$
  CppSrcCode Value -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r Value -> r TypeData
valueType CppSrcCode Value
v) CppSrcCode TypeData
t CppSrcCode Value
v)
  where cppCast' :: CodeType
-> CodeType
-> CppSrcCode TypeData
-> CppSrcCode Value
-> SrcState ValueState Value
cppCast' CodeType
Double CodeType
String CppSrcCode TypeData
_ CppSrcCode Value
v = SrcState ValueState Value -> SrcState ValueState Value
stodFunc (CppSrcCode Value -> SrcState ValueState Value
forall a s. a -> State s a
toState CppSrcCode Value
v)
        cppCast' CodeType
Float CodeType
String CppSrcCode TypeData
_ CppSrcCode Value
v = SrcState ValueState Value -> SrcState ValueState Value
stofFunc (CppSrcCode Value -> SrcState ValueState Value
forall a s. a -> State s a
toState CppSrcCode Value
v)
        cppCast' CodeType
_ CodeType
_ CppSrcCode TypeData
t CppSrcCode Value
v = State ValueState (CppSrcCode TypeData)
-> Doc -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal (CppSrcCode TypeData -> State ValueState (CppSrcCode TypeData)
forall a s. a -> State s a
toState CppSrcCode TypeData
t) (Doc -> Doc -> Doc
R.castObj
          (Doc -> Doc
R.cast (CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppSrcCode TypeData
t)) (CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
v))

cppListDecDoc :: (ValueElim r) => r Value -> Doc
cppListDecDoc :: forall (r :: * -> *). ValueElim r => r Value -> Doc
cppListDecDoc r Value
n = Doc -> Doc
parens (r Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value r Value
n)

cppListDecDefDoc :: (ValueElim r) => [r Value] -> Doc
cppListDecDefDoc :: forall (r :: * -> *). ValueElim r => [r Value] -> Doc
cppListDecDefDoc [r Value]
vs = Doc -> Doc
braces ([r Value] -> Doc
forall (r :: * -> *). ValueElim r => [r Value] -> Doc
valueList [r Value]
vs)

cppFuncDecDef :: SVariable CppSrcCode -> CppSrcCode ScopeData ->
  [SVariable CppSrcCode] -> MS (CppSrcCode Body) -> MS (CppSrcCode (Doc, Terminator))
cppFuncDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
cppFuncDecDef SrcState ValueState Variable
v CppSrcCode ScopeData
scp [SrcState ValueState Variable]
ps SrcState MethodState Doc
bod = do
  CppSrcCode Variable
vr <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
v
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify ((MethodState -> MethodState) -> StateT MethodState Identity ())
-> (MethodState -> MethodState) -> StateT MethodState Identity ()
forall a b. (a -> b) -> a -> b
$ ClassName -> MethodState -> MethodState
useVarName (ClassName -> MethodState -> MethodState)
-> ClassName -> MethodState -> MethodState
forall a b. (a -> b) -> a -> b
$ CppSrcCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName CppSrcCode Variable
vr
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify ((MethodState -> MethodState) -> StateT MethodState Identity ())
-> (MethodState -> MethodState) -> StateT MethodState Identity ()
forall a b. (a -> b) -> a -> b
$ ClassName -> ScopeData -> MethodState -> MethodState
setVarScope (CppSrcCode Variable -> ClassName
forall (r :: * -> *). VariableElim r => r Variable -> ClassName
variableName CppSrcCode Variable
vr) (CppSrcCode ScopeData -> ScopeData
forall (r :: * -> *). ScopeElim r => r ScopeData -> ScopeData
scopeData CppSrcCode ScopeData
scp)
  [CppSrcCode Variable]
pms <- (SrcState ValueState Variable
 -> StateT MethodState Identity (CppSrcCode Variable))
-> [SrcState ValueState Variable]
-> StateT MethodState Identity [CppSrcCode Variable]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM (LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS) [SrcState ValueState Variable]
ps
  CppSrcCode Doc
b <- SrcState MethodState Doc
bod
  Doc -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmt (Doc -> SrcState MethodState (Doc, Terminator))
-> Doc -> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType (CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType CppSrcCode Variable
vr) Doc -> Doc -> Doc
<+> CppSrcCode Variable -> Doc
forall (r :: * -> *). InternalVarElim r => r Variable -> Doc
RC.variable CppSrcCode Variable
vr Doc -> Doc -> Doc
<+> Doc
equals Doc -> Doc -> Doc
<+>
    Doc
cppLambdaDec Doc -> Doc -> Doc
<+> Doc -> Doc
parens (Doc -> [Doc] -> Doc
hicat Doc
listSep' ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ (Doc -> Doc -> Doc) -> [Doc] -> [Doc] -> [Doc]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Doc -> Doc -> Doc
(<+>) ((CppSrcCode Variable -> Doc) -> [CppSrcCode Variable] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType (CppSrcCode TypeData -> Doc)
-> (CppSrcCode Variable -> CppSrcCode TypeData)
-> CppSrcCode Variable
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
    CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType) [CppSrcCode Variable]
pms) ((CppSrcCode Variable -> Doc) -> [CppSrcCode Variable] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map CppSrcCode Variable -> Doc
forall (r :: * -> *). InternalVarElim r => r Variable -> Doc
RC.variable [CppSrcCode Variable]
pms)) Doc -> Doc -> Doc
<+>  Doc
bodyStart Doc -> Doc -> Doc
$$
    Doc -> Doc
indent (CppSrcCode Doc -> Doc
forall (r :: * -> *). BodyElim r => r Doc -> Doc
RC.body CppSrcCode Doc
b) Doc -> Doc -> Doc
$$ Doc
bodyEnd

cppPrint
  :: (RenderStatement r smt, ValueElim r)
  => Bool -> SValue r -> SValue r -> MS (r smt)
cppPrint :: forall (r :: * -> *) smt.
(RenderStatement r smt, ValueElim r) =>
Bool -> SValue r -> SValue r -> MS (r smt)
cppPrint Bool
newLn SValue r
pf SValue r
vl = do
  Doc
e <- LensLike'
  (Zoomed (StateT ValueState Identity) Doc) MethodState ValueState
-> StateT ValueState Identity Doc -> MS Doc
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) Doc) MethodState ValueState
(ValueState -> Focusing Identity Doc ValueState)
-> MethodState -> Focusing Identity Doc MethodState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity Doc
end
  r Value
printFn <- LensLike'
  (Zoomed (StateT ValueState Identity) (r Value))
  MethodState
  ValueState
-> SValue r -> StateT MethodState Identity (r Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (r Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (r Value) ValueState)
-> MethodState -> Focusing Identity (r Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue r
pf
  r Value
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (r Value))
  MethodState
  ValueState
-> SValue r -> StateT MethodState Identity (r Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (r Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (r Value) ValueState)
-> MethodState -> Focusing Identity (r Value) MethodState
Lens' MethodState ValueState
lensMStoVS SValue r
vl
  Doc -> MS (r smt)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmt (Doc -> MS (r smt)) -> Doc -> MS (r smt)
forall a b. (a -> b) -> a -> b
$ r Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value r Value
printFn Doc -> Doc -> Doc
<+> Doc
streamL Doc -> Doc -> Doc
<+> r Value -> Doc -> Doc
forall {r :: * -> *}. ValueElim r => r Value -> Doc -> Doc
pars r Value
v (r Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value r Value
v) Doc -> Doc -> Doc
<+> Doc
e
  where pars :: r Value -> Doc -> Doc
pars r Value
v = if Bool -> (Int -> Bool) -> Maybe Int -> Bool
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Bool
False (Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
9) (r Value -> Maybe Int
forall (r :: * -> *). ValueElim r => r Value -> Maybe Int
valuePrec r Value
v) then Doc -> Doc
parens else Doc -> Doc
forall a. a -> a
id
        end :: StateT ValueState Identity Doc
end = if Bool
newLn then StateT ValueState Identity Doc -> StateT ValueState Identity Doc
forall a. VS a -> VS a
addIOStreamImport (Doc -> StateT ValueState Identity Doc
forall a. a -> StateT ValueState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Doc -> StateT ValueState Identity Doc)
-> Doc -> StateT ValueState Identity Doc
forall a b. (a -> b) -> a -> b
$ Doc
streamL Doc -> Doc -> Doc
<+> ClassName -> Doc
text ClassName
endl)
          else Doc -> StateT ValueState Identity Doc
forall a. a -> StateT ValueState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Doc
empty

cppThrowDoc :: (ValueElim r) => r Value -> Doc
cppThrowDoc :: forall (r :: * -> *). ValueElim r => r Value -> Doc
cppThrowDoc r Value
errMsg = Doc
throwLabel Doc -> Doc -> Doc
<> Doc -> Doc
parens (r Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value r Value
errMsg)

cppTryCatch :: (BodyElim r) => r Body -> r Body -> Doc
cppTryCatch :: forall (r :: * -> *). BodyElim r => r Doc -> r Doc -> Doc
cppTryCatch r Doc
tb r Doc
cb = [Doc] -> Doc
vcat [
  Doc
tryLabel Doc -> Doc -> Doc
<+> Doc
lbrace,
  Doc -> Doc
indent (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$ r Doc -> Doc
forall (r :: * -> *). BodyElim r => r Doc -> Doc
RC.body r Doc
tb,
  Doc
rbrace Doc -> Doc -> Doc
<+> Doc
catchLabel Doc -> Doc -> Doc
<+> Doc -> Doc
parens Doc
catchAll Doc -> Doc -> Doc
<+> Doc
lbrace,
  Doc -> Doc
indent (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$ r Doc -> Doc
forall (r :: * -> *). BodyElim r => r Doc -> Doc
RC.body r Doc
cb,
  Doc
rbrace]

cppAssert :: (ValueElim r) => r Value -> r Value -> Doc
cppAssert :: forall (r :: * -> *). ValueElim r => r Value -> r Value -> Doc
cppAssert r Value
condition r Value
errorMessage = [Doc] -> Doc
vcat [
  ClassName -> Doc
text ClassName
"assert(" Doc -> Doc -> Doc
<> r Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value r Value
condition Doc -> Doc -> Doc
<+> ClassName -> Doc
text ClassName
"&&" Doc -> Doc -> Doc
<+> r Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value r Value
errorMessage Doc -> Doc -> Doc
<> ClassName -> Doc
text ClassName
")" Doc -> Doc -> Doc
<> Doc
semi
  ]

cppDiscardInput :: Char -> SValue CppSrcCode -> MS (CppSrcCode (Doc, Terminator))
cppDiscardInput :: Char
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
cppDiscardInput Char
sep SrcState ValueState Value
inFn = SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
SValue r -> MS (r smt)
valStmt (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ Char -> SrcState ValueState Value -> SrcState ValueState Value
ignoreFunc Char
sep SrcState ValueState Value
inFn

cppInput :: SVariable CppSrcCode -> SValue CppSrcCode -> MS (CppSrcCode (Doc, Terminator))
cppInput :: SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
cppInput SrcState ValueState Variable
vr SrcState ValueState Value
i = SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a. MS a -> MS a
addAlgorithmImport (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a. MS a -> MS a
addLimitsImport (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ do
  CppSrcCode Variable
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
vr
  CppSrcCode Value
inFn <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
-> SrcState ValueState Value
-> StateT MethodState Identity (CppSrcCode Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Value) ValueState)
-> MethodState -> Focusing Identity (CppSrcCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Value
i
  [SrcState MethodState (Doc, Terminator)]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
[MS (r smt)] -> MS (r smt)
multi [Doc -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmt (CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
inFn Doc -> Doc -> Doc
<+> Doc
streamR Doc -> Doc -> Doc
<+> CppSrcCode Variable -> Doc
forall (r :: * -> *). InternalVarElim r => r Variable -> Doc
RC.variable CppSrcCode Variable
v),
    SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
SValue r -> MS (r smt)
valStmt (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ Char -> SrcState ValueState Value -> SrcState ValueState Value
ignoreFunc Char
'\n' SrcState ValueState Value
i]

cppOpenFile
  ::  Label
  -> SVariable CppSrcCode
  -> SValue CppSrcCode
  -> MS (CppSrcCode (Doc, Terminator))
cppOpenFile :: ClassName
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
cppOpenFile ClassName
mode SrcState ValueState Variable
f SrcState ValueState Value
n = SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
SValue r -> MS (r smt)
valStmt (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Value
-> ClassName
-> [SrcState ValueState Value]
-> SrcState ValueState Value
forall (r :: * -> *).
InternalValueExp r =>
VS (r TypeData) -> SValue r -> ClassName -> [SValue r] -> SValue r
objMethodCall State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void (SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SrcState ValueState Variable
f) ClassName
cppOpen [SrcState ValueState Value
n,
  State ValueState (CppSrcCode TypeData)
-> Doc -> SrcState ValueState Value
forall (r :: * -> *).
RenderValue r =>
VS (r TypeData) -> Doc -> SValue r
mkStateVal State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void (Doc -> SrcState ValueState Value)
-> Doc -> SrcState ValueState Value
forall a b. (a -> b) -> a -> b
$ ClassName -> Doc
text ClassName
mode]

cppPointerParamDoc
  :: (InternalVarElim r, UnRepr r TypeData, VariableElim r)
  => r Variable -> Doc
cppPointerParamDoc :: forall (r :: * -> *).
(InternalVarElim r, UnRepr r TypeData, VariableElim r) =>
r Variable -> Doc
cppPointerParamDoc r Variable
v = r TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType (r Variable -> r TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType r Variable
v) Doc -> Doc -> Doc
<+> Doc
cppPtr Doc -> Doc -> Doc
<> r Variable -> Doc
forall (r :: * -> *). InternalVarElim r => r Variable -> Doc
RC.variable r Variable
v

cppsMethod :: [Doc] -> Label -> Label -> CppSrcCode TypeData
  -> [CppSrcCode ParamData] -> CppSrcCode Body -> Doc
cppsMethod :: [Doc]
-> ClassName
-> ClassName
-> CppSrcCode TypeData
-> [CppSrcCode ParamData]
-> CppSrcCode Doc
-> Doc
cppsMethod [Doc]
is ClassName
n ClassName
c CppSrcCode TypeData
t [CppSrcCode ParamData]
ps CppSrcCode Doc
b = Doc -> Doc -> Doc
emptyIfEmpty (CppSrcCode Doc -> Doc
forall (r :: * -> *). BodyElim r => r Doc -> Doc
RC.body CppSrcCode Doc
b Doc -> Doc -> Doc
<> Doc
initList) (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$
  [Doc] -> Doc
vcat [Doc
ttype Doc -> Doc -> Doc
<+> ClassName -> Doc
text (ClassName
c ClassName -> ClassName -> ClassName
`nmSpcAccess` ClassName
n) Doc -> Doc -> Doc
<> Doc -> Doc
parens ([CppSrcCode ParamData] -> Doc
forall (r :: * -> *). ParamElim r => [r ParamData] -> Doc
parameterList
    [CppSrcCode ParamData]
ps) Doc -> Doc -> Doc
<+> Doc -> Doc -> Doc
emptyIfEmpty Doc
initList (Doc
colon Doc -> Doc -> Doc
<+> Doc
initList) Doc -> Doc -> Doc
<+> Doc
bodyStart,
  Doc -> Doc
indent (CppSrcCode Doc -> Doc
forall (r :: * -> *). BodyElim r => r Doc -> Doc
RC.body CppSrcCode Doc
b),
  Doc
bodyEnd]
  where ttype :: Doc
ttype | ClassName -> Bool
isDtor ClassName
n = Doc
empty
              | Bool
otherwise = CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppSrcCode TypeData
t
        initList :: Doc
initList = Doc -> [Doc] -> Doc
hicat Doc
listSep' [Doc]
is

cppConstructor :: [MS (CppSrcCode ParamData)] ->
  NamedArgs CppSrcCode -> MS (CppSrcCode Body) -> MS (CppSrcCode MethodData)
cppConstructor :: [SrcState MethodState ParamData]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
cppConstructor [SrcState MethodState ParamData]
ps [(SrcState ValueState Variable, SrcState ValueState Value)]
is SrcState MethodState Doc
b = StateT MethodState Identity ClassName
getClassName StateT MethodState Identity ClassName
-> (ClassName -> SrcState MethodState MethodData)
-> SrcState MethodState MethodData
forall a b.
StateT MethodState Identity a
-> (a -> StateT MethodState Identity b)
-> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\ClassName
n -> StateT MethodState Identity (SrcState MethodState MethodData)
-> SrcState MethodState MethodData
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (StateT MethodState Identity (SrcState MethodState MethodData)
 -> SrcState MethodState MethodData)
-> StateT MethodState Identity (SrcState MethodState MethodData)
-> SrcState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ (\CppSrcCode TypeData
tp [CppSrcCode ParamData]
pms [CppSrcCode Variable]
ivars [CppSrcCode Value]
ivals
  CppSrcCode Doc
bod -> if [(SrcState ValueState Variable, SrcState ValueState Value)] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(SrcState ValueState Variable, SrcState ValueState Value)]
is then ClassName
-> [SrcState MethodState ParamData]
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) vis smt md svr att.
(OORenderSym r vis smt md svr att, OOStatement r smt) =>
ClassName
-> [MS (r ParamData)] -> Initializers r -> MS (r Doc) -> MS (r md)
CP.constructor ClassName
n [SrcState MethodState ParamData]
ps [(SrcState ValueState Variable, SrcState ValueState Value)]
is SrcState MethodState Doc
b else (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (VisibilityTag -> MethodState -> MethodState
setVisibility VisibilityTag
Pub) StateT MethodState Identity ()
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall a b.
StateT MethodState Identity a
-> StateT MethodState Identity b -> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
  CppSrcCode MethodData -> SrcState MethodState MethodData
forall a s. a -> State s a
toState (MethodData -> CppSrcCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> CppSrcCode MethodData)
-> MethodData -> CppSrcCode MethodData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> MethodData
mthd VisibilityTag
Pub ([Doc]
-> ClassName
-> ClassName
-> CppSrcCode TypeData
-> [CppSrcCode ParamData]
-> CppSrcCode Doc
-> Doc
cppsMethod ((CppSrcCode Variable -> CppSrcCode Value -> Doc)
-> [CppSrcCode Variable] -> [CppSrcCode Value] -> [Doc]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\CppSrcCode Variable
ivar CppSrcCode Value
ival -> CppSrcCode Variable -> Doc
forall (r :: * -> *). InternalVarElim r => r Variable -> Doc
RC.variable
  CppSrcCode Variable
ivar Doc -> Doc -> Doc
<> Doc -> Doc
parens (CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
ival)) [CppSrcCode Variable]
ivars [CppSrcCode Value]
ivals) ClassName
n ClassName
n CppSrcCode TypeData
tp [CppSrcCode ParamData]
pms CppSrcCode Doc
bod))) (CppSrcCode TypeData
 -> [CppSrcCode ParamData]
 -> [CppSrcCode Variable]
 -> [CppSrcCode Value]
 -> CppSrcCode Doc
 -> SrcState MethodState MethodData)
-> SrcState MethodState TypeData
-> StateT
     MethodState
     Identity
     ([CppSrcCode ParamData]
      -> [CppSrcCode Variable]
      -> [CppSrcCode Value]
      -> CppSrcCode Doc
      -> SrcState MethodState MethodData)
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
<$> ClassName -> SrcState MethodState TypeData
forall (r :: * -> *).
OOMethodTypeSym r =>
ClassName -> MSMthdType r
construct
  ClassName
n StateT
  MethodState
  Identity
  ([CppSrcCode ParamData]
   -> [CppSrcCode Variable]
   -> [CppSrcCode Value]
   -> CppSrcCode Doc
   -> SrcState MethodState MethodData)
-> StateT MethodState Identity [CppSrcCode ParamData]
-> StateT
     MethodState
     Identity
     ([CppSrcCode Variable]
      -> [CppSrcCode Value]
      -> CppSrcCode Doc
      -> SrcState MethodState MethodData)
forall a b.
StateT MethodState Identity (a -> b)
-> StateT MethodState Identity a -> StateT MethodState Identity b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [SrcState MethodState ParamData]
-> StateT MethodState Identity [CppSrcCode ParamData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [SrcState MethodState ParamData]
ps StateT
  MethodState
  Identity
  ([CppSrcCode Variable]
   -> [CppSrcCode Value]
   -> CppSrcCode Doc
   -> SrcState MethodState MethodData)
-> StateT MethodState Identity [CppSrcCode Variable]
-> StateT
     MethodState
     Identity
     ([CppSrcCode Value]
      -> CppSrcCode Doc -> SrcState MethodState MethodData)
forall a b.
StateT MethodState Identity (a -> b)
-> StateT MethodState Identity a -> StateT MethodState Identity b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((SrcState ValueState Variable, SrcState ValueState Value)
 -> StateT MethodState Identity (CppSrcCode Variable))
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> StateT MethodState Identity [CppSrcCode Variable]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM (LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (SrcState ValueState Variable
 -> StateT MethodState Identity (CppSrcCode Variable))
-> ((SrcState ValueState Variable, SrcState ValueState Value)
    -> SrcState ValueState Variable)
-> (SrcState ValueState Variable, SrcState ValueState Value)
-> StateT MethodState Identity (CppSrcCode Variable)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SrcState ValueState Variable, SrcState ValueState Value)
-> SrcState ValueState Variable
forall a b. (a, b) -> a
fst) [(SrcState ValueState Variable, SrcState ValueState Value)]
is StateT
  MethodState
  Identity
  ([CppSrcCode Value]
   -> CppSrcCode Doc -> SrcState MethodState MethodData)
-> StateT MethodState Identity [CppSrcCode Value]
-> StateT
     MethodState
     Identity
     (CppSrcCode Doc -> SrcState MethodState MethodData)
forall a b.
StateT MethodState Identity (a -> b)
-> StateT MethodState Identity a -> StateT MethodState Identity b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((SrcState ValueState Variable, SrcState ValueState Value)
 -> StateT MethodState Identity (CppSrcCode Value))
-> [(SrcState ValueState Variable, SrcState ValueState Value)]
-> StateT MethodState Identity [CppSrcCode Value]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM (LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
-> SrcState ValueState Value
-> StateT MethodState Identity (CppSrcCode Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom
  LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Value) ValueState)
-> MethodState -> Focusing Identity (CppSrcCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (SrcState ValueState Value
 -> StateT MethodState Identity (CppSrcCode Value))
-> ((SrcState ValueState Variable, SrcState ValueState Value)
    -> SrcState ValueState Value)
-> (SrcState ValueState Variable, SrcState ValueState Value)
-> StateT MethodState Identity (CppSrcCode Value)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SrcState ValueState Variable, SrcState ValueState Value)
-> SrcState ValueState Value
forall a b. (a, b) -> b
snd) [(SrcState ValueState Variable, SrcState ValueState Value)]
is StateT
  MethodState
  Identity
  (CppSrcCode Doc -> SrcState MethodState MethodData)
-> SrcState MethodState Doc
-> StateT MethodState Identity (SrcState MethodState MethodData)
forall a b.
StateT MethodState Identity (a -> b)
-> StateT MethodState Identity a -> StateT MethodState Identity b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> SrcState MethodState Doc
b)

cppsFunction :: Label -> CppSrcCode TypeData ->
  [CppSrcCode ParamData] -> CppSrcCode Body -> Doc
cppsFunction :: ClassName
-> CppSrcCode TypeData
-> [CppSrcCode ParamData]
-> CppSrcCode Doc
-> Doc
cppsFunction ClassName
n CppSrcCode TypeData
t [CppSrcCode ParamData]
ps CppSrcCode Doc
b = [Doc] -> Doc
vcat [
  CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppSrcCode TypeData
t Doc -> Doc -> Doc
<+> ClassName -> Doc
text ClassName
n Doc -> Doc -> Doc
<> Doc -> Doc
parens ([CppSrcCode ParamData] -> Doc
forall (r :: * -> *). ParamElim r => [r ParamData] -> Doc
parameterList [CppSrcCode ParamData]
ps) Doc -> Doc -> Doc
<+> Doc
bodyStart,
  Doc -> Doc
indent (CppSrcCode Doc -> Doc
forall (r :: * -> *). BodyElim r => r Doc -> Doc
RC.body CppSrcCode Doc
b),
  Doc
bodyEnd]

cppsIntFunc :: (CppSrcCode TypeData -> [CppSrcCode ParamData] ->
  CppSrcCode Body -> Doc) -> CppSrcCode (Doc, VisibilityTag) ->
  MSMthdType CppSrcCode -> [MS (CppSrcCode ParamData)] ->
  MS (CppSrcCode Body) -> MS (CppSrcCode MethodData)
cppsIntFunc :: (CppSrcCode TypeData
 -> [CppSrcCode ParamData] -> CppSrcCode Doc -> Doc)
-> CppSrcCode (Doc, VisibilityTag)
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
cppsIntFunc CppSrcCode TypeData
-> [CppSrcCode ParamData] -> CppSrcCode Doc -> Doc
f CppSrcCode (Doc, VisibilityTag)
s SrcState MethodState TypeData
t [SrcState MethodState ParamData]
ps SrcState MethodState Doc
b = do
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (VisibilityTag -> MethodState -> MethodState
setVisibility ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd ((Doc, VisibilityTag) -> VisibilityTag)
-> (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a -> b) -> a -> b
$ CppSrcCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppSrcCode a -> a
unCPPSC CppSrcCode (Doc, VisibilityTag)
s))
  CppSrcCode TypeData
tp <- SrcState MethodState TypeData
t
  [CppSrcCode ParamData]
pms <- [SrcState MethodState ParamData]
-> StateT MethodState Identity [CppSrcCode ParamData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [SrcState MethodState ParamData]
ps
  MethodData -> CppSrcCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> CppSrcCode MethodData)
-> (CppSrcCode Doc -> MethodData)
-> CppSrcCode Doc
-> CppSrcCode MethodData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. VisibilityTag -> Doc -> MethodData
mthd ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd ((Doc, VisibilityTag) -> VisibilityTag)
-> (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a -> b) -> a -> b
$ CppSrcCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppSrcCode a -> a
unCPPSC CppSrcCode (Doc, VisibilityTag)
s) (Doc -> MethodData)
-> (CppSrcCode Doc -> Doc) -> CppSrcCode Doc -> MethodData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode TypeData
-> [CppSrcCode ParamData] -> CppSrcCode Doc -> Doc
f CppSrcCode TypeData
tp [CppSrcCode ParamData]
pms (CppSrcCode Doc -> CppSrcCode MethodData)
-> SrcState MethodState Doc -> SrcState MethodState MethodData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
<$> SrcState MethodState Doc
b

cpphIntFunc :: Label -> CppHdrCode (Doc, VisibilityTag) ->
  CppHdrCode att -> MSMthdType CppHdrCode ->
  [MS (CppHdrCode ParamData)] -> MS (CppHdrCode Body) -> MS (CppHdrCode MethodData)
cpphIntFunc :: forall att.
ClassName
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode att
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
cpphIntFunc ClassName
n CppHdrCode (Doc, VisibilityTag)
s CppHdrCode att
_ HdrState MethodState TypeData
t [HdrState MethodState ParamData]
ps HdrState MethodState Doc
_ = do
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (VisibilityTag -> MethodState -> MethodState
setVisibility ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd ((Doc, VisibilityTag) -> VisibilityTag)
-> (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode (Doc, VisibilityTag)
s))
    CppHdrCode TypeData
tp <- HdrState MethodState TypeData
t
    [CppHdrCode ParamData]
pms <- [HdrState MethodState ParamData]
-> StateT MethodState Identity [CppHdrCode ParamData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [HdrState MethodState ParamData]
ps
    CppHdrCode MethodData -> HdrState MethodState MethodData
forall a. a -> StateT MethodState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode MethodData -> HdrState MethodState MethodData)
-> CppHdrCode MethodData -> HdrState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ MethodData -> CppHdrCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> CppHdrCode MethodData)
-> MethodData -> CppHdrCode MethodData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> MethodData
mthd ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd ((Doc, VisibilityTag) -> VisibilityTag)
-> (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode (Doc, VisibilityTag)
s) (Doc -> MethodData) -> Doc -> MethodData
forall a b. (a -> b) -> a -> b
$ ClassName -> CppHdrCode TypeData -> [CppHdrCode ParamData] -> Doc
forall (r :: * -> *).
ParamElim r =>
ClassName -> CppHdrCode TypeData -> [r ParamData] -> Doc
cpphFunc ClassName
n CppHdrCode TypeData
tp [CppHdrCode ParamData]
pms

cpphFunc :: (ParamElim r) => Label -> CppHdrCode TypeData ->
  [r ParamData] -> Doc
cpphFunc :: forall (r :: * -> *).
ParamElim r =>
ClassName -> CppHdrCode TypeData -> [r ParamData] -> Doc
cpphFunc ClassName
n CppHdrCode TypeData
t [r ParamData]
ps = (if ClassName -> Bool
isDtor ClassName
n then Doc
empty else CppHdrCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppHdrCode TypeData
t) Doc -> Doc -> Doc
<+>
  ClassName -> Doc
text ClassName
n Doc -> Doc -> Doc
<> Doc -> Doc
parens ([r ParamData] -> Doc
forall (r :: * -> *). ParamElim r => [r ParamData] -> Doc
parameterList [r ParamData]
ps) Doc -> Doc -> Doc
<> Doc
endStatement

cpphMethod :: Label -> CppHdrCode TypeData ->
  CppHdrCode AttachmentData -> [CppHdrCode ParamData] -> Doc
cpphMethod :: ClassName
-> CppHdrCode TypeData
-> CppHdrCode AttachmentData
-> [CppHdrCode ParamData]
-> Doc
cpphMethod ClassName
n CppHdrCode TypeData
t CppHdrCode AttachmentData
a [CppHdrCode ParamData]
ps = let attchDoc :: Doc
attchDoc = CppHdrCode AttachmentData -> Doc
forall (r :: * -> *) att. PermElim r att => r att -> Doc
RC.perm CppHdrCode AttachmentData
a
  in Doc
attchDoc Doc -> Doc -> Doc
<+> (if ClassName -> Bool
isDtor ClassName
n then Doc
empty else CppHdrCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppHdrCode TypeData
t) Doc -> Doc -> Doc
<+> ClassName -> Doc
text ClassName
n
    Doc -> Doc -> Doc
<> Doc -> Doc
parens ([CppHdrCode ParamData] -> Doc
forall (r :: * -> *). ParamElim r => [r ParamData] -> Doc
parameterList [CppHdrCode ParamData]
ps) Doc -> Doc -> Doc
<> Doc
endStatement

cppCommentedFunc
  :: (BlockCommentElim r, Monad r)
  => FileType -> MS (r Doc) -> MS (r MethodData) -> MS (r MethodData)
cppCommentedFunc :: forall (r :: * -> *).
(BlockCommentElim r, Monad r) =>
FileType -> MS (r Doc) -> MS (r MethodData) -> MS (r MethodData)
cppCommentedFunc FileType
ft MS (r Doc)
cmt MS (r MethodData)
fn = do
  r MethodData
f <- MS (r MethodData)
fn
  Bool
mn <- MS Bool
getCurrMainFunc
  VisibilityTag
scp <- MS VisibilityTag
getVisibility
  r Doc
cmnt <- MS (r Doc)
cmt
  let cf :: MS (r MethodData)
cf = r MethodData -> MS (r MethodData)
forall a. a -> StateT MethodState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ((MethodData -> MethodData) -> r MethodData -> r MethodData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (VisibilityTag -> Doc -> MethodData
mthd VisibilityTag
scp (Doc -> MethodData)
-> (MethodData -> Doc) -> MethodData -> MethodData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> Doc -> Doc
R.commentedItem
        (r Doc -> Doc
forall (r :: * -> *). BlockCommentElim r => r Doc -> Doc
RC.blockComment' r Doc
cmnt) (Doc -> Doc) -> (MethodData -> Doc) -> MethodData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MethodData -> Doc
mthdDoc) r MethodData
f)
      ret :: FileType -> MS (r MethodData)
ret FileType
Source = if Bool
mn then MS (r MethodData)
cf else r MethodData -> MS (r MethodData)
forall a. a -> StateT MethodState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure r MethodData
f
      ret FileType
Header = if Bool
mn then r MethodData -> MS (r MethodData)
forall a. a -> StateT MethodState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure r MethodData
f else MS (r MethodData)
cf
      ret FileType
Combined = ClassName -> MS (r MethodData)
forall a. HasCallStack => ClassName -> a
error ClassName
"Combined passed to cppCommentedFunc"
  FileType -> MS (r MethodData)
ret FileType
ft

cppsStateVarDef :: Doc -> CppSrcCode (Doc, VisibilityTag) ->
  CppSrcCode AttachmentData -> SVariable CppSrcCode ->
  SValue CppSrcCode -> CSStateVar CppSrcCode StateVarData
cppsStateVarDef :: Doc
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState ClassState StateVarData
cppsStateVarDef Doc
cns CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
p SrcState ValueState Variable
vr' SrcState ValueState Value
vl' = do
  CppSrcCode Variable
vr <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  ClassState
  ValueState
-> SrcState ValueState Variable
-> StateT ClassState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  ClassState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> ClassState -> Focusing Identity (CppSrcCode Variable) ClassState
Lens' ClassState ValueState
lensCStoVS SrcState ValueState Variable
vr'
  CppSrcCode Value
vl <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  ClassState
  ValueState
-> SrcState ValueState Value
-> StateT ClassState Identity (CppSrcCode Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  ClassState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Value) ValueState)
-> ClassState -> Focusing Identity (CppSrcCode Value) ClassState
Lens' ClassState ValueState
lensCStoVS SrcState ValueState Value
vl'
  ClassName
n <- LensLike'
  (Zoomed (StateT MethodState Identity) ClassName)
  ClassState
  MethodState
-> StateT MethodState Identity ClassName
-> StateT ClassState Identity ClassName
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT MethodState Identity) ClassName)
  ClassState
  MethodState
(MethodState -> Focusing Identity ClassName MethodState)
-> ClassState -> Focusing Identity ClassName ClassState
Lens' ClassState MethodState
lensCStoMS StateT MethodState Identity ClassName
getClassName
  CppSrcCode StateVarData -> SrcState ClassState StateVarData
forall a. a -> StateT ClassState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode StateVarData -> SrcState ClassState StateVarData)
-> CppSrcCode StateVarData -> SrcState ClassState StateVarData
forall a b. (a -> b) -> a -> b
$ (VisibilityTag -> Doc -> StateVarData)
-> CppSrcCode VisibilityTag
-> CppSrcCode Doc
-> CppSrcCode StateVarData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues VisibilityTag -> Doc -> StateVarData
svd (((Doc, VisibilityTag) -> VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag) -> CppSrcCode VisibilityTag
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd CppSrcCode (Doc, VisibilityTag)
s)
    (Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode Doc) -> Doc -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ AttachmentTag -> Doc -> Doc -> Doc
forall a. AttachmentTag -> a -> a -> a
onAttachment (CppSrcCode AttachmentData -> AttachmentTag
forall (r :: * -> *) att. PermElim r att => r att -> AttachmentTag
binding CppSrcCode AttachmentData
p) (Doc
cns Doc -> Doc -> Doc
<+> CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType (CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType CppSrcCode Variable
vr) Doc -> Doc -> Doc
<+>
      ClassName -> Doc
text ClassName
n Doc -> Doc -> Doc
`nmSpcAccess'` CppSrcCode Variable -> Doc
forall (r :: * -> *). InternalVarElim r => r Variable -> Doc
RC.variable CppSrcCode Variable
vr Doc -> Doc -> Doc
<+> Doc
equals Doc -> Doc -> Doc
<+> CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
vl Doc -> Doc -> Doc
<>
      Doc
endStatement) Doc
empty)

cppForEach :: Doc -> Doc -> Doc -> Doc -> SVariable CppSrcCode -> SValue CppSrcCode
  -> MS (CppSrcCode Body) -> MS (CppSrcCode (Doc, Terminator))
cppForEach :: Doc
-> Doc
-> Doc
-> Doc
-> SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
cppForEach Doc
bStart Doc
bEnd Doc
forEachLabel Doc
inLbl SrcState ValueState Variable
e' SrcState ValueState Value
v' SrcState MethodState Doc
b' = do
  CppSrcCode Variable
e <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
e'
  CppSrcCode Value
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
-> SrcState ValueState Value
-> StateT MethodState Identity (CppSrcCode Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Value) ValueState)
-> MethodState -> Focusing Identity (CppSrcCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Value
v'
  CppSrcCode Doc
b <- SrcState MethodState Doc
b'
  Doc -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
Doc -> MS (r smt)
mkStmtNoEnd (Doc -> SrcState MethodState (Doc, Terminator))
-> Doc -> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ [Doc] -> Doc
vcat [
    Doc
forEachLabel Doc -> Doc -> Doc
<+> Doc -> Doc
parens ((ClassName -> Doc
text ClassName
cppConst Doc -> Doc -> Doc
<+> CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType (CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType CppSrcCode Variable
e) Doc -> Doc -> Doc
<+> ClassName -> Doc
text ClassName
"&") Doc -> Doc -> Doc
<> CppSrcCode Variable -> Doc
forall (r :: * -> *). InternalVarElim r => r Variable -> Doc
RC.variable CppSrcCode Variable
e Doc -> Doc -> Doc
<+>
      Doc
inLbl Doc -> Doc -> Doc
<+> CppSrcCode Value -> Doc
forall (r :: * -> *). ValueElim r => r Value -> Doc
RC.value CppSrcCode Value
v) Doc -> Doc -> Doc
<+> Doc
bStart,
    Doc -> Doc
indent (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$ CppSrcCode Doc -> Doc
forall (r :: * -> *). BodyElim r => r Doc -> Doc
RC.body CppSrcCode Doc
b,
    Doc
bEnd]

cppLitSet
  :: (RenderValue r, ValueElim r)
  => (VS (r TypeData) -> VS (r TypeData)) -> VS (r TypeData) -> [SValue r] -> SValue r
cppLitSet :: forall (r :: * -> *).
(RenderValue r, ValueElim r) =>
(VS (r TypeData) -> VS (r TypeData))
-> VS (r TypeData) -> [SValue r] -> SValue r
cppLitSet VS (r TypeData) -> VS (r TypeData)
f VS (r TypeData)
t' [SValue r]
es' = do
  [r Value]
es <- [SValue r] -> StateT ValueState Identity [r Value]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [SValue r]
es'
  r TypeData
lt <- VS (r TypeData) -> VS (r TypeData)
f VS (r TypeData)
t'
  r TypeData -> Doc -> SValue r
forall (r :: * -> *).
RenderValue r =>
r TypeData -> Doc -> SValue r
mkVal r TypeData
lt ( Doc -> Doc
braces ([r Value] -> Doc
forall (r :: * -> *). ValueElim r => [r Value] -> Doc
valueList [r Value]
es))

cpphStateVarDef
  :: Doc
  -> CppHdrCode AttachmentData
  -> SVariable CppHdrCode
  -> SValue CppHdrCode -> CS Doc
cpphStateVarDef :: Doc
-> CppHdrCode AttachmentData
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> CS Doc
cpphStateVarDef Doc
s CppHdrCode AttachmentData
p HdrState ValueState Variable
vr HdrState ValueState Value
vl = (CppHdrCode (Doc, Terminator) -> Doc)
-> StateT ClassState Identity (CppHdrCode (Doc, Terminator))
-> CS Doc
forall a b s. (a -> b) -> State s a -> State s b
onStateValue (Doc -> Doc -> Doc -> Doc
R.stateVar Doc
s (CppHdrCode AttachmentData -> Doc
forall (r :: * -> *) att. PermElim r att => r att -> Doc
RC.perm CppHdrCode AttachmentData
p) (Doc -> Doc)
-> (CppHdrCode (Doc, Terminator) -> Doc)
-> CppHdrCode (Doc, Terminator)
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
  CppHdrCode (Doc, Terminator) -> Doc
forall (r :: * -> *) smt. StatementElim r smt => r smt -> Doc
RC.statement) (LensLike'
  (Zoomed
     (StateT MethodState Identity) (CppHdrCode (Doc, Terminator)))
  ClassState
  MethodState
-> HdrState MethodState (Doc, Terminator)
-> StateT ClassState Identity (CppHdrCode (Doc, Terminator))
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (CppHdrCode (Doc, Terminator)))
  ClassState
  MethodState
(MethodState
 -> Focusing Identity (CppHdrCode (Doc, Terminator)) MethodState)
-> ClassState
-> Focusing Identity (CppHdrCode (Doc, Terminator)) ClassState
Lens' ClassState MethodState
lensCStoMS (HdrState MethodState (Doc, Terminator)
 -> StateT ClassState Identity (CppHdrCode (Doc, Terminator)))
-> HdrState MethodState (Doc, Terminator)
-> StateT ClassState Identity (CppHdrCode (Doc, Terminator))
forall a b. (a -> b) -> a -> b
$ HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
RenderStatement r smt =>
MS (r smt) -> MS (r smt)
stmt (HdrState MethodState (Doc, Terminator)
 -> HdrState MethodState (Doc, Terminator))
-> HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ AttachmentTag
-> HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
forall a. AttachmentTag -> a -> a -> a
onAttachment (CppHdrCode AttachmentData -> AttachmentTag
forall (r :: * -> *) att. PermElim r att => r att -> AttachmentTag
binding CppHdrCode AttachmentData
p)
  (HdrState ValueState Variable
-> CppHdrCode ScopeData -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
varDec HdrState ValueState Variable
vr CppHdrCode ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
local) (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
varDecDef HdrState ValueState Variable
vr CppHdrCode ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
local HdrState ValueState Value
vl))

cpphVarsFuncsList :: VisibilityTag -> [CppHdrCode StateVarData] ->
  [CppHdrCode MethodData] -> Doc
cpphVarsFuncsList :: VisibilityTag
-> [CppHdrCode StateVarData] -> [CppHdrCode MethodData] -> Doc
cpphVarsFuncsList VisibilityTag
st [CppHdrCode StateVarData]
vs [CppHdrCode MethodData]
fs =
  let visVs :: [Doc]
visVs = [CppHdrCode StateVarData -> Doc
forall (r :: * -> *) svr. StateVarElim r svr => r svr -> Doc
RC.stateVar CppHdrCode StateVarData
v | CppHdrCode StateVarData
v <- [CppHdrCode StateVarData]
vs, StateVarData -> VisibilityTag
getStVarScp (CppHdrCode StateVarData -> StateVarData
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode StateVarData
v) VisibilityTag -> VisibilityTag -> Bool
forall a. Eq a => a -> a -> Bool
== VisibilityTag
st]
      visFs :: [Doc]
visFs = [CppHdrCode MethodData -> Doc
forall (r :: * -> *) md. MethodElim r md => r md -> Doc
RC.method CppHdrCode MethodData
f | CppHdrCode MethodData
f <- [CppHdrCode MethodData]
fs, MethodData -> VisibilityTag
getMthdScp (CppHdrCode MethodData -> MethodData
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode MethodData
f) VisibilityTag -> VisibilityTag -> Bool
forall a. Eq a => a -> a -> Bool
== VisibilityTag
st]
  in [Doc] -> Doc
vcat ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ [Doc]
visVs [Doc] -> [Doc] -> [Doc]
forall a. [a] -> [a] -> [a]
++ (if [Doc] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Doc]
visVs then Doc
empty else Doc
blank) Doc -> [Doc] -> [Doc]
forall a. a -> [a] -> [a]
: [Doc]
visFs

cppsClass :: [CppSrcCode StateVarData] ->
  [CppSrcCode MethodData] -> CppSrcCode Class
cppsClass :: [CppSrcCode StateVarData]
-> [CppSrcCode MethodData] -> CppSrcCode Doc
cppsClass [CppSrcCode StateVarData]
vs [CppSrcCode MethodData]
fs = Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode Doc) -> Doc -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ [Doc] -> Doc
vibcat ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ [Doc] -> Doc
vcat [Doc]
vars Doc -> [Doc] -> [Doc]
forall a. a -> [a] -> [a]
: [Doc]
funcs
  where vars :: [Doc]
vars = (CppSrcCode StateVarData -> Doc)
-> [CppSrcCode StateVarData] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map CppSrcCode StateVarData -> Doc
forall (r :: * -> *) svr. StateVarElim r svr => r svr -> Doc
RC.stateVar [CppSrcCode StateVarData]
vs
        funcs :: [Doc]
funcs = (CppSrcCode MethodData -> Doc) -> [CppSrcCode MethodData] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map CppSrcCode MethodData -> Doc
forall (r :: * -> *) md. MethodElim r md => r md -> Doc
RC.method [CppSrcCode MethodData]
fs

cpphClass :: Label -> CppHdrCode ParentSpec ->
  [CppHdrCode StateVarData] -> [CppHdrCode MethodData] ->
  CppHdrCode (Doc, VisibilityTag) -> CppHdrCode (Doc, VisibilityTag) ->
  CppHdrCode Class
cpphClass :: ClassName
-> CppHdrCode Doc
-> [CppHdrCode StateVarData]
-> [CppHdrCode MethodData]
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode Doc
cpphClass ClassName
n CppHdrCode Doc
ps [CppHdrCode StateVarData]
vars [CppHdrCode MethodData]
funcs CppHdrCode (Doc, VisibilityTag)
pub CppHdrCode (Doc, VisibilityTag)
priv = let
  pubs :: Doc
pubs  = VisibilityTag
-> [CppHdrCode StateVarData] -> [CppHdrCode MethodData] -> Doc
cpphVarsFuncsList VisibilityTag
Pub [CppHdrCode StateVarData]
vars [CppHdrCode MethodData]
funcs
  privs :: Doc
privs = VisibilityTag
-> [CppHdrCode StateVarData] -> [CppHdrCode MethodData] -> Doc
cpphVarsFuncsList VisibilityTag
Priv [CppHdrCode StateVarData]
vars [CppHdrCode MethodData]
funcs
  ifEmptyPubs :: Doc -> Doc
ifEmptyPubs  = Doc -> Doc -> Doc
emptyIfEmpty Doc
pubs
  ifEmptyPrivs :: Doc -> Doc
ifEmptyPrivs = Doc -> Doc -> Doc
emptyIfEmpty Doc
privs
  indLi :: [Doc]
indLi = [Doc -> Doc
ifEmptyPubs (CppHdrCode (Doc, VisibilityTag) -> Doc
forall (r :: * -> *) vis. VisibilityElim r vis => r vis -> Doc
RC.visibility CppHdrCode (Doc, VisibilityTag)
pub Doc -> Doc -> Doc
<> Doc
colon), Doc -> Doc
ifEmptyPubs (Doc -> Doc
indent Doc
pubs),
          Doc -> Doc
ifEmptyPubs (Doc -> Doc
ifEmptyPrivs Doc
blank),
          Doc -> Doc
ifEmptyPrivs (CppHdrCode (Doc, VisibilityTag) -> Doc
forall (r :: * -> *) vis. VisibilityElim r vis => r vis -> Doc
RC.visibility CppHdrCode (Doc, VisibilityTag)
priv Doc -> Doc -> Doc
<> Doc
colon), Doc -> Doc
ifEmptyPrivs (Doc -> Doc
indent Doc
privs)]
  in (Doc -> Doc) -> CppHdrCode Doc -> CppHdrCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (\Doc
p -> [Doc] -> Doc
vcat [
    Doc
classDec Doc -> Doc -> Doc
<+> ClassName -> Doc
text ClassName
n Doc -> Doc -> Doc
<+> Doc
p Doc -> Doc -> Doc
<+> Doc
bodyStart,
    [Doc] -> Doc
indentList [Doc]
indLi,
    Doc
bodyEnd Doc -> Doc -> Doc
<> Doc
endStatement]) CppHdrCode Doc
ps

cppInOutCall :: (Label -> VS (CppSrcCode TypeData) -> [SValue CppSrcCode] ->
  SValue CppSrcCode) -> Label -> [SValue CppSrcCode] -> [SVariable CppSrcCode]
  -> [SVariable CppSrcCode] -> MS (CppSrcCode (Doc, Terminator))
cppInOutCall :: (ClassName
 -> State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState Value]
 -> SrcState ValueState Value)
-> InOutCall CppSrcCode (Doc, Terminator)
cppInOutCall ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
f ClassName
n [SrcState ValueState Value]
ins [SrcState ValueState Variable
out] [] = SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
assign SrcState ValueState Variable
out (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
f ClassName
n ((CppSrcCode Variable -> CppSrcCode TypeData)
-> SrcState ValueState Variable
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType SrcState ValueState Variable
out)
  [SrcState ValueState Value]
ins
cppInOutCall ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
f ClassName
n [SrcState ValueState Value]
ins [] [SrcState ValueState Variable
out] = SrcState ValueState Variable
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
assign SrcState ValueState Variable
out (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
f ClassName
n ((CppSrcCode Variable -> CppSrcCode TypeData)
-> SrcState ValueState Variable
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType SrcState ValueState Variable
out)
  (SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SrcState ValueState Variable
out SrcState ValueState Value
-> [SrcState ValueState Value] -> [SrcState ValueState Value]
forall a. a -> [a] -> [a]
: [SrcState ValueState Value]
ins)
cppInOutCall ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
f ClassName
n [SrcState ValueState Value]
ins [SrcState ValueState Variable]
outs [SrcState ValueState Variable]
both = SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
StatementSym r smt =>
SValue r -> MS (r smt)
valStmt (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ ClassName
-> State ValueState (CppSrcCode TypeData)
-> [SrcState ValueState Value]
-> SrcState ValueState Value
f ClassName
n State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void ((SrcState ValueState Variable -> SrcState ValueState Value)
-> [SrcState ValueState Variable] -> [SrcState ValueState Value]
forall a b. (a -> b) -> [a] -> [b]
map SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf [SrcState ValueState Variable]
both [SrcState ValueState Value]
-> [SrcState ValueState Value] -> [SrcState ValueState Value]
forall a. [a] -> [a] -> [a]
++ [SrcState ValueState Value]
ins
  [SrcState ValueState Value]
-> [SrcState ValueState Value] -> [SrcState ValueState Value]
forall a. [a] -> [a] -> [a]
++ (SrcState ValueState Variable -> SrcState ValueState Value)
-> [SrcState ValueState Variable] -> [SrcState ValueState Value]
forall a b. (a -> b) -> [a] -> [b]
map SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf [SrcState ValueState Variable]
outs)

cppsInOut :: (VS (CppSrcCode TypeData) ->
  [MS (CppSrcCode ParamData)] -> MS (CppSrcCode Body) ->
  MS (CppSrcCode md)) -> [SVariable CppSrcCode] -> [SVariable CppSrcCode] ->
  [SVariable CppSrcCode] -> MS (CppSrcCode Body) -> MS (CppSrcCode md)
cppsInOut :: forall md.
(State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> MS (CppSrcCode md))
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> MS (CppSrcCode md)
cppsInOut State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> MS (CppSrcCode md)
f [SrcState ValueState Variable]
ins [SrcState ValueState Variable
v] [] SrcState MethodState Doc
b = State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> MS (CppSrcCode md)
f ((CppSrcCode Variable -> CppSrcCode TypeData)
-> SrcState ValueState Variable
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType SrcState ValueState Variable
v)
  ([SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState MethodState ParamData]
forall (r :: * -> *).
(ParameterSym r, TypeElim r, VariableElim r) =>
[SVariable r]
-> [SVariable r] -> [SVariable r] -> [MS (r ParamData)]
cppInOutParams [SrcState ValueState Variable]
ins [SrcState ValueState Variable
v] []) ((CppSrcCode (Doc, Terminator)
 -> CppSrcCode Doc
 -> CppSrcCode (Doc, Terminator)
 -> CppSrcCode Doc)
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
forall a b c d s.
(a -> b -> c -> d)
-> State s a -> State s b -> State s c -> State s d
on3StateValues (((Doc, Terminator) -> Doc -> (Doc, Terminator) -> Doc)
-> CppSrcCode (Doc, Terminator)
-> CppSrcCode Doc
-> CppSrcCode (Doc, Terminator)
-> CppSrcCode Doc
forall (r :: * -> *) a b c d.
Applicative r =>
(a -> b -> c -> d) -> r a -> r b -> r c -> r d
on3CodeValues (Doc, Terminator) -> Doc -> (Doc, Terminator) -> Doc
surroundBody)
  (SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
varDec SrcState ValueState Variable
v CppSrcCode ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
local) SrcState MethodState Doc
b (SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r smt)
returnStmt (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SrcState ValueState Variable
v))
cppsInOut State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> MS (CppSrcCode md)
f [SrcState ValueState Variable]
ins [] [SrcState ValueState Variable
v] SrcState MethodState Doc
b = State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> MS (CppSrcCode md)
f ((CppSrcCode Variable -> CppSrcCode TypeData)
-> SrcState ValueState Variable
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode Variable -> CppSrcCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType SrcState ValueState Variable
v)
  ([SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState MethodState ParamData]
forall (r :: * -> *).
(ParameterSym r, TypeElim r, VariableElim r) =>
[SVariable r]
-> [SVariable r] -> [SVariable r] -> [MS (r ParamData)]
cppInOutParams [SrcState ValueState Variable]
ins [] [SrcState ValueState Variable
v]) ((CppSrcCode Doc -> CppSrcCode (Doc, Terminator) -> CppSrcCode Doc)
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues ((Doc -> (Doc, Terminator) -> Doc)
-> CppSrcCode Doc -> CppSrcCode (Doc, Terminator) -> CppSrcCode Doc
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues Doc -> (Doc, Terminator) -> Doc
appendToBody) SrcState MethodState Doc
b
  (SrcState ValueState Value -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r smt)
returnStmt (SrcState ValueState Value
 -> SrcState MethodState (Doc, Terminator))
-> SrcState ValueState Value
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ SrcState ValueState Variable -> SrcState ValueState Value
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SrcState ValueState Variable
v))
cppsInOut State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> MS (CppSrcCode md)
f [SrcState ValueState Variable]
ins [SrcState ValueState Variable]
outs [SrcState ValueState Variable]
both SrcState MethodState Doc
b = State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> MS (CppSrcCode md)
f State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void ([SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState MethodState ParamData]
forall (r :: * -> *).
(ParameterSym r, TypeElim r, VariableElim r) =>
[SVariable r]
-> [SVariable r] -> [SVariable r] -> [MS (r ParamData)]
cppInOutParams [SrcState ValueState Variable]
ins [SrcState ValueState Variable]
outs [SrcState ValueState Variable]
both) SrcState MethodState Doc
b

cpphInOut :: (VS (CppHdrCode TypeData) ->
  [MS (CppHdrCode ParamData)] -> MS (CppHdrCode Body) ->
  MS (CppHdrCode md)) -> [SVariable CppHdrCode] -> [SVariable CppHdrCode] ->
  [SVariable CppHdrCode] -> MS (CppHdrCode Body) -> MS (CppHdrCode md)
cpphInOut :: forall md.
(State ValueState (CppHdrCode TypeData)
 -> [HdrState MethodState ParamData]
 -> HdrState MethodState Doc
 -> MS (CppHdrCode md))
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> MS (CppHdrCode md)
cpphInOut State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> MS (CppHdrCode md)
f [HdrState ValueState Variable]
ins [HdrState ValueState Variable
v] [] HdrState MethodState Doc
b = State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> MS (CppHdrCode md)
f ((CppHdrCode Variable -> CppHdrCode TypeData)
-> HdrState ValueState Variable
-> State ValueState (CppHdrCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppHdrCode Variable -> CppHdrCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType HdrState ValueState Variable
v)
  ([HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState MethodState ParamData]
forall (r :: * -> *).
(ParameterSym r, TypeElim r, VariableElim r) =>
[SVariable r]
-> [SVariable r] -> [SVariable r] -> [MS (r ParamData)]
cppInOutParams [HdrState ValueState Variable]
ins [HdrState ValueState Variable
v] []) HdrState MethodState Doc
b
cpphInOut State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> MS (CppHdrCode md)
f [HdrState ValueState Variable]
ins [] [HdrState ValueState Variable
v] HdrState MethodState Doc
b = State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> MS (CppHdrCode md)
f ((CppHdrCode Variable -> CppHdrCode TypeData)
-> HdrState ValueState Variable
-> State ValueState (CppHdrCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppHdrCode Variable -> CppHdrCode TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType HdrState ValueState Variable
v)
  ([HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState MethodState ParamData]
forall (r :: * -> *).
(ParameterSym r, TypeElim r, VariableElim r) =>
[SVariable r]
-> [SVariable r] -> [SVariable r] -> [MS (r ParamData)]
cppInOutParams [HdrState ValueState Variable]
ins [] [HdrState ValueState Variable
v]) HdrState MethodState Doc
b
cpphInOut State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> MS (CppHdrCode md)
f [HdrState ValueState Variable]
ins [HdrState ValueState Variable]
outs [HdrState ValueState Variable]
both HdrState MethodState Doc
b = State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> MS (CppHdrCode md)
f State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void ([HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState MethodState ParamData]
forall (r :: * -> *).
(ParameterSym r, TypeElim r, VariableElim r) =>
[SVariable r]
-> [SVariable r] -> [SVariable r] -> [MS (r ParamData)]
cppInOutParams [HdrState ValueState Variable]
ins [HdrState ValueState Variable]
outs [HdrState ValueState Variable]
both) HdrState MethodState Doc
b

cppInOutParams :: (ParameterSym r, TypeElim r, VariableElim r) =>
  [SVariable r] -> [SVariable r] -> [SVariable r] -> [MS (r ParamData)]
cppInOutParams :: forall (r :: * -> *).
(ParameterSym r, TypeElim r, VariableElim r) =>
[SVariable r]
-> [SVariable r] -> [SVariable r] -> [MS (r ParamData)]
cppInOutParams [SVariable r]
ins [SVariable r
_] [] = (SVariable r -> MS (r ParamData))
-> [SVariable r] -> [MS (r ParamData)]
forall a b. (a -> b) -> [a] -> [b]
map SVariable r -> MS (r ParamData)
forall (r :: * -> *).
(ParameterSym r, TypeElim r, VariableElim r) =>
SVariable r -> MS (r ParamData)
getParam [SVariable r]
ins
cppInOutParams [SVariable r]
ins [] [SVariable r
v] = (SVariable r -> MS (r ParamData))
-> [SVariable r] -> [MS (r ParamData)]
forall a b. (a -> b) -> [a] -> [b]
map SVariable r -> MS (r ParamData)
forall (r :: * -> *).
(ParameterSym r, TypeElim r, VariableElim r) =>
SVariable r -> MS (r ParamData)
getParam ([SVariable r] -> [MS (r ParamData)])
-> [SVariable r] -> [MS (r ParamData)]
forall a b. (a -> b) -> a -> b
$ SVariable r
v SVariable r -> [SVariable r] -> [SVariable r]
forall a. a -> [a] -> [a]
: [SVariable r]
ins
cppInOutParams [SVariable r]
ins [SVariable r]
outs [SVariable r]
both = (SVariable r -> MS (r ParamData))
-> [SVariable r] -> [MS (r ParamData)]
forall a b. (a -> b) -> [a] -> [b]
map SVariable r -> MS (r ParamData)
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
pointerParam [SVariable r]
both [MS (r ParamData)] -> [MS (r ParamData)] -> [MS (r ParamData)]
forall a. [a] -> [a] -> [a]
++ (SVariable r -> MS (r ParamData))
-> [SVariable r] -> [MS (r ParamData)]
forall a b. (a -> b) -> [a] -> [b]
map SVariable r -> MS (r ParamData)
forall (r :: * -> *).
(ParameterSym r, TypeElim r, VariableElim r) =>
SVariable r -> MS (r ParamData)
getParam [SVariable r]
ins [MS (r ParamData)] -> [MS (r ParamData)] -> [MS (r ParamData)]
forall a. [a] -> [a] -> [a]
++
  (SVariable r -> MS (r ParamData))
-> [SVariable r] -> [MS (r ParamData)]
forall a b. (a -> b) -> [a] -> [b]
map SVariable r -> MS (r ParamData)
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
pointerParam [SVariable r]
outs