LCOV - code coverage report
Current view: top level - buildbot/coverage/build/src/context - cdtrail_queue.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 22 22 100.0 %
Date: 2024-10-22 11:38:46 Functions: 8 8 100.0 %
Branches: 4 12 33.3 %

           Branch data     Line data    Source code
       1                 :            : /******************************************************************************
       2                 :            :  * Top contributors (to current version):
       3                 :            :  *   Tim King, Aina Niemetz, Mathias Preiner
       4                 :            :  *
       5                 :            :  * This file is part of the cvc5 project.
       6                 :            :  *
       7                 :            :  * Copyright (c) 2009-2024 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                 :            :  * Context-dependent queue class with an explicit trail of elements
      14                 :            :  *
      15                 :            :  * The implementation is based on a combination of CDList and a CDO<size_t>
      16                 :            :  * for tracking the next element to dequeue from the list.
      17                 :            :  * The implementation is currently not full featured.
      18                 :            :  */
      19                 :            : 
      20                 :            : #include "cvc5_private.h"
      21                 :            : 
      22                 :            : #ifndef CVC5__CONTEXT__CDTRAIL_QUEUE_H
      23                 :            : #define CVC5__CONTEXT__CDTRAIL_QUEUE_H
      24                 :            : 
      25                 :            : #include "context/cdlist.h"
      26                 :            : #include "context/cdo.h"
      27                 :            : 
      28                 :            : namespace cvc5::context {
      29                 :            : 
      30                 :            : class Context;
      31                 :            : 
      32                 :            : template <class T>
      33                 :            : class CDTrailQueue {
      34                 :            : private:
      35                 :            : 
      36                 :            :   /** List of elements in the queue. */
      37                 :            :   CDList<T> d_list;
      38                 :            : 
      39                 :            :   /** Points to the next element in the current context to dequeue. */
      40                 :            :   CDO<size_t> d_iter;
      41                 :            : 
      42                 :            : 
      43                 :            : public:
      44                 :            : 
      45                 :            :   /** Creates a new CDTrailQueue associated with the current context. */
      46                 :      49276 :   CDTrailQueue(Context* context)
      47                 :            :     : d_list(context),
      48                 :      49276 :       d_iter(context, 0)
      49                 :      49276 :   {}
      50                 :            : 
      51                 :            :   /** Returns true if the queue is empty in the current context. */
      52                 :    8899050 :   bool empty() const{
      53                 :    8899050 :     return d_iter >= d_list.size();
      54                 :            :   }
      55                 :            : 
      56                 :            :   /**
      57                 :            :    * Enqueues an element in the current context.
      58                 :            :    * Returns its index in the queue.
      59                 :            :    */
      60                 :    1156790 :   size_t enqueue(const T& data){
      61                 :    1156790 :     size_t res = d_list.size();
      62                 :    1156790 :     d_list.push_back(data);
      63                 :    1156790 :     return res;
      64                 :            :   }
      65                 :            : 
      66                 :    1098740 :   size_t frontIndex() const{
      67                 :    1098740 :     return d_iter;
      68                 :            :   }
      69                 :            : 
      70                 :    1098740 :   const T& front() const{
      71                 :    1098740 :     return d_list[frontIndex()];
      72                 :            :   }
      73                 :            : 
      74                 :            :   /** Moves the iterator for the queue forward. */
      75                 :    1098740 :   void dequeue(){
      76 [ -  + ][ -  + ]:    1098740 :     Assert(!empty()) << "Attempting to queue from an empty queue.";
                 [ -  - ]
      77                 :    1098740 :     d_iter = d_iter + 1;
      78                 :    1098740 :   }
      79                 :            : 
      80                 :      38502 :   const T& operator[](size_t index) const{
      81 [ -  + ][ -  + ]:      38502 :     Assert(index < d_list.size());
                 [ -  - ]
      82                 :      38502 :     return d_list[index];
      83                 :            :   }
      84                 :            : 
      85                 :    1365790 :   size_t size() const{
      86                 :    1365790 :     return d_list.size();
      87                 :            :   }
      88                 :            : 
      89                 :            : };/* class CDTrailQueue<> */
      90                 :            : 
      91                 :            : }  // namespace cvc5::context
      92                 :            : 
      93                 :            : #endif /* CVC5__CONTEXT__CDTRAIL_QUEUE_H */

Generated by: LCOV version 1.14