コード例 #1
0
ファイル: FuncEaster.cs プロジェクト: nathaliefil/uroboros
        public override DateTime ToTime()
        {
            int year = (int)arg0.ToNumber();

            TimeValidator.ValidateYear(year);

            return(Easter(year));
        }
コード例 #2
0
ファイル: FuncNewyear.cs プロジェクト: nathaliefil/uroboros
        public override DateTime ToTime()
        {
            int year = (int)arg0.ToNumber();

            TimeValidator.ValidateYear(year);

            return(new DateTime(year, 1, 1, 0, 0, 0));
        }
コード例 #3
0
ファイル: FuncDate.cs プロジェクト: nathaliefil/uroboros
        public override DateTime ToTime()
        {
            int day   = (int)arg0.ToNumber();
            int month = (int)arg1.ToNumber();
            int year  = (int)arg2.ToNumber();

            TimeValidator.ValidateDate(day, month, year);
            return(new DateTime(year, month, day, 0, 0, 0));
        }
コード例 #4
0
        public override DateTime ToTime()
        {
            int hour   = (int)arg0.ToNumber();
            int minute = (int)arg1.ToNumber();

            TimeValidator.ValidateHour(hour);
            TimeValidator.ValidateMinute(minute);

            DateTime s  = DateTime.Now.AddDays(1);
            TimeSpan ts = new TimeSpan(hour, minute, 0);

            s = s.Date + ts;
            return(s);
        }
コード例 #5
0
        public override decimal ToNumber()
        {
            decimal basis = arg0.ToNumber();
            decimal power = arg1.ToNumber();


            if (power == 0)
            {
                return(1);
            }

            if (basis == 0)
            {
                return(0);
            }

            if (power == 1)
            {
                return(basis);
            }

            if (IsInteger(power))
            {
                if (basis > 0)
                {
                    if (power > 0)
                    {
                        return(PowerDecimalToInt(basis, (uint)power));
                    }
                    else
                    {
                        return(1 / PowerDecimalToInt(basis, (uint)-power));
                    }
                }
                else
                {
                    decimal sign = power % 2 == 0 ? 1M : -1M;

                    if (power > 0)
                    {
                        return(sign * PowerDecimalToInt(-basis, (uint)power));
                    }
                    else
                    {
                        return(sign / PowerDecimalToInt(-basis, (uint)-power));
                    }
                }
            }
            else
            {
                if (basis < 0)
                {
                    throw new RuntimeException("RUNTIME ERROR! Exponentiation of a negative number resulted in complex number.");
                }
                else
                {
                    return((decimal)Math.Pow((double)basis, (double)power));
                }
            }
        }
コード例 #6
0
        public override bool ToBool()
        {
            decimal leftValue  = leftSide.ToNumber();
            decimal rightValue = rightSide.ToNumber();

            switch (type)
            {
            case ComparisonType.Equals:
                return(leftValue == rightValue ? true : false);

            case ComparisonType.NotEquals:
                return(leftValue != rightValue ? true : false);

            case ComparisonType.Bigger:
                return(leftValue > rightValue ? true : false);

            case ComparisonType.Smaller:
                return(leftValue < rightValue ? true : false);

            case ComparisonType.BiggerOrEquals:
                return(leftValue >= rightValue ? true : false);

            case ComparisonType.SmallerOrEquals:
                return(leftValue <= rightValue ? true : false);
            }

            return(false);
        }
コード例 #7
0
        public override DateTime ToTime()
        {
            int hour   = (int)arg0.ToNumber();
            int minute = (int)arg1.ToNumber();
            int second = (int)arg2.ToNumber();

            TimeValidator.ValidateHour(hour);
            TimeValidator.ValidateMinute(minute);
            TimeValidator.ValidateSecond(second);

            DateTime s  = DateTime.Now;
            TimeSpan ts = new TimeSpan(hour, minute, second);

            s = s.Date + ts;
            return(s);
        }
コード例 #8
0
        public override string ToString()
        {
            string source = arg0.ToString();

            int arg1v = (int)arg1.ToNumber();

            if (arg1v >= source.Length)
            {
                return("");
            }

            int arg2v = (int)arg2.ToNumber();

            if (arg2v < 1)
            {
                return("");
            }

            if (arg1v + arg2v > source.Length)
            {
                arg2v -= arg1v + arg2v - source.Length;
            }

            return(source.Substring(arg1v, arg2v));
        }
コード例 #9
0
ファイル: FuncFilled.cs プロジェクト: nathaliefil/uroboros
        public override string ToString()
        {
            string value;
            int    number = (int)arg1.ToNumber();

            if (arg0 is INumerable)
            {
                if ((arg0 as INumerable).ToNumber() % 1 == 0)
                {
                    value = ((int)(arg0 as INumerable).ToNumber()).ToString();
                }
                else
                {
                    value = (arg0 as INumerable).ToNumber().ToString();
                }
            }
            else
            {
                value = arg0.ToString();
            }

            if (value.Length >= number)
            {
                return(value);
            }

            return(string.Concat(Enumerable.Repeat("0", number - value.Length)) + value);
        }
コード例 #10
0
ファイル: Sleep.cs プロジェクト: nathaliefil/uroboros
        public void Run()
        {
            int howlong = (int)(time.ToNumber() * 1000);

            if (howlong > 0)
            {
                Thread.Sleep(howlong);
            }
        }
コード例 #11
0
        public override string ToString()
        {
            string source = arg0.ToString();
            int    arg1v  = (int)arg1.ToNumber();

            if (arg1v >= source.Length)
            {
                return(base.ToString());
            }

            return(source.Substring(arg1v));
        }
コード例 #12
0
ファイル: FuncRepeat.cs プロジェクト: nathaliefil/uroboros
        public override string ToString()
        {
            int repeats = (int)arg1.ToNumber();

            if (repeats <= 0)
            {
                return("");
            }
            else
            {
                return(string.Concat(Enumerable.Repeat(arg0.ToString(), repeats)));
            }
        }
コード例 #13
0
        public override string ToString()
        {
            int number = (int)arg0.ToNumber();

            if (number > 0)
            {
                return(Convert.ToString(number, 16));
            }
            else
            {
                number *= -1;
            }
            return("-" + Convert.ToString(number, 16));
        }
コード例 #14
0
        public override decimal ToNumber()
        {
            decimal number = arg0.ToNumber();

            if (number == 0)
            {
                throw new RuntimeException("RUNTIME ERROR! Decimal logarithm of zero happened.");
            }
            else if (number < 0)
            {
                throw new RuntimeException("RUNTIME ERROR! Decimal logarithm of negative number happened.");
            }
            else
            {
                return((decimal)Math.Log10(Decimal.ToDouble(number)));
            }
        }
コード例 #15
0
        public override decimal ToNumber()
        {
            decimal value = arg0.ToNumber();

            if (value < 0)
            {
                throw new RuntimeException("RUNTIME ERROR! Factorial of negative number happened.");
            }

            if (value % 1 == 0)
            {
                return(ArrayedFactorials((int)value));
            }
            else
            {
                return(StirlingApproximation((double)value));
            }
        }
コード例 #16
0
        public override bool ToBool()
        {
            decimal left  = leftBound.ToNumber();
            decimal right = rightBound.ToNumber();
            decimal v     = value.ToNumber();

            if (left < right)
            {
                return((v > left) && (v < right));
            }
            else if (left > right)
            {
                return((v < left) && (v > right));
            }
            else
            {
                return(false);
            }
        }
コード例 #17
0
ファイル: FuncSqrt.cs プロジェクト: nathaliefil/uroboros
        public override decimal ToNumber()
        {
            decimal number = arg0.ToNumber();

            if (number < 0)
            {
                throw new RuntimeException("RUNTIME ERROR! Square root of negative number happened.");
            }
            else if (number == 0)
            {
                return(0);
            }
            else
            {
                if (number % 1 == 0 && IsPerfectSquare((int)number))
                {
                    return((decimal)Math.Sqrt((int)number));
                }
                else
                {
                    return(SquareRoot(number));
                }
            }
        }
コード例 #18
0
 public override decimal ToNumber()
 {
     return(condition.ToBool() ? leftValue.ToNumber() : rightValue.ToNumber());
 }
コード例 #19
0
 public override string ToString()
 {
     return(DateExtractor.WeekDay(arg0.ToNumber()));
 }
コード例 #20
0
        private static ITimeable BuildFromDate(List <Token> tokens)
        {
            decimal      month     = 1;
            List <Token> leftPart  = new List <Token>();
            List <Token> rightPart = new List <Token>();
            bool         pastMonth = false;

            foreach (Token tok in tokens)
            {
                if (IsMonth(tok))
                {
                    pastMonth = true;
                    month     = StringToMonth(tok.GetContent());
                }
                else
                {
                    if (pastMonth)
                    {
                        rightPart.Add(tok);
                    }
                    else
                    {
                        leftPart.Add(tok);
                    }
                }
            }

            if (leftPart.Count == 0)
            {
                return(null);
            }

            INumerable day = NumerableBuilder.Build(leftPart);

            if (day.IsNull())
            {
                return(null);
            }

            // try to build date without year
            if (rightPart.Count == 0)
            {
                if (day is NumericConstant)
                {
                    return(new Time(new ClockEmpty(), new DayConstant(day.ToNumber()), month, new YearNow()));
                }
                else
                {
                    return(new Time(new ClockEmpty(), new DayNumerable(day), month, new YearNow()));
                }
            }

            INumerable year = NumerableBuilder.Build(rightPart);

            if (year.IsNull())
            {
                return(null);
            }

            if (day is NumericConstant)
            {
                if (year is NumericConstant)
                {
                    return(new Time(new ClockEmpty(), new DayConstant(day.ToNumber()), month, new YearConstant(year.ToNumber())));
                }
                else
                {
                    return(new Time(new ClockEmpty(), new DayConstant(day.ToNumber()), month, new YearNumerable(year)));
                }
            }
            else
            {
                if (year is NumericConstant)
                {
                    return(new Time(new ClockEmpty(), new DayNumerable(day), month, new YearConstant(year.ToNumber())));
                }
                else
                {
                    return(new Time(new ClockEmpty(), new DayNumerable(day), month, new YearNumerable(year)));
                }
            }
        }
コード例 #21
0
        private static IClock BuildClock(List <Token> tokens)
        {
            int semicolons = NumberOfColonsOutsideOfBrackets(tokens);

            if (semicolons == 1)
            {
                List <Token> leftPart      = new List <Token>();
                List <Token> rightPart     = new List <Token>();
                int          level         = 0;
                bool         pastSemicolon = false;
                foreach (Token tok in tokens)
                {
                    if (tok.GetTokenType().Equals(TokenType.BracketOn))
                    {
                        level++;
                    }
                    if (tok.GetTokenType().Equals(TokenType.BracketOff))
                    {
                        level--;
                    }

                    if (tok.GetTokenType().Equals(TokenType.Colon) && level == 0)
                    {
                        pastSemicolon = true;
                    }
                    else
                    {
                        if (pastSemicolon)
                        {
                            rightPart.Add(tok);
                        }
                        else
                        {
                            leftPart.Add(tok);
                        }
                    }
                }

                INumerable inumLeft = NumerableBuilder.Build(leftPart);
                if (inumLeft.IsNull())
                {
                    return(null);
                }
                INumerable inumRight = NumerableBuilder.Build(rightPart);
                if (inumRight.IsNull())
                {
                    return(null);
                }

                if (inumLeft is NumericConstant && inumRight is NumericConstant)
                {
                    return(new ClockConstant(inumLeft.ToNumber(), inumRight.ToNumber(), 0));
                }

                return(new ClockWithoutSeconds(inumLeft, inumRight));
            }
            else
            {
                List <Token> leftPart    = new List <Token>();
                List <Token> middlePart  = new List <Token>();
                List <Token> rightPart   = new List <Token>();
                int          level       = 0;
                int          currentPart = 1;
                foreach (Token tok in tokens)
                {
                    if (tok.GetTokenType().Equals(TokenType.BracketOn))
                    {
                        level++;
                    }
                    if (tok.GetTokenType().Equals(TokenType.BracketOff))
                    {
                        level--;
                    }

                    if (tok.GetTokenType().Equals(TokenType.Colon) && level == 0)
                    {
                        currentPart++;
                    }
                    else
                    {
                        if (currentPart == 1)
                        {
                            leftPart.Add(tok);
                        }
                        else if (currentPart == 2)
                        {
                            middlePart.Add(tok);
                        }
                        else
                        {
                            rightPart.Add(tok);
                        }
                    }
                }

                INumerable inumLeft = NumerableBuilder.Build(leftPart);
                if (inumLeft.IsNull())
                {
                    return(null);
                }
                INumerable inumMiddle = NumerableBuilder.Build(middlePart);
                if (inumMiddle.IsNull())
                {
                    return(null);
                }
                INumerable inumRight = NumerableBuilder.Build(rightPart);
                if (inumRight.IsNull())
                {
                    return(null);
                }

                if (inumLeft is NumericConstant && inumMiddle is NumericConstant && inumRight is NumericConstant)
                {
                    return(new ClockConstant(inumLeft.ToNumber(), inumMiddle.ToNumber(), inumRight.ToNumber()));
                }

                return(new ClockNumerables(inumLeft, inumMiddle, inumRight));
            }
        }
コード例 #22
0
 public decimal ToMinute()
 {
     return(minute.ToNumber());
 }
コード例 #23
0
ファイル: DecrementBy.cs プロジェクト: nathaliefil/uroboros
 public void Run()
 {
     RuntimeVariables.GetInstance().DecrementBy(variable, value.ToNumber());
 }
コード例 #24
0
ファイル: YearNumerable.cs プロジェクト: nathaliefil/uroboros
 public decimal ToYear()
 {
     return(year.ToNumber());
 }
コード例 #25
0
 public void Run()
 {
     RuntimeVariables.GetInstance().SetElementOfTime(name, value.ToNumber(), type);
 }
コード例 #26
0
 public decimal ToSecond()
 {
     return(second.ToNumber());
 }
コード例 #27
0
ファイル: MultiplyBy.cs プロジェクト: nathaliefil/uroboros
 public void Run()
 {
     RuntimeVariables.GetInstance().MultiplyBy(variable, value.ToNumber());
 }
コード例 #28
0
 public int GetValue()
 {
     return((int)value.ToNumber());
 }
コード例 #29
0
 public override decimal ToNumber()
 {
     return(-content.ToNumber());
 }
コード例 #30
0
 public decimal ToDay()
 {
     return(day.ToNumber());
 }