public static int OJCompareTo(this object obj1, OJContext context, object obj2) { obj1 = obj1.OJGetValue(context); obj2 = obj2.OJGetValue(context); if (obj1 == obj2) { return(0); } if (obj1 is IComparable cmpValue1 && obj2 is IComparable cmpValue2) { try { return(cmpValue1.CompareTo(cmpValue2)); } catch (Exception) { throw new RuntimeException("比较操作作用于两个不同类型的元素了!"); } } if (obj1.GetType() == obj2.GetType()) { return(1); } throw new RuntimeException("比较操作作用于不能进行比较的元素了!"); }
public TestCaseListProvider(Workspace workspace, OJContext context, int problemId, bool isSample) { _workspace = workspace; _context = context; _problemId = problemId; _isSample = isSample; }
public ProblemProvider(Workspace workspace, OJContext context, Problem problem) { _workspace = workspace; _context = context; _problem = problem; Samples = new TestCaseListProvider(_workspace, _context, _problem.Id, true); Tests = new TestCaseListProvider(_workspace, _context, _problem.Id, false); }
public static object OJGetValue(this object obj, OJContext context) { if (obj is Block block) { obj = block.GetValue(); } while (obj is IOJMethod method) { obj = method.Invoke(context); } return(obj); }
public Workspace(OJContext context, WorkspaceStartup startup) { _context = context; FileStoreRoot = startup.FileStoreRoot; TestCaseStoreRoot = Path.Join(FileStoreRoot, PD_Tests); SubmissionStoreRoot = Path.Join(FileStoreRoot, PD_Submissions); Problems = new ProblemListProvider(this, _context); Submissions = new SubmissionListProvider(this, _context); Users = new UserListProvider(this, _context); Roles = new RoleListProvider(this, _context); Statistics = new StatisticProvider(this, _context); }
public object Invoke(OJContext context, params object[] args) { if (token.type == TokenType.Sub) { int value = obj.OJToInt(context); return(-value); } else if (token.type == TokenType.Not) { bool boolValue = obj.OJToBool(context); return(!boolValue); } return(null); }
/// <summary> /// stmt当作oj函数调用 /// 当stmt是映射时,需要提供args参数 /// </summary> /// <param name="context"></param> /// <param name="args"></param> /// <returns></returns> public object Invoke(OJContext context, params object[] args) { if (isRemaped) { if (args.Length != this.args.Count) { throw new RuntimeException($"{Name}参数个数不匹配:需要{this.args.Count}个 提供了{args.Length}个"); } for (int i = 0; i < args.Length; i++) { this.args[i].SetValue(args[i]); } } return(method.Invoke(context, this.args.ToArray())); }
public object Invoke(OJContext context, params object[] args) { //localVar.Clear(); if (FinalType == FinalReturnType.OJMethod) { return(method.Invoke(context)); } object returnValue = null; foreach (var stmt in stmts) { returnValue = stmt.Invoke(context, args); } return(returnValue); }
public static bool OJToBool(this object obj, OJContext context) { obj = obj.OJGetValue(context); if (obj is bool boolValue) { return(boolValue); } if (obj is int intValue) { if (intValue == 0) { return(false); } return(true); } return(false); }
public static int OJToInt(this object obj, OJContext context) { obj = obj.OJGetValue(context); if (obj is int intValue) { return(intValue); } if (obj is bool boolValue) { if (boolValue) { return(1); } return(0); } return(0); }
public StatisticProvider(Workspace workspace, OJContext context) { _workspace = workspace; _context = context; }
public UserProvider(Workspace workspace, OJContext context, User user) { _workspace = workspace; _context = context; _user = user; }
public object Invoke(OJContext context, params object[] args) { switch (token.type) { case TokenType.Add: { var leftValue = left.OJToInt(context); var rightValue = right.OJToInt(context); return(leftValue + rightValue); } case TokenType.Sub: { var leftValue = left.OJToInt(context); var rightValue = right.OJToInt(context); return(leftValue - rightValue); } case TokenType.Mul: { var leftValue = left.OJToInt(context); var rightValue = right.OJToInt(context); return(leftValue * rightValue); } case TokenType.Div: { var leftValue = left.OJToInt(context); var rightValue = right.OJToInt(context); if (rightValue == 0) { throw new RuntimeException("0不能当作除数"); } return(leftValue / rightValue); } case TokenType.And: { var leftValue = left.OJToBool(context); if (!leftValue) { return(false); } return(right.OJToBool(context)); } case TokenType.Or: { var leftValue = left.OJToBool(context); if (leftValue) { return(true); } return(right.OJToBool(context)); } case TokenType.Cmp: { int cmp = left.OJCompareTo(context, right); if (cmp == 0) { if (token.value == "==" || token.value == "<=" || token.value == ">=") { return(true); } return(false); } else if (cmp > 0) { if (token.value == ">" || token.value == ">=" || token.value == "!=") { return(true); } return(false); } else // if (cmp < 0) { if (token.value == "<" || token.value == "<=" || token.value == "!=") { return(true); } return(false); } } } return(null); }
public SubmissionListProvider(Workspace workspace, OJContext context) { _workspace = workspace; _context = context; }
public RoleProvider(Workspace workspace, OJContext context, Role role) { _workspace = workspace; _context = context; _role = role; }
public ProblemListProvider(Workspace workspace, OJContext context) { _workspace = workspace; _context = context; }
public TestCaseProvider(Workspace workspace, OJContext context, TestCase testcase) { _workspace = workspace; _context = context; _testcase = testcase; }
public SubmissionProvider(Workspace workspace, OJContext context, Submission submission) { _workspace = workspace; _context = context; _submission = submission; }