-- -- Copyright 2014 Alessandro Gerlinger Romero -- -- This file is part of Hybrid fUML. -- -- Hybrid fUML is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- Hybrid fUML is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with Hybrid fUML. If not, see . -- ------------------------------------------------------------------------------------------------------------------------------------------------------------ -- APPROACH -- each active object can send one(and only one) signal for all other active objects during a reaction -- cartesian product from active objects, signal classifier, and reactionClock is the state of signals -- ------------------------------------------------------------------------------------------------------------------------------------------------------------ -- Active object - SENDER Active object - RECEIVER Signal Type Reaction Clock type SignalTag = (FUML_Semantics_Classes_Kernel_Value, FUML_Semantics_Classes_Kernel_Value, FUML_Syntax_Classes_Kernel_Classifier, Int) instance AsmTerm SignalTag where asmDefault = (FUML_Semantics_Classes_Kernel_ValueEmpty, FUML_Semantics_Classes_Kernel_ValueEmpty, FUML_Syntax_Classes_Kernel_ClassifierEmpty, 0) instance Eq SignalTag where (==) (v1,v2,c,i) (bv1,bv2,bc,bi) = v1 == bv1 && v2 == bv2 && c == bc && i == bi -- lexical order instance Ord SignalTag where (<=) (v1,v2,c,i) (bv1,bv2,bc,bi) = (v1 < bv1) || ((v1 == bv1) && ((v2 < bv2 || v2 == bv2) || (v2 == bv2 && ((c < bc || c == bc) || (c == bc && (i == bi || i < bi)))))) -- SignalInstance type SignalValue = FUML_Semantics_Classes_Kernel_Value -- SIGNALS function_fUML_signals :: Dynamic (SignalTag -> SignalValue) function_fUML_signals = initAssocs "function_fUML_signals" [] -- -- ABSENT SIGNAL - SEMANTIC CLASSIFER -- function_Instance_Classifier_Signal_absentSignal :: FUML_Syntax_Classes_Kernel_Classifier function_Instance_Classifier_Signal_absentSignal = FUML_Syntax_Classes_Kernel_Classifier "AbsentSignal" False False {FUML_Syntax_Classes_Kernel_FeatureEmpty} FUML_Syntax_Classes_Kernel_ClassifierEmpty {FUML_Syntax_Classes_Kernel_ClassifierEmpty} False {FUML_Syntax_Classes_Kernel_ParameterEmpty} False False False {FUML_Syntax_Classes_Kernel_ClassifierEmpty} {FUML_Syntax_Classes_Kernel_FeatureEmpty} {FUML_Syntax_Classes_Kernel_FeatureEmpty} "AbsentSignal" FUML_Syntax_Classes_Kernel_VisibilityKind_public [""] {""} FUML_Syntax_Classes_Kernel_VisibilityKind_public {FUML_Syntax_Classes_Kernel_FeatureEmpty} {FUML_Syntax_Classes_Kernel_FeatureEmpty} {FUML_Syntax_Classes_Kernel_FeatureEmpty} FUML_Syntax_CommonBehaviors_Communications_Signal