diff options
author | Andres Noetzli <andres.noetzli@gmail.com> | 2021-09-02 05:26:28 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-02 12:26:28 +0000 |
commit | ef80ba053b022ec624ee93a29a4dbc674226b3d4 (patch) | |
tree | 2434638b300b218789abeced720c8f31f5e733d6 /src/context | |
parent | b11a6d57ded753885e272ce69612ff15a591c592 (diff) |
Remove unused `Backtracker` (#7115)
backtrackable.h was defining a datastructure Backtracker, which was
a member in ArrayInfo and Info but it was not doing anything.
Diffstat (limited to 'src/context')
-rw-r--r-- | src/context/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/context/backtrackable.h | 221 |
2 files changed, 0 insertions, 222 deletions
diff --git a/src/context/CMakeLists.txt b/src/context/CMakeLists.txt index 73166462c..6cc066235 100644 --- a/src/context/CMakeLists.txt +++ b/src/context/CMakeLists.txt @@ -14,7 +14,6 @@ ## set(LIBCONTEXT_SOURCES - backtrackable.h cddense_set.h cdhashmap.h cdhashmap_forward.h diff --git a/src/context/backtrackable.h b/src/context/backtrackable.h deleted file mode 100644 index 28654dbdf..000000000 --- a/src/context/backtrackable.h +++ /dev/null @@ -1,221 +0,0 @@ -/****************************************************************************** - * Top contributors (to current version): - * Morgan Deters, Mathias Preiner - * - * This file is part of the cvc5 project. - * - * Copyright (c) 2009-2021 by the authors listed in the file AUTHORS - * in the top-level source directory and their institutional affiliations. - * All rights reserved. See the file COPYING in the top-level source - * directory for licensing information. - * **************************************************************************** - * - * Contains a backtrackable list. - */ - -#include "cvc5_private.h" - -#ifndef CVC5__UTIL__BACKTRACKABLE_H -#define CVC5__UTIL__BACKTRACKABLE_H - -#include <cstdlib> -#include <vector> -#include "context/cdo.h" - -namespace cvc5 { - -template <class T> class List; -template <class T> class List_iterator; -template <class T> class Backtracker; - -template <class T> -class ListNode { -private: - T data; - ListNode<T>* next; - - bool empty; - ListNode(const T& t, ListNode<T>* n, bool e = false) : data(t), next(n), empty(e) {} - ~ListNode() { - // maybe set to NULL - delete next; - } - - friend class List<T>; - friend class List_iterator<T>; -};/* class ListNode<T> */ - -template <class T> -class List_iterator : public std::iterator <std::forward_iterator_tag, T> { - friend class List<T>; - -public: - const T& operator*(); - List_iterator<T>& operator++(); - List_iterator<T> operator++(int); - bool operator!=(const List_iterator<T> & other) const; - -private: - const ListNode<T>* pointee; - List_iterator(const ListNode<T>* p) : pointee(p) {} - -};/* class List_iterator<T> */ - -template <class T> -const T& List_iterator<T>::operator*() { - return pointee->data; -} - -template <class T> -List_iterator<T>& List_iterator<T>::operator++() { - Assert(pointee != NULL); - pointee = pointee->next; - while(pointee != NULL && pointee->empty ) { - pointee = pointee->next; - } - return *this; -} - -template <class T> -List_iterator<T> List_iterator<T>::operator++(int) { - List_iterator<T> it = *this; - ++*this; - return it; -} - -template <class T> -bool List_iterator<T>::operator!=(const List_iterator<T>& other) const { - return (this->pointee != other.pointee); -} - -// !! for the backtracking to work the lists must be allocated on the heap -// therefore the hashmap from TNode to List<TNode> should store pointers! -template <class T> -class List { - ListNode<T>* head; - ListNode<T>* tail; - ListNode<T>* ptr_to_head; - bool uninitialized; - Backtracker<T>* bck; - List (const List&) {} -public: - List(Backtracker<T>* b) : ptr_to_head(NULL), uninitialized(true), bck(b) { - head = tail = (ListNode<T>*)calloc(1,sizeof(ListNode<T>)); - head->next = NULL; - head->empty = true; - } - ~List() {delete head;} - bool empty() { - bck->checkConsistency(); - return head == NULL; - } - void append(const T& d); - //typedef List_iterator<T> iterator; - typedef List_iterator<T> const_iterator; - - const_iterator begin() { - bck->checkConsistency(); - if(head->empty) { - ListNode<T>* temp = head; - // if the head is empty return the first non-empty element or NULL - while(temp != NULL && temp->empty ) { - temp = temp->next; - } - return List_iterator<T>(temp); - } - return List_iterator<T>(head); - } - - const_iterator end() { - bck->checkConsistency(); - return List_iterator<T>(NULL); - } - void concat(List<T>* other); - void unconcat(List<T>* other); -};/* class List */ - -template <class T> -void List<T>::append (const T& d) { - bck->checkConsistency(); - - if(uninitialized) { - new(head)ListNode<T> (d, head->next); - //head->data = d; - head->empty = false; - //Assert(tail == head); FIXME: do I need this because this list might be empty but append to another one - uninitialized = false; - - } else { - ListNode<T>* new_node = new ListNode<T>(d, head); - head = new_node; - } - - if(ptr_to_head != NULL) { - ptr_to_head->next = head; - } -} - -template <class T> -void List<T>::concat (List<T>* other) { - bck->checkConsistency(); - bck->notifyConcat(this, other); - Assert(tail->next == NULL); - tail->next = other->head; - Assert(other->ptr_to_head == NULL); - other->ptr_to_head = tail; - tail = other->tail; -} - -template <class T> -void List<T>::unconcat(List<T>* other) { - // we do not need to check consistency since this is only called by the - // Backtracker when we are inconsistent - Assert(other->ptr_to_head != NULL); - other->ptr_to_head->next = NULL; - tail = other->ptr_to_head; - other->ptr_to_head = NULL; -} - -/* Backtrackable Table */ - -template <class T> -class Backtracker { - friend class List<T>; - std::vector<std::pair<List<T>*,List<T>*> > undo_stack; - - int curr_level; - context::CDO<int> pop_level; - - void checkConsistency(); - void notifyConcat(List<T>* a, List<T>* b); -public: - Backtracker(context::Context* c) : undo_stack(), curr_level(0), pop_level(c, 0) {} - ~Backtracker() {} - -};/* class Backtrackable */ - -template <class T> void Backtracker<T>::notifyConcat(List<T>* a, List<T>* b) { - curr_level++; - pop_level.set(pop_level.get()+1); - undo_stack.push_back( std::make_pair(a, b)); -} - -template <class T> void Backtracker<T>::checkConsistency() { - if( curr_level == pop_level || pop_level == -1) { - return; - } - Assert(curr_level > pop_level); - - while (curr_level > pop_level) { - curr_level--; - List<T>* l1 = undo_stack[curr_level].first; - List<T>* l2 = undo_stack[curr_level].second; - l1->unconcat(l2); - undo_stack.pop_back(); - } - Assert(curr_level == pop_level); -} - -} // namespace cvc5 - -#endif /* CVC5__UTIL__BACKTRACKABLE_H */ |