コード例 #1
0
ファイル: HMark.cs プロジェクト: ChrisNovoselic/ASUTP.Library
        /// <summary>
        /// Присвоить признак по указанному адресу (номеру бита)
        /// </summary>
        /// <param name="opt">Значение признака</param>
        /// <param name="bit">Номер бита</param>
        private void marked(bool opt, int bit)
        {
            Int32 val = HMath.Pow2(bit);

            if (opt == true)
            {
                if (!((m_mark & val) == val))
                {
                    m_mark += val;
                    ValueChanged?.Invoke(val);
                }
                else
                {
                    ;
                }
            }
            else
            if ((m_mark & val) == val)
            {
                m_mark -= val;
                ValueChanged?.Invoke(val);
            }
            else
            {
                ;
            }
        }
コード例 #2
0
ファイル: HMark.cs プロジェクト: ChrisNovoselic/ASUTP.Library
        /// <summary>
        /// Проверить установлено ли значение признака в ИСТИНА по адресу (номеру бита) и доп./смещению
        /// </summary>
        /// <param name="val">Все значения признаков</param>
        /// <param name="bit">Номер бита</param>
        /// <param name="offset">Доп./смещение</param>
        /// <returns>Признак установки значения</returns>
        public static bool IsMarked(int val, int bit, int offset = 0)
        {
            bool bRes = false;

            if ((val & HMath.Pow2(bit, offset)) == HMath.Pow2(bit, offset))
            {
                bRes = true;
            }
            else
            {
                ;
            }

            return(bRes);
        }
コード例 #3
0
ファイル: HMark.cs プロジェクト: ChrisNovoselic/ASUTP.Library
        /// <summary>
        /// Добавить истинные признаки при их отсутствии
        /// </summary>
        /// <param name="mark">Исходное значение для всех признаков</param>
        public void Add(HMark mark)
        {
            int cntBit   = -1
            , valChanged = 0;

            Delegate [] arHandler = ValueChanged == null ? new Delegate [] { } : ValueChanged.GetInvocationList();

            foreach (DelegateIntFunc f in arHandler)
            {
                ValueChanged -= f;
            }

            cntBit = sizeof(Int32) * 8;

            for (int i = 0; i < cntBit; i++)
            {
                if ((IsMarked(mark.Value, i) == true) &&
                    (IsMarked(i) == false))
                {
                    marked(true, i);

                    valChanged += HMath.Pow2(i);
                }
                else
                {
                    ;
                }
            }

            foreach (DelegateIntFunc f in arHandler)
            {
                ValueChanged += new DelegateIntFunc(f);
            }

            ValueChanged?.Invoke(valChanged);
        }