using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TUSB0214DAMSampleApp
{
    static class ExtendByte
    {
        public static bool IsBitSet0(this byte b) { return ((b & 0x01) != 0); }
        public static bool IsBitSet1(this byte b) { return ((b & 0x02) != 0); }
        public static bool IsBitSet2(this byte b) { return ((b & 0x04) != 0); }
        public static bool IsBitSet3(this byte b) { return ((b & 0x08) != 0); }
        public static bool IsBitSet4(this byte b) { return ((b & 0x10) != 0); }
        public static bool IsBitSet5(this byte b) { return ((b & 0x20) != 0); }
        public static bool IsBitSet6(this byte b) { return ((b & 0x40) != 0); }
        public static bool IsBitSet7(this byte b) { return ((b & 0x80) != 0); }

        public static void BitSet0(this ref byte b) { b += 0x01; }
        public static void BitSet1(this ref byte b) { b += 0x02; }
        public static void BitSet2(this ref byte b) { b += 0x04; }
        public static void BitSet3(this ref byte b) { b += 0x08; }
        public static void BitSet4(this ref byte b) { b += 0x10; }
        public static void BitSet5(this ref byte b) { b += 0x20; }
        public static void BitSet6(this ref byte b) { b += 0x40; }
        public static void BitSet7(this ref byte b) { b += 0x80; }
    }

    // 
    static class ExtendDecimal
    {
        public static ushort ToUShort(this decimal d)
        {
            try
            {
                if (d < ushort.MinValue) return ushort.MinValue;
                else if (d > ushort.MaxValue) return ushort.MaxValue;
                else return (ushort)d;
            }
            catch { return 0; }
        }

        public static int ToInt(this decimal d)
        {
            try
            {
                if (d < int.MinValue) return int.MinValue;
                else if (d > int.MaxValue) return int.MaxValue;
                else return (int)d;
            }
            catch { return 0; }
        }

        public static double ToDouble(this decimal d)
        {
            try
            {
                return (double)d;
            }
            catch { return 0.0; }
        }
    }

    static class ExtendInt
    {
        public static byte ToByte(this int i)
        {
            try
            {
                if (i < byte.MinValue) return byte.MinValue;
                else if (i > byte.MaxValue) return byte.MaxValue;
                else return (byte)i;
            }
            catch { return 0; }
        }
    }

    static class ExtendDouble
    {
        public static ushort ToUShort(this double d)
        {
            try
            {
                if (d < ushort.MinValue) return ushort.MinValue;
                else if (d > ushort.MaxValue) return ushort.MaxValue;
                else return (ushort)Math.Round(d, MidpointRounding.AwayFromZero);
            }
            catch { return 0; }
        }
    }

    static class ExtendControls
    {
        // ボタンのバックカラーを注意喚起する色か通常状態の色にする
        public static void AwakeColor(this Button button, bool awake)
        {
            if (awake)
                button.BackColor = Color.Salmon;
            else
                button.UseVisualStyleBackColor = true;
        }

        // コンボボックスのバックカラーを警報色にするか通常の色にする
        public static bool AlartColor(this NumericUpDown numericUpDown,bool alart)
        {
            if (alart)
                numericUpDown.BackColor = Color.Red;
            else
                numericUpDown.BackColor = SystemColors.Window;

            return alart;
        }
    }
}
