Example #1
0
        public void Display(KalkEngine engine, string title, Func <KalkShortcut, bool> filter = null, bool addBlankLine = false)
        {
            if (engine == null)
            {
                throw new ArgumentNullException(nameof(engine));
            }
            if (title == null)
            {
                throw new ArgumentNullException(nameof(title));
            }

            var  alreadyPrinted = new HashSet <KalkShortcut>();
            bool isFirst        = true;

            foreach (var unitKey in this.Keys.OrderBy(x => x))
            {
                var shortcut = this[unitKey] as KalkShortcut;
                if (shortcut == null || !alreadyPrinted.Add(shortcut) || (filter != null && !filter(shortcut)))
                {
                    continue;
                }

                if (isFirst)
                {
                    engine.WriteHighlightLine($"# {title}");
                }
                else if (addBlankLine)
                {
                    engine.WriteHighlightLine("");
                }
                isFirst = false;

                engine.WriteHighlightLine(shortcut.ToString());
            }
        }
Example #2
0
        public void Display(KalkEngine engine, string title, Func <KalkAlias, bool> filter = null, bool addBlankLine = false)
        {
            if (engine == null)
            {
                throw new ArgumentNullException(nameof(engine));
            }
            if (title == null)
            {
                throw new ArgumentNullException(nameof(title));
            }

            bool isFirst = true;

            foreach (var aliasKey in this.Keys.OrderBy(x => x))
            {
                var alias = this[aliasKey] as KalkAlias;
                if (alias == null || (filter != null && !filter(alias)))
                {
                    continue;
                }

                if (isFirst)
                {
                    engine.WriteHighlightLine($"# {title}");
                }
                else if (addBlankLine)
                {
                    engine.WriteHighlightLine("");
                }
                isFirst = false;

                engine.WriteHighlightLine(alias.ToString());
            }
        }
Example #3
0
        public void Display(KalkEngine engine, string title, Func <KalkUnit, bool> filter, bool addBlankLine = true)
        {
            if (engine == null)
            {
                throw new ArgumentNullException(nameof(engine));
            }
            if (title == null)
            {
                throw new ArgumentNullException(nameof(title));
            }

            var  alreadyPrinted = new HashSet <KalkUnit>();
            bool isFirst        = true;

            foreach (var unitKey in this.Keys.OrderBy(x => x))
            {
                var unit = this[unitKey] as KalkUnit;
                if (unit == null || !alreadyPrinted.Add(unit) || unit.Parent != null || (filter != null && !filter(unit)))
                {
                    continue;
                }

                if (isFirst)
                {
                    engine.WriteHighlightLine($"# {title}");
                }
                else if (addBlankLine)
                {
                    engine.WriteHighlightLine("");
                }
                isFirst = false;

                unit.Invoke(engine, engine.CurrentNode, null, null);
            }
        }
Example #4
0
        private void DisplayDetailed(KalkEngine engine)
        {
            var u16 = Unsafe.As <Half, ushort>(ref Unsafe.AsRef(_value));

            engine.WriteHighlightLine($"    # IEEE 754 - half float - 16-bit");
            engine.WriteHighlightLine($"    #");
            engine.WriteInt16(u16, true);

            // Prints the 16 bits indices
            engine.WriteHighlightLine($"    #   15       8         0");

            engine.WriteHighlightLine($"    #");
            engine.WriteHighlightLine($"    #  sign     exponent    |-- fraction -|");
            //                                 #   1 * 2 ^ (15 - 15) * 0b1.1000000000

            var sign     = (u16 >> 15);
            var exponent = (u16 >> 10) & 0b11111;
            var fraction = u16 & 0b1111111111;

            var builder = new StringBuilder();

            builder.Append(sign != 0 ? " -1" : "  1");
            builder.Append(" * 2 ^ (");
            builder.Append($"{(exponent == 0 ? 1 : exponent),2} - 15) * 0b{(exponent == 0 ? '0' : '1')}.");
            for (int i = 9; i >= 0; i--)
            {
                builder.Append(((fraction >> i) & 1) == 0 ? '0' : '1');
            }
            engine.WriteHighlightLine($"    = {builder}f");
        }