Browse Source

changing pointer to std::shared_ptr

parsers return some kind of object and it is not clear who owns this object,
i.e. who is responsible to delete it.
tempestpy_adaptions
gereon 12 years ago
parent
commit
4095e87282
  1. 19
      src/models/Dtmc.h
  2. 7
      src/models/GraphTransitions.h
  3. 2
      src/parser/readLabFile.cpp
  4. 6
      src/parser/readLabFile.h
  5. 2
      src/parser/readTraFile.cpp
  6. 6
      src/parser/readTraFile.h
  7. 2
      src/utility/ioUtility.cpp
  8. 7
      test/parser/read_lab_file_test.cpp
  9. 4
      test/parser/read_tra_file_test.cpp

19
src/models/Dtmc.h

@ -9,6 +9,7 @@
#define DTMC_H_
#include <ostream>
#include <memory>
#include "AtomicPropositionsLabeling.h"
#include "GraphTransitions.h"
@ -35,10 +36,8 @@ public:
* @param stateLabeling The labeling that assigns a set of atomic
* propositions to each state.
*/
Dtmc(mrmc::storage::SquareSparseMatrix<T>* probabilityMatrix, mrmc::models::AtomicPropositionsLabeling* stateLabeling)
: backwardTransitions(nullptr) {
this->probabilityMatrix = probabilityMatrix;
this->stateLabeling = stateLabeling;
Dtmc(std::shared_ptr<mrmc::storage::SquareSparseMatrix<T>> probabilityMatrix, std::shared_ptr<mrmc::models::AtomicPropositionsLabeling> stateLabeling)
: probabilityMatrix(probabilityMatrix), stateLabeling(stateLabeling), backwardTransitions(nullptr) {
}
//! Copy Constructor
@ -58,12 +57,6 @@ public:
* Destructor. Frees the matrix and labeling associated with this DTMC.
*/
~Dtmc() {
if (this->probabilityMatrix != nullptr) {
delete this->probabilityMatrix;
}
if (this->stateLabeling != nullptr) {
delete this->stateLabeling;
}
if (this->backwardTransitions != nullptr) {
delete this->backwardTransitions;
}
@ -102,7 +95,7 @@ public:
* @return A pointer to the matrix representing the transition probability
* function.
*/
mrmc::storage::SquareSparseMatrix<T>* getTransitionProbabilityMatrix() const {
std::shared_ptr<mrmc::storage::SquareSparseMatrix<T>> getTransitionProbabilityMatrix() const {
return this->probabilityMatrix;
}
@ -146,10 +139,10 @@ public:
private:
/*! A matrix representing the transition probability function of the DTMC. */
mrmc::storage::SquareSparseMatrix<T>* probabilityMatrix;
std::shared_ptr<mrmc::storage::SquareSparseMatrix<T>> probabilityMatrix;
/*! The labeling of the states of the DTMC. */
mrmc::models::AtomicPropositionsLabeling* stateLabeling;
std::shared_ptr<mrmc::models::AtomicPropositionsLabeling> stateLabeling;
/*!
* A data structure that stores the predecessors for all states. This is

7
src/models/GraphTransitions.h

@ -11,6 +11,7 @@
#include "src/storage/SquareSparseMatrix.h"
#include <algorithm>
#include <memory>
namespace mrmc {
@ -38,7 +39,7 @@ public:
* @param forward If set to true, this objects will store the graph structure
* of the backwards transition relation.
*/
GraphTransitions(mrmc::storage::SquareSparseMatrix<T>* transitionMatrix, bool forward)
GraphTransitions(std::shared_ptr<mrmc::storage::SquareSparseMatrix<T>> transitionMatrix, bool forward)
: successorList(nullptr), stateIndications(nullptr), numberOfStates(transitionMatrix->getRowCount()), numberOfNonZeroTransitions(transitionMatrix->getNonZeroEntryCount()) {
if (forward) {
this->initializeForward(transitionMatrix);
@ -86,7 +87,7 @@ private:
* Initializes this graph transitions object using the forward transition
* relation given by means of a sparse matrix.
*/
void initializeForward(mrmc::storage::SquareSparseMatrix<T>* transitionMatrix) {
void initializeForward(std::shared_ptr<mrmc::storage::SquareSparseMatrix<T>> transitionMatrix) {
this->successorList = new uint_fast64_t[numberOfNonZeroTransitions];
this->stateIndications = new uint_fast64_t[numberOfStates + 1];
@ -108,7 +109,7 @@ private:
* relation, whose forward transition relation is given by means of a sparse
* matrix.
*/
void initializeBackward(mrmc::storage::SquareSparseMatrix<T>* transitionMatrix) {
void initializeBackward(std::shared_ptr<mrmc::storage::SquareSparseMatrix<T>> transitionMatrix) {
this->successorList = new uint_fast64_t[numberOfNonZeroTransitions]();
this->stateIndications = new uint_fast64_t[numberOfStates + 1]();

2
src/parser/readLabFile.cpp

@ -106,7 +106,7 @@ LabParser::LabParser(uint_fast64_t node_count, const char * filename)
/*
* create labeling object with given node and proposition count
*/
this->labeling = new mrmc::models::AtomicPropositionsLabeling(node_count, proposition_count);
this->labeling = std::shared_ptr<mrmc::models::AtomicPropositionsLabeling>(new mrmc::models::AtomicPropositionsLabeling(node_count, proposition_count));
/*
* second run: add propositions and node labels to labeling

6
src/parser/readLabFile.h

@ -6,6 +6,8 @@
#include "src/parser/parser.h"
#include <memory>
namespace mrmc {
namespace parser {
@ -20,13 +22,13 @@ class LabParser : Parser
public:
LabParser(uint_fast64_t node_count, const char* filename);
mrmc::models::AtomicPropositionsLabeling* getLabeling()
std::shared_ptr<mrmc::models::AtomicPropositionsLabeling> getLabeling()
{
return this->labeling;
}
private:
mrmc::models::AtomicPropositionsLabeling* labeling;
std::shared_ptr<mrmc::models::AtomicPropositionsLabeling> labeling;
};
} // namespace parser

2
src/parser/readTraFile.cpp

@ -166,7 +166,7 @@ TraParser::TraParser(const char * filename)
* non-zero elements has to be specified (which is non_zero, computed by make_first_pass)
*/
LOG4CPLUS_INFO(logger, "Attempting to create matrix of size " << (maxnode+1) << " x " << (maxnode+1) << ".");
this->matrix = new mrmc::storage::SquareSparseMatrix<double>(maxnode + 1);
this->matrix = std::shared_ptr<mrmc::storage::SquareSparseMatrix<double>>(new mrmc::storage::SquareSparseMatrix<double>(maxnode + 1));
if (this->matrix == NULL)
{
LOG4CPLUS_ERROR(logger, "Could not create matrix of size " << (maxnode+1) << " x " << (maxnode+1) << ".");

6
src/parser/readTraFile.h

@ -5,6 +5,8 @@
#include "src/parser/parser.h"
#include <memory>
namespace mrmc {
namespace parser {
@ -20,13 +22,13 @@ class TraParser : Parser
public:
TraParser(const char* filename);
mrmc::storage::SquareSparseMatrix<double>* getMatrix()
std::shared_ptr<mrmc::storage::SquareSparseMatrix<double>> getMatrix()
{
return this->matrix;
}
private:
mrmc::storage::SquareSparseMatrix<double>* matrix;
std::shared_ptr<mrmc::storage::SquareSparseMatrix<double>> matrix;
uint_fast32_t firstPass(char* buf, uint_fast32_t &maxnode);

2
src/utility/ioUtility.cpp

@ -16,7 +16,7 @@ namespace mrmc {
namespace utility {
void dtmcToDot(mrmc::models::Dtmc<double>* dtmc, std::string filename) {
mrmc::storage::SquareSparseMatrix<double>* matrix = dtmc->getTransitionProbabilityMatrix();
std::shared_ptr<mrmc::storage::SquareSparseMatrix<double>> matrix(dtmc->getTransitionProbabilityMatrix());
double* diagonal_storage = matrix->getDiagonalStoragePointer();
std::ofstream file;

7
test/parser/read_lab_file_test.cpp

@ -12,6 +12,8 @@
#include "src/exceptions/file_IO_exception.h"
#include "src/exceptions/wrong_file_format.h"
#include <memory>
TEST(ReadLabFileTest, NonExistingFileTest) {
//No matter what happens, please don't create a file with the name "nonExistingFile.not"! :-)
ASSERT_THROW(mrmc::parser::LabParser(0,MRMC_CPP_TESTS_BASE_PATH "/nonExistingFile.not"), mrmc::exceptions::file_IO_exception);
@ -19,12 +21,12 @@ TEST(ReadLabFileTest, NonExistingFileTest) {
TEST(ReadLabFileTest, ParseTest) {
//This test is based on a test case from the original MRMC.
mrmc::models::AtomicPropositionsLabeling* labeling = NULL;
mrmc::parser::LabParser* parser;
//Parsing the file
ASSERT_NO_THROW(parser = new mrmc::parser::LabParser(12, MRMC_CPP_TESTS_BASE_PATH "/parser/lab_files/pctl_general_input_01.lab"));
labeling = parser->getLabeling();
std::shared_ptr<mrmc::models::AtomicPropositionsLabeling> labeling(parser->getLabeling());
//Checking whether all propositions are in the labelling
@ -77,7 +79,6 @@ TEST(ReadLabFileTest, ParseTest) {
ASSERT_FALSE(labeling->stateHasAtomicProposition(smth,11));
//Deleting the labeling
delete labeling;
delete parser;
} else {
FAIL();

4
test/parser/read_tra_file_test.cpp

@ -22,10 +22,9 @@ TEST(ReadTraFileTest, NonExistingFileTest) {
/* The following test case is based on one of the original MRMC test cases
*/
TEST(ReadTraFileTest, ParseFileTest1) {
mrmc::storage::SquareSparseMatrix<double> *result = NULL;
mrmc::parser::TraParser* parser;
ASSERT_NO_THROW(parser = new mrmc::parser::TraParser(MRMC_CPP_TESTS_BASE_PATH "/parser/tra_files/csl_general_input_01.tra"));
result = parser->getMatrix();
std::shared_ptr<mrmc::storage::SquareSparseMatrix<double>> result = parser->getMatrix();
if (result != NULL) {
double val = 0;
@ -63,7 +62,6 @@ TEST(ReadTraFileTest, ParseFileTest1) {
ASSERT_TRUE(result->getValue(4,4,&val));
ASSERT_EQ(val,0);
delete result;
delete parser;
} else {
FAIL();
Loading…
Cancel
Save