コード例 #1
0
ファイル: ElementDictionary.cs プロジェクト: jdruin/F5Eagle
        ///////////////////////////////////////////////////////////////////////

        public bool ChangeFlags(
            string key,
            VariableFlags initialValue,
            VariableFlags changeValue,
            bool create,
            bool add,
            ref bool notify
            )
        {
            if ((key != null) && (elementFlags != null))
            {
                VariableFlags oldValue;
                VariableFlags newValue;

                if (elementFlags.TryGetValue(key, out oldValue))
                {
                    if (add)
                    {
                        newValue = oldValue | changeValue;

                        elementFlags[key] = newValue;

                        if (notify && EntityOps.OnFlagsChanged(
                                variableEvent, oldValue, newValue))
                        {
                            notify = false;
                        }

                        return(true);
                    }
                    else
                    {
                        newValue = oldValue & ~changeValue;

                        if (newValue != VariableFlags.None)
                        {
                            elementFlags[key] = newValue;

                            if (notify && EntityOps.OnFlagsChanged(
                                    variableEvent, oldValue, newValue))
                            {
                                notify = false;
                            }

                            return(true);
                        }

                        if (notify && EntityOps.OnFlagsChanged(
                                variableEvent, oldValue, newValue))
                        {
                            notify = false;
                        }

                        return(elementFlags.Remove(key));
                    }
                }
                else if (create)
                {
                    newValue = add ? (initialValue | changeValue) :
                               VariableFlags.None;

                    elementFlags.Add(key, newValue);

                    if (notify && EntityOps.OnFlagsChanged(
                            variableEvent, oldValue, newValue))
                    {
                        notify = false;
                    }

                    return(true);
                }
            }

            return(false);
        }