Ejemplo n.º 1
0
        static public VarInfo IsEqual(List <VarInfo> parameters)
        {
            if (parameters.Count == 2)
            {
                bool temp;
                try
                {
                    temp = VarInfo.IsEqual(parameters[0], parameters[1]);
                }
                catch
                {
                    return(VarInfo.NullVal);
                }

                VarInfo result = new VarInfo(temp);
                return(result);
            }

            return(VarInfo.NullVal);
        }
Ejemplo n.º 2
0
        private IGoLink PickLinkFromConditionBlock(List<IGoLink> OutLinks, VarInfo blockResult, out string ErrorReport)
        {
            IGoLink pickedLink = null;
            ErrorReport = "";
            int countElement = OutLinks.Count;

            // check for duplicated link value:
            for(int i=0; i<countElement-1; i++)
                for(int j=i+1; j<countElement; j++)
                {
                    string linkValue1 = ( (OutLinks[i] as GoLabeledLink).FromLabel as GoText).Text;
                    linkValue1 = linkValue1.ToUpper();
                    linkValue1 = FlowDataManager.RemoveSpacing(linkValue1);
                    if (linkValue1 == "")
                    {
                        ErrorReport = "Error: Blank out-link label";
                        return null;
                    }
                    if (linkValue1[0] >= 'A' && linkValue1[0] <= 'Z')
                        linkValue1 = "$" + linkValue1;

                    string linkValue2 = ( (OutLinks[j] as GoLabeledLink).FromLabel as GoText).Text;
                    linkValue2 = linkValue2.ToUpper();
                    linkValue2 = FlowDataManager.RemoveSpacing(linkValue2);
                    if (linkValue2 == "")
                    {
                        ErrorReport = "Error: Blank out-link label";
                        return null;
                    }
                    if (linkValue2[0]>='A' && linkValue2[0]<='Z')
                        linkValue2 = "$" + linkValue2;

                    if(linkValue1 == "$ELSE")
                    {
                        pickedLink = OutLinks[i];
                    }
                    if(linkValue2 == "$ELSE")
                    {
                        pickedLink = OutLinks[j];
                    }
                    if(linkValue1 == "$ELSE" && linkValue2 == "$ELSE")
                    {
                        ErrorReport = "Error: Duplicated out link label/value: ELSE";
                        return null;
                    }

                    VarInfo linkVar1 = FlowDataManager.HandleConst(linkValue1);
                    VarInfo linkvar2 = FlowDataManager.HandleConst(linkValue2);

                    if( VarInfo.IsEqual(linkVar1,linkvar2) )
                    {
                        ErrorReport = "Error: Duplicated out link label/value: " + linkValue1;
                        return null;
                    }

                }

            // check all valid links
            foreach(IGoLink link in OutLinks)
            {
                string linkValue = ( (link as GoLabeledLink).FromLabel as GoText).Text;
                linkValue = linkValue.ToUpper();
                linkValue = FlowDataManager.RemoveSpacing(linkValue);
                if (linkValue == "")
                {
                    ErrorReport = "Error: Blank out-link label";
                    return null;
                }
                if (linkValue[0]>='A' && linkValue[0]<='Z')
                        linkValue = "$" + linkValue;

                if(linkValue == "$ELSE")
                {
                    continue;
                }

                VarInfo tempVar = FlowDataManager.HandleConst(linkValue);

                if(tempVar.isNull)
                {
                    ErrorReport = "Error: Illegal out-link label: " + linkValue;
                    return null;
                }

                if( VarInfo.IsEqual(tempVar, blockResult) )
                {
                    pickedLink = link;
                }
            }

            if(pickedLink == null)
            {
                ErrorReport = "Error: Couldn't find a label that matches value: " + blockResult.value;
                return null;
            }

            return pickedLink;
        }