Painless
A framework to ease parallelization of sequential CDCL SAT solvers
Loading...
Searching...
No Matches
ClauseBuffer Class Reference

Wrapper for boost::lockfree::queue to manage ClauseExchange objects. More...

#include <ClauseBuffer.hpp>

Collaboration diagram for ClauseBuffer:

Public Member Functions

 ClauseBuffer ()=delete
 Default Constructor deleted to enforce parameterized constructor.
 
 ClauseBuffer (size_t size)
 Constructs a ClauseBuffer with the specified size.
 
 ClauseBuffer (const ClauseBuffer &)=delete
 Copy constructor (deleted).
 
 ClauseBuffer (const ClauseBuffer &&)=delete
 Move constructor (deleted).
 
ClauseBufferoperator= (const ClauseBuffer &)=delete
 Assignment operator (deleted).
 
 ClauseBuffer (ClauseBuffer &&)=default
 Move constructor.
 
ClauseBufferoperator= (ClauseBuffer &&)=default
 Move assignment operator.
 
 ~ClauseBuffer ()
 Destructor.
 
bool addClause (ClauseExchangePtr clause)
 Adds a single clause to the buffer.
 
size_t addClauses (const std::vector< ClauseExchangePtr > &clauses)
 Adds multiple clauses to the buffer.
 
bool tryAddClauseBounded (ClauseExchangePtr clause)
 Attempts to add a single clause to the buffer using bounded push.
 
size_t tryAddClausesBounded (const std::vector< ClauseExchangePtr > &clauses)
 Attempts to add multiple clauses to the buffer using bounded push.
 
bool getClause (ClauseExchangePtr &clause)
 Retrieves a single clause from the buffer.
 
void getClauses (std::vector< ClauseExchangePtr > &clauses)
 Retrieves all available clauses from the buffer.
 
size_t size () const
 Returns the current number of clauses in the buffer.
 
void clear ()
 Clears all clauses from the buffer.
 
bool empty () const
 Checks if the buffer is empty.
 

Detailed Description

Wrapper for boost::lockfree::queue to manage ClauseExchange objects.

This class utilizes a non-fixed size boost::lockfree::queue for efficient, lock-free operations between multiple producers and consumers. It uses raw pointers internally and provides a thread-safe interface for ClauseExchangePtr.

Warning
This class is currently non-copyable.
Todo
An optimal and safe move/copy mechanism

Constructor & Destructor Documentation

◆ ClauseBuffer()

ClauseBuffer::ClauseBuffer ( size_t size)
inlineexplicit

Constructs a ClauseBuffer with the specified size.

Parameters
sizeThe initial capacity of the queue.

Member Function Documentation

◆ addClause()

bool ClauseBuffer::addClause ( ClauseExchangePtr clause)
inline

Adds a single clause to the buffer.

Parameters
clauseThe clause to add.
Returns
true if the clause was successfully added, false otherwise.

◆ addClauses()

size_t ClauseBuffer::addClauses ( const std::vector< ClauseExchangePtr > & clauses)
inline

Adds multiple clauses to the buffer.

Parameters
clausesA vector of clauses to add.
Returns
The number of clauses successfully added.

◆ empty()

bool ClauseBuffer::empty ( ) const
inline

Checks if the buffer is empty.

Returns
true if the buffer is empty, false otherwise.

◆ getClause()

bool ClauseBuffer::getClause ( ClauseExchangePtr & clause)
inline

Retrieves a single clause from the buffer.

Parameters
[out]clauseThe retrieved clause.
Returns
true if a clause was retrieved, false if the buffer was empty.

◆ getClauses()

void ClauseBuffer::getClauses ( std::vector< ClauseExchangePtr > & clauses)
inline

Retrieves all available clauses from the buffer.

Parameters
[out]clausesA vector to store the retrieved clauses.

◆ size()

size_t ClauseBuffer::size ( ) const
inline

Returns the current number of clauses in the buffer.

Returns
The number of clauses in the buffer.

◆ tryAddClauseBounded()

bool ClauseBuffer::tryAddClauseBounded ( ClauseExchangePtr clause)
inline

Attempts to add a single clause to the buffer using bounded push.

This method tries to add a clause to the buffer using Boost's bounded_push operation. If the internal memory pool of the queue is exhausted, the operation will fail.

Parameters
clauseThe clause to add to the buffer.
Returns
true if the clause was successfully added, false if the buffer is full or push failed.

◆ tryAddClausesBounded()

size_t ClauseBuffer::tryAddClausesBounded ( const std::vector< ClauseExchangePtr > & clauses)
inline

Attempts to add multiple clauses to the buffer using bounded push.

This method tries to add clauses to the buffer until either all clauses are added or a push operation fails (indicating the buffer is full).

Parameters
clausesA vector of clauses to add to the buffer.
Returns
The number of clauses successfully added to the buffer.

The documentation for this class was generated from the following file: