Example #1
0
        public static CodePiece GenerateCode(bool value)
        {
            CodePiece p = new CodePiece();

            p[0, 0] = BCHelper.Dig(value ? (byte)1 : (byte)0);
            return(p);
        }
Example #2
0
        private static void GetFactors(CodePiece p, long a)         // Wenn nicht möglich so gut wie mögl und am ende add
        {
            List <int> result = new List <int>();

            if (a < 10)
            {
                p.AppendRight(BCHelper.Dig((byte)a));
                return;
            }

            for (byte i = 9; i > 1; i--)
            {
                if (a % i == 0)
                {
                    GetFactors(p, a / i);
                    p.AppendRight(BCHelper.Dig(i));
                    p.AppendRight(BCHelper.Mult);
                    return;
                }
            }

            for (byte i = 1; i < 10; i++)
            {
                if ((a - i) % 9 == 0)
                {
                    GetFactors(p, a - i);
                    p.AppendRight(BCHelper.Dig(i));
                    p.AppendRight(BCHelper.Add);
                    return;
                }
            }

            throw new WTFException();
        }
Example #3
0
        public static CodePiece GenerateCode(long d)
        {
            if (d < 0 || d > 9)
            {
                return(null);
            }

            CodePiece p = new CodePiece();

            p[0, 0] = BCHelper.Dig((byte)d);
            return(p);
        }
        public static CodePiece GenerateCode(long lit)
        {
            CodePiece p = new CodePiece();

            bool isneg;

            if (isneg = lit < 0)
            {
                lit *= -1;
            }

            string rep = ConvertToBase(lit, 9);
            int    pos = 0;

            if (isneg)
            {
                p[pos++, 0] = BCHelper.Digit0;
            }

            for (int i = 0; i < rep.Length; i++)
            {
                p[pos++, 0] = BCHelper.Dig((byte)(rep[rep.Length - i - 1] - '0'));

                if (i + 1 != rep.Length)
                {
                    p[pos++, 0] = BCHelper.Dig(9);
                }
            }

            int count = rep.Length - 1;

            for (int i = 0; i < count; i++)
            {
                p[pos++, 0] = BCHelper.Mult;
                p[pos++, 0] = BCHelper.Add;
            }

            if (isneg)
            {
                p[pos++, 0] = BCHelper.Sub;
            }

            return(p);
        }
Example #5
0
        public override CodePiece GenerateCode(CodeGenEnvironment env, bool reversed)
        {
            CodePiece p = new CodePiece();
            int       i = 0;

            if (reversed)
            {
                foreach (byte val in Value)
                {
                    p[i--, 0] = BCHelper.Dig(val);
                }
            }
            else
            {
                foreach (byte val in Value)
                {
                    p[i++, 0] = BCHelper.Dig(val);
                }
            }

            p.NormalizeX();

            return(p);
        }
        public static CodePiece GenerateCode(long lit)
        {
            if (lit < 0)
            {
                CodePiece p = GenerateCode(-lit);
                if (p == null)
                {
                    return(null);
                }
                p.AppendLeft(BCHelper.Digit0);
                p.AppendRight(BCHelper.Sub);
                p.NormalizeX();
                return(p);
            }

            if (lit >= 0 && lit <= 9)
            {
                return(new CodePiece(BCHelper.Dig((byte)lit)));
            }

            if (lit < MIN_ASCII && lit >= (MIN_ASCII - 9))
            {
                if (lit + 9 == '"')
                {
                    CodePiece p = GenerateCode(lit + 8);
                    if (p == null)
                    {
                        return(null);
                    }
                    p.AppendRight(BCHelper.Digit8);
                    p.AppendRight(BCHelper.Sub);
                    return(p);
                }
                else
                {
                    CodePiece p = GenerateCode(lit + 9);
                    if (p == null)
                    {
                        return(null);
                    }
                    p.AppendRight(BCHelper.Digit9);
                    p.AppendRight(BCHelper.Sub);
                    return(p);
                }
            }

            if (lit < (MIN_ASCII - 9))
            {
                return(null);
            }

            List <char>    str;
            List <StripOp> ops;

            if (CalculateStringOps(out str, out ops, lit))
            {
                CodePiece p = new CodePiece();

                p.AppendRight(BCHelper.Stringmode);
                foreach (char c in str)
                {
                    p.AppendRight(BCHelper.Chr(c));
                }
                p.AppendRight(BCHelper.Stringmode);

                for (int i = 0; i < ops.Count; i++)
                {
                    switch (ops[i])
                    {
                    case StripOp.Add:
                        p.AppendRight(BCHelper.Add);
                        break;

                    case StripOp.Mult:
                        p.AppendRight(BCHelper.Mult);
                        break;

                    default:
                        throw new WTFException();
                    }
                }

                return(p);
            }

            return(null);
        }