Пример #1
0
        private static void RunStatement(ref CaseContext ctx, QueueUpdateStatement stmt)
        {
            if (!(ctx.Machine is IUpdatableMachine updatableMachine))
            {
                throw new LogicEngineException("Update queueing is not supported by the machine", stmt);
            }

            updatableMachine.QueueUpdate();
        }
Пример #2
0
        private static BitsValue DoOperator(ref CaseContext ctx, OperatorExpression op)
        {
            if (op.Operator == Operator.Assign)
            {
                return(DoAssignment(ref ctx, op));
            }

            var left  = GetValue(ref ctx, op.Left);
            var right = GetValue(ref ctx, op.Right);

            switch (op.Operator)
            {
            case Operator.Add:
                return(left + right);

            case Operator.Subtract:
                return(left - right);

            case Operator.Multiply:
                return(left * right);

            case Operator.Divide:
                return(left / right);

            case Operator.Modulo:
                return(left.Number % right.Number);

            case Operator.Equals:
                return(left == right);

            case Operator.NotEquals:
                return(left != right);

            case Operator.Greater:
                return(left > right);

            case Operator.GreaterOrEqual:
                return(left >= right);

            case Operator.Lesser:
                return(left < right);

            case Operator.LesserOrEqual:
                return(left <= right);

            case Operator.And:
                return(new BitsValue(left & right, Math.Min(left.Length, right.Length)));

            case Operator.Or:
                return(new BitsValue(left | right, Math.Max(left.Length, right.Length)));

            case Operator.Xor:
                return(new BitsValue(left ^ right, Math.Max(left.Length, right.Length)));
            }

            throw new LogicEngineException();
        }
Пример #3
0
        private static void GetRange(ref CaseContext ctx, IndexerExpression indexer, int length, out int start, out int end)
        {
            //start = (int)GetValue(ref ctx, indexer.Index).Number;

            //end = indexer.FromEnd
            //    ? indexer.End == null
            //        ? start + 1
            //        : (int)GetValue(ref ctx, indexer.End).Number
            //    : length;
            throw null;
        }
Пример #4
0
        private static void RunStatement(ref CaseContext ctx, ForStatement stmt)
        {
            var from = GetValue(ref ctx, stmt.From);
            var to   = GetValue(ref ctx, stmt.To);

            for (ulong i = from.Number; i < to.Number; i++)
            {
                ctx.Set(stmt.VarName, new BitsValue(i, to.Length));
                RunStatements(ref ctx, stmt.Body);
            }
        }
Пример #5
0
        private static BitsValue DoIndexerExpression(ref CaseContext ctx, IndexerExpression indexer)
        {
            var value = GetValue(ref ctx, indexer.Operand);

            GetRange(ref ctx, indexer, value.Length, out var start, out var end);

            Span <bool> bits = stackalloc bool[end - start];

            value.FillBits(bits, start, end);

            return(new BitsValue(bits));
        }
Пример #6
0
 public Case GetCaseById(int id)
 {
     using (var context = new CaseContext())
     {
         var cases = context.Cases.Find(id);
         if (cases == null)
         {
             throw new KeyNotFoundException();
         }
         return(cases);
     }
 }
Пример #7
0
        private static BitsValue DoUnaryOperator(ref CaseContext ctx, UnaryOperatorExpression op)
        {
            var value = GetValue(ref ctx, op.Operand);

            switch (op.Operator)
            {
            case Operator.Not:
                return(value.Negated);
            }

            throw new LogicEngineException();
        }
Пример #8
0
        private static void RunStatement(ref CaseContext ctx, IfStatement stmt)
        {
            var conditionValue = GetValue(ref ctx, stmt.Condition);

            if (IsTruthy(conditionValue))
            {
                RunStatements(ref ctx, stmt.Body);
            }
            else if (stmt.Else != null)
            {
                RunStatements(ref ctx, stmt.Else);
            }
        }
Пример #9
0
        public void FindAll()
        {
            var dbContext = SetUpThreeCases("test-find-all");

            using (var context = new CaseContext(dbContext))
            {
                var repository = new CaseRepository(context);

                var result = repository.FindAll();

                Assert.AreEqual(3, result.Count);
            }
        }
Пример #10
0
 public override void ExitCase([NotNull] CaseContext context)
 {
     base.ExitCase(context);
     Log("ExitCase");
     if (phase == Phase.Building)
     {
         symbolTableCreator.ExitCase(context);
     }
     else
     {
         symbolTableTraverser.ExitCase(context);
         semanticErrorChecker.ExitCase(context);
     }
 }
Пример #11
0
        public static void RunScript(Script script, IMachine machine, bool isFirstUpdate = false)
        {
            int len = script.TopLevelNodes.Count;

            for (int i = 0; i < len; i++)
            {
                var node = script.TopLevelNodes[i];

                if (node is Case @case)
                {
                    var ctx = new CaseContext(machine, script);
                    UpdateCase(ref ctx, @case, isFirstUpdate);
                }
            }
        }
Пример #12
0
        public override object VisitCase([NotNull] CaseContext context)
        {
            string result = "...";

            switch (context.op.Type)
            {
            case UPPER:
                result = Visit(context.expression()).ToString().ToUpper();
                break;

            case LOWER:
                result = Visit(context.expression()).ToString().ToLower();
                break;
            }

            return(result);
        }
Пример #13
0
 public HttpStatusCode SaveCase(Case cases)
 {
     using (var context = new CaseContext())
     {
         try
         {
             context.Cases.Add(cases);
             context.SaveChanges();
             return(HttpStatusCode.Created);
         }
         catch (Exception ex)
         {
             Console.WriteLine(ex.Message);
             return(HttpStatusCode.BadRequest);
         }
     }
 }
Пример #14
0
 public HttpStatusCode DeleteCase(int id)
 {
     using (var context = new CaseContext())
     {
         try
         {
             var cases = context.Cases.Find(id);
             context.Cases.Remove(cases);
             context.SaveChanges();
             return(HttpStatusCode.OK);
         }
         catch (Exception ex)
         {
             return(HttpStatusCode.NotFound);
         }
     }
 }
        public override ASTN VisitCase([NotNull] CaseContext context)
        {
            CaseNode node = new CaseNode(context)
            {
                CaseBase = VisitExpr(context.case_expr) as ExprNode
            };

            var list = context.expr().Skip(1);
            var zip  = list.Zip(context.formal(), (x, y) => (x, y));

            foreach (var(expr, formal) in zip)
            {
                node.Branchs.Add((VisitFormal(formal) as FormalNode, VisitExpr(expr) as ExprNode));
            }

            return(node);
        }
Пример #16
0
        private static BitsValue DoFunctionCall(ref CaseContext ctx, FunctionCallExpression funcCall)
        {
            Span <BitsValue> values = stackalloc BitsValue[funcCall.Arguments.Count];

            for (int i = 0; i < funcCall.Arguments.Count; i++)
            {
                values[i] = GetValue(ref ctx, funcCall.Arguments[i]);
            }

            switch (funcCall.Name)
            {
            case "and":
                if (values.Length != 1)
                {
                    throw new LogicEngineException("Expected 1 argument on call to 'add'", funcCall);
                }
                return(values[0].AreAllBitsSet);

            case "or":
                if (values.Length != 1)
                {
                    throw new LogicEngineException("Expected 1 argument on call to 'or'", funcCall);
                }
                return(values[0].IsAnyBitSet);

            case "sum":
                if (values.Length != 1)
                {
                    throw new LogicEngineException("Expected 1 argument on call to 'sum'", funcCall);
                }
                return(values[0].PopulationCount);

            case "trunc" when values.Length == 2:
                return(new BitsValue(values[0], (int)values[1].Number));

            case "trunc" when values.Length == 1:
                return(values[0].Truncated);

            case "trunc":
                throw new LogicEngineException($"Expected 1 or 2 arguments on call to 'trunc', got {values.Length}", funcCall);

            default:
                throw new LogicEngineException($"Unknown function '{funcCall.Name}'", funcCall);
            }
        }
Пример #17
0
        private void DataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count == 0)
            {
                return;
            }

            var row    = this.dataGridView1.SelectedRows[0];
            int caseId = (int)row.Cells[1].Value;

            //this.label5.Text = caseId.ToString();
            //   this.label7.Text = row.Cells[1]?.Value?.ToString() ?? string.Empty;

            using (var context = new CaseContext())
            {
                var proofs = context.Proofs.AsNoTracking().Where(p => p.CaseID == caseId).ToList();
                dataGridView2.DataSource = proofs;
            }
        }
Пример #18
0
        public void Delete()
        {
            var dbContext = SetUpThreeCases("test-delete");

            using (var context = new CaseContext(dbContext))
            {
                var repository = new CaseRepository(context);

                var before = repository.FindAll();

                Assert.AreEqual(3, before.Count);

                repository.Delete("test docket number two");

                var after = repository.FindAll();

                Assert.AreEqual(2, after.Count);
            }
        }
Пример #19
0
        public void FindByDocketNumber()
        {
            var dbContext = SetUpThreeCases("test-find-by-docket-number");

            using (var context = new CaseContext(dbContext))
            {
                var repository = new CaseRepository(context);

                var result = repository.FindByDocketNumber("test docket number two");

                Assert.AreEqual(1, result.Count);

                Assert.AreEqual("2", result[0].Id);
                Assert.AreEqual("test docket number two", result[0].DocketNumber);
                Assert.AreEqual("test title two", result[0].Title);
                Assert.AreEqual("test description two", result[0].Description);
                Assert.AreEqual(_openDateTwo, result[0].OpenDate);
            }
        }
Пример #20
0
        private void DataGridView1_SelectionChanged(object sender, EventArgs e)//当下一次点击和行和上一次点击的行不一致时,会触发该事件(如果多次点击同一行,则不触发)
        {
            AppConfig ac = AppConfig.getAppConfig();

            if (dataGridView1.SelectedRows.Count == 0)
            {
                //Console.WriteLine("即将被返回");
                ac.loadDone = 1;
                return;
            }
            if (ac.loadDone == 1)
            {
                //Console.WriteLine("加载完成了!");
                var row = this.dataGridView1.SelectedRows[0];
                //Console.WriteLine("下标:" + row.Index);
                int indx = row.Index;
                Program.m_mainform.g_ajName = (string)dataGridView1.SelectedRows[0].Cells[2].Value;
                int caseId = (int)ac.aList[indx];
                ac.caseId_selected_row = caseId;
                using (var context = new CaseContext())
                {
                    var proofs = context.Proofs.AsNoTracking().Where(p => p.CaseID == caseId).ToList();
                    dataGridView2.DataSource = proofs;
                    var dgw = this.dataGridView2;
                    int len = dgw.Rows.Count;
                    ac.aEvidenceList.Clear();//清除状态
                    for (int i = 0; i < len; i++)
                    {
                        var cell_EvidenceId = dgw.Rows[i].Cells[1];
                        ac.aEvidenceList.Add(cell_EvidenceId.Value);//首先向aEvidenceList中进行添加
                        cell_EvidenceId.Value = i + 1;
                        //Console.WriteLine(ac.aEvidenceList[i]);
                    }
                }
                //为了完成案件的预览展示
                label5.Text             = Convert.ToString(dataGridView1.Rows[row.Index].Cells[2].Value);
                label7.Text             = Convert.ToString(dataGridView1.Rows[row.Index].Cells[4].Value);
                CheckTextLabel.Text     = Convert.ToString(dataGridView1.Rows[row.Index].Cells[6].Value);
                EquipTextLabel.Text     = Convert.ToString(dataGridView1.Rows[row.Index].Cells[9].Value);
                CheckTimeTextLabel.Text = Convert.ToString(dataGridView1.Rows[row.Index].Cells[11].Value);
            }
        }
Пример #21
0
        private void Button3_Click(object sender, EventArgs e)
        {
            Program.m_mainform.AddNewGjalZs();

            using (var context = new CaseContext())
            {
                Case  @case = context.Cases.Find(AppConfig.getAppConfig().caseId_selected_working);
                Proof proof = new Proof()
                {
                    Case = @case,
                };
                @case.Proofs.Add(proof);

                context.SaveChanges();
            }

            this.Close();
            AppConfig.AppConfigAddAdvinceClear();
            AppContext.setInstanceNull();
        }
Пример #22
0
        private static void RunStatement(ref CaseContext ctx, Statement stmt)
        {
            switch (stmt)
            {
            case ExpressionStatement exprStmt:
                GetValue(ref ctx, exprStmt.Expression);
                break;

            case IfStatement @if:
                RunStatement(ref ctx, @if);
                break;

            case QueueUpdateStatement queueStmt:
                RunStatement(ref ctx, queueStmt);
                break;

            case ForStatement forStatement:
                RunStatement(ref ctx, forStatement);
                break;
            }
        }
Пример #23
0
        private DbContextOptions <CaseContext> SetUpThreeCases(string databaseName)
        {
            var dbContext = new DbContextOptionsBuilder <CaseContext>()
                            .UseInMemoryDatabase(databaseName: databaseName)
                            .Options;

            using (var context = new CaseContext(dbContext))
            {
                var repository = new CaseRepository(context);

                repository.Save(new Case
                {
                    Id           = "1",
                    DocketNumber = "test docket number one",
                    Title        = "test title one",
                    Description  = "test description one",
                    OpenDate     = _openDateOne
                });

                repository.Save(new Case
                {
                    Id           = "2",
                    DocketNumber = "test docket number two",
                    Title        = "test title two",
                    Description  = "test description two",
                    OpenDate     = _openDateTwo
                });

                repository.Save(new Case
                {
                    Id           = "3",
                    DocketNumber = "test docket number three",
                    Title        = "test title three",
                    Description  = "test description three",
                    OpenDate     = _openDateThree
                });
            }

            return(dbContext);
        }
Пример #24
0
 private void button10_Click(object sender, EventArgs e)
 {
     if (ProofByNameCheckBox.Checked)
     {
         if (textBox3.Text == null)
         {
             MessageBox.Show("证据名称不能为空", "提示");
             return;
         }
         else
         {
             using (var context = new CaseContext())
             {
                 int CaseId = int.Parse(dataGridView1.CurrentRow.Cells[1].Value.ToString());
                 Console.WriteLine(CaseId);
                 var proofs = context.Proofs
                              .Where(p => p.ProofName.Contains(textBox3.Text.ToString()) && p.CaseID == CaseId).ToList();
                 this.dataGridView2.DataSource = proofs;
             }
         }
     }
 }
Пример #25
0
 public HttpStatusCode UpdateCase(Case cases)
 {
     using (var context = new CaseContext())
     {
         try
         {
             var original = context.Cases.Find(cases.ID);
             if (original != null)
             {
                 original.attachment = cases.attachment;
                 original.kind       = cases.kind;
             }
             context.SaveChanges();
             return(System.Net.HttpStatusCode.OK);
         }
         catch (Exception ex)
         {
             Console.WriteLine(ex.Message);
             return(System.Net.HttpStatusCode.NotFound);
         }
     }
 }
Пример #26
0
        public void Save()
        {
            var dbContext = SetUpThreeCases("test-save");

            using (var context = new CaseContext(dbContext))
            {
                var repository = new CaseRepository(context);

                repository.Save(new Case
                {
                    Id           = "4",
                    DocketNumber = "test docket number four",
                    Title        = "test title four",
                    Description  = "test description four",
                    OpenDate     = DateTime.Now
                });

                var result = repository.FindAll();

                Assert.AreEqual(4, result.Count);
            }
        }
Пример #27
0
        private void Button2_Click(object sender, EventArgs e)
        {
            //新建案件
            FormGjglNewAj form = new FormGjglNewAj();
            string        s    = form.ShowDialog().ToString();

            if (s == "Cancel")
            {
                return;
            }

            Case @case = form.Case;

            using (var context = new CaseContext())
            {
                context.Cases.Add(@case);
                context.SaveChanges();
                AppContext.CaseID = @case.CaseId;
            }
            Program.m_mainform.AddNewGjalAj();
            // MessageBox.Show("案件添加成功!");
        }
Пример #28
0
        private static BitsValue DoListExpression(ref CaseContext ctx, ListExpression list)
        {
            ulong n = 0;

            int len = list.Expressions.Length;

            for (int i = 0; i < len; i++)
            {
                var value = GetValue(ref ctx, list.Expressions[i]);

                if (!value.IsSingleBit)
                {
                    throw new LogicEngineException("List expressions can only contain single-bit values", list.Expressions[i]);
                }

                if (value.IsOne)
                {
                    n |= 1UL << (len - 1 - i);
                }
            }

            return(new BitsValue(n, len));
        }
Пример #29
0
        private void button1_Click(object sender, EventArgs e)
        {
            this.Proof.ProofName      = textBox1.Text;
            this.Proof.ProofSerialNum = textBox2.Text;
            this.Proof.PhoneNum       = textBox6.Text;
            this.Proof.phoneNum2      = textBox3.Text;
            this.Proof.Holder         = textBox4.Text;
            this.Proof.ProofType      = comboBox2.Text;
            this.Proof.note           = textBox8.Text;
            //向数据库中写回更改之后的数据
            AppConfig ac = AppConfig.getAppConfig();

            using (CaseContext caseContext = new CaseContext())
            {
                var proofInfo = this.Proof;
                var entry     = caseContext.Entry(proofInfo);
                caseContext.Set <Proof>().Attach(entry.Entity);
                entry.State = System.Data.Entity.EntityState.Modified;
                caseContext.SaveChanges();
            }
            Program.m_mainform.AddNewGjalAj();
            MessageBox.Show("编辑证据成功!");
            this.Close();
        }
Пример #30
0
        private void FormGjglZzxxEdit_Load(object sender, EventArgs e)
        {
            AppConfig ac = AppConfig.getAppConfig();

            using (CaseContext caseContext = new CaseContext())
            {
                Proof proofInfo = caseContext.Proofs.FirstOrDefault(p => p.ProofId == ac.proofId_selected);
                if (proofInfo == null)
                {
                    MessageBox.Show("该证据不存在,无法继续进行编辑!");
                    this.Close();
                    return;
                }
                this.Proof = proofInfo;
                //对要编辑的页面进行初始化,这是页面上的数据是从数据库里面取出来的
                textBox1.Text  = this.Proof.ProofName;
                textBox2.Text  = this.Proof.ProofSerialNum;
                textBox6.Text  = this.Proof.PhoneNum;
                textBox3.Text  = this.Proof.phoneNum2;
                textBox4.Text  = this.Proof.Holder;
                comboBox2.Text = this.Proof.ProofType;
                textBox8.Text  = this.Proof.note;
            }
        }