GCC Code Coverage Report
Directory: . Exec Total Coverage
File: src/theory/quantifiers/ematching/trigger_trie.cpp Lines: 29 29 100.0 %
Date: 2021-05-22 Branches: 25 42 59.5 %

Line Exec Source
1
/******************************************************************************
2
 * Top contributors (to current version):
3
 *   Andrew Reynolds, Morgan Deters, Tim King
4
 *
5
 * This file is part of the cvc5 project.
6
 *
7
 * Copyright (c) 2009-2021 by the authors listed in the file AUTHORS
8
 * in the top-level source directory and their institutional affiliations.
9
 * All rights reserved.  See the file COPYING in the top-level source
10
 * directory for licensing information.
11
 * ****************************************************************************
12
 *
13
 * Implementation of trigger trie class.
14
 */
15
16
#include "theory/quantifiers/ematching/trigger_trie.h"
17
18
namespace cvc5 {
19
namespace theory {
20
namespace quantifiers {
21
namespace inst {
22
23
24984
TriggerTrie::TriggerTrie() {}
24
25
49968
TriggerTrie::~TriggerTrie()
26
{
27
42245
  for (size_t i = 0, ntriggers = d_tr.size(); i < ntriggers; i++)
28
  {
29
17261
    delete d_tr[i];
30
  }
31
24984
}
32
33
13265
inst::Trigger* TriggerTrie::getTrigger(std::vector<Node>& nodes)
34
{
35
26530
  std::vector<Node> temp;
36
13265
  temp.insert(temp.begin(), nodes.begin(), nodes.end());
37
13265
  std::sort(temp.begin(), temp.end());
38
13265
  TriggerTrie* tt = this;
39
13343
  for (const Node& n : temp)
40
  {
41
13306
    std::map<TNode, TriggerTrie>::iterator itt = tt->d_children.find(n);
42
13306
    if (itt == tt->d_children.end())
43
    {
44
13228
      return nullptr;
45
    }
46
    else
47
    {
48
78
      tt = &(itt->second);
49
    }
50
  }
51
37
  return tt->d_tr.empty() ? nullptr : tt->d_tr[0];
52
}
53
54
17261
void TriggerTrie::addTrigger(std::vector<Node>& nodes, inst::Trigger* t)
55
{
56
34522
  std::vector<Node> temp(nodes.begin(), nodes.end());
57
17261
  std::sort(temp.begin(), temp.end());
58
17261
  TriggerTrie* tt = this;
59
36107
  for (const Node& n : temp)
60
  {
61
18846
    std::map<TNode, TriggerTrie>::iterator itt = tt->d_children.find(n);
62
18846
    if (itt == tt->d_children.end())
63
    {
64
18826
      TriggerTrie* ttn = &tt->d_children[n];
65
18826
      tt = ttn;
66
    }
67
    else
68
    {
69
20
      tt = &(itt->second);
70
    }
71
  }
72
17261
  tt->d_tr.push_back(t);
73
17261
}
74
75
}  // namespace inst
76
}  // namespace quantifiers
77
}  // namespace theory
78
28194
}  // namespace cvc5