Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Define exception classes as subclasses
Browse files Browse the repository at this point in the history
flomnes committed Jan 30, 2025
1 parent 7550fc1 commit c4c40d2
Showing 13 changed files with 98 additions and 121 deletions.
5 changes: 1 addition & 4 deletions src/solver/modeler/dataSeries/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -4,17 +4,14 @@ set(SRC_DATA_SERIES

include/antares/solver/modeler/dataSeries/timeSeriesSet.h
timeSeriesSet.cpp
include/antares/solver/modeler/dataSeries/timeSeriesSetExceptions.h
timeSeriesSetExceptions.cpp

include/antares/solver/modeler/dataSeries/dataSeriesRepo.h
dataSeriesRepo.cpp
include/antares/solver/modeler/dataSeries/dataSeriesRepoExceptions.h
dataSeriesRepoExceptions.cpp
dataSeriesRepoExceptions.cpp

include/antares/solver/modeler/dataSeries/scenarioGroupRepo.h
scenarioGroupRepo.cpp
include/antares/solver/modeler/dataSeries/scenarioGroupRepoExceptions.h
scenarioGroupRepoExceptions.cpp

include/antares/solver/modeler/dataSeries/linearProblemData.h
8 changes: 3 additions & 5 deletions src/solver/modeler/dataSeries/dataSeriesRepo.cpp
Original file line number Diff line number Diff line change
@@ -2,16 +2,14 @@

#include <stdexcept>

#include "antares/solver/modeler/dataSeries/dataSeriesRepoExceptions.h"

namespace Antares::Solver::Modeler::DataSeries
{
void DataSeriesRepository::addDataSeries(std::unique_ptr<IDataSeries> dataSeries)
{
std::string name = dataSeries->name();
if (dataSeries_.contains(name))
{
throw DataSeriesRepo_DSalreadyExists(name);
throw DataSeriesAlreadyExists(name);
}
dataSeries_[name] = std::move(dataSeries);
}
@@ -20,11 +18,11 @@ IDataSeries& DataSeriesRepository::getDataSeries(const std::string& setId)
{
if (dataSeries_.empty())
{
throw DataSeriesRepo_Empty();
throw Empty();
}
if (!dataSeries_.contains(setId))
{
throw DataSeriesRepo_DataSeriesNotExist(setId);
throw DataSeriesNotExist(setId);
}
return *(dataSeries_[setId]);
}
10 changes: 5 additions & 5 deletions src/solver/modeler/dataSeries/dataSeriesRepoExceptions.cpp
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
#include "antares/solver/modeler/dataSeries/dataSeriesRepoExceptions.h"

#include <string>

#include "antares/solver/modeler/dataSeries/dataSeriesRepo.h"

namespace Antares::Solver::Modeler::DataSeries
{
DataSeriesRepo_Empty::DataSeriesRepo_Empty():
DataSeriesRepository::Empty::Empty():
std::invalid_argument("Data series repo is empty, and somebody requests data from it")
{
}

DataSeriesRepo_DataSeriesNotExist::DataSeriesRepo_DataSeriesNotExist(const std::string setId):
DataSeriesRepository::DataSeriesNotExist::DataSeriesNotExist(const std::string& setId):
std::invalid_argument("Data series repo : data series '" + setId + "' does not exist")
{
}

DataSeriesRepo_DSalreadyExists::DataSeriesRepo_DSalreadyExists(const std::string setId):
DataSeriesRepository::DataSeriesAlreadyExists::DataSeriesAlreadyExists(const std::string& setId):
std::invalid_argument("Data series repo : data series '" + setId + "' already exists")
{
}
Original file line number Diff line number Diff line change
@@ -18,6 +18,26 @@ class DataSeriesRepository

private:
std::map<std::string, std::unique_ptr<IDataSeries>> dataSeries_;

public:
// Exception classes
class Empty: public std::invalid_argument
{
public:
Empty();
};

class DataSeriesNotExist: public std::invalid_argument
{
public:
explicit DataSeriesNotExist(const std::string&);
};

class DataSeriesAlreadyExists: public std::invalid_argument
{
public:
explicit DataSeriesAlreadyExists(const std::string&);
};
};

} // namespace Antares::Solver::Modeler::DataSeries

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@

#pragma once
#include <map>
#include <stdexcept>
#include <string>

namespace Antares::Solver::Modeler::DataSeries
@@ -15,5 +16,24 @@ class ScenarioGroupRepository

private:
std::map<std::string, std::map<unsigned, unsigned>> scenarioGroups_;

public:
class AlreadyExists: public std::invalid_argument
{
public:
explicit AlreadyExists(const std::string& groupId);
};

class DoesNotExist: public std::invalid_argument
{
public:
explicit DoesNotExist(const std::string& groupId);
};

class ScenarioNotExist: public std::invalid_argument
{
public:
explicit ScenarioNotExist(const std::string& groupId, unsigned scenario);
};
};
} // namespace Antares::Solver::Modeler::DataSeries

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#include <stdexcept>
#include <string>
#include <vector>

@@ -15,6 +16,33 @@ class TimeSeriesSet: public IDataSeries
private:
unsigned height_ = 0;
std::vector<std::vector<double>> tsSet_;

public:
class AddTSofWrongSize: public std::invalid_argument
{
public:
explicit AddTSofWrongSize(const std::string& name,
const size_t& tsSize,
const unsigned& height);
};

class Empty: public std::invalid_argument
{
public:
explicit Empty(const std::string& name);
};

class RankTooBig: public std::invalid_argument
{
public:
explicit RankTooBig(const std::string& name, unsigned rank);
};

class HourTooBig: public std::invalid_argument
{
public:
explicit HourTooBig(const std::string& name, unsigned hour);
};
};

} // namespace Antares::Solver::Modeler::DataSeries

This file was deleted.

8 changes: 3 additions & 5 deletions src/solver/modeler/dataSeries/scenarioGroupRepo.cpp
Original file line number Diff line number Diff line change
@@ -2,8 +2,6 @@

#include <stdexcept>

#include "antares/solver/modeler/dataSeries/scenarioGroupRepoExceptions.h"

namespace Antares::Solver::Modeler::DataSeries
{
void ScenarioGroupRepository::addPairScenarioRankToGroup(
@@ -12,7 +10,7 @@ void ScenarioGroupRepository::addPairScenarioRankToGroup(
{
if (scenarioGroups_.contains(groupId))
{
throw ScGroup_AlreadyExists(groupId);
throw AlreadyExists(groupId);
}
scenarioGroups_[groupId] = {scenarioToRank};
}
@@ -21,12 +19,12 @@ unsigned ScenarioGroupRepository::getDataRank(const std::string& groupId, const
{
if (!scenarioGroups_.contains(groupId))
{
throw ScGroup_DoesNotExist(groupId);
throw DoesNotExist(groupId);
}

if (!scenarioGroups_.at(groupId).contains(scenario))
{
throw ScGroup_ScenarioNotExist(groupId, scenario);
throw ScenarioNotExist(groupId, scenario);
}

return scenarioGroups_.at(groupId).at(scenario);
12 changes: 6 additions & 6 deletions src/solver/modeler/dataSeries/scenarioGroupRepoExceptions.cpp
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
#include "antares/solver/modeler/dataSeries/scenarioGroupRepoExceptions.h"

#include <string>

#include "antares/solver/modeler/dataSeries/scenarioGroupRepo.h"

namespace Antares::Solver::Modeler::DataSeries
{

ScGroup_AlreadyExists::ScGroup_AlreadyExists(const std::string& groupId):
ScenarioGroupRepository::AlreadyExists::AlreadyExists(const std::string& groupId):
std::invalid_argument("Scenario group '" + groupId + "' already exists in group repo.")
{
}

ScGroup_DoesNotExist::ScGroup_DoesNotExist(const std::string& groupId):
ScenarioGroupRepository::DoesNotExist::DoesNotExist(const std::string& groupId):
std::invalid_argument("Scenario group '" + groupId + "' does not exist in group repo.")
{
}

ScGroup_ScenarioNotExist::ScGroup_ScenarioNotExist(const std::string& groupId,
const unsigned scenario):
ScenarioGroupRepository::ScenarioNotExist::ScenarioNotExist(const std::string& groupId,
const unsigned scenario):
std::invalid_argument("In scenario group '" + groupId + "', scenario '"
+ std::to_string(scenario) + "' does not exist.")
{
10 changes: 4 additions & 6 deletions src/solver/modeler/dataSeries/timeSeriesSet.cpp
Original file line number Diff line number Diff line change
@@ -3,8 +3,6 @@
#include <stdexcept>
#include <string>

#include "antares/solver/modeler/dataSeries/timeSeriesSetExceptions.h"

namespace Antares::Solver::Modeler::DataSeries
{
TimeSeriesSet::TimeSeriesSet(std::string name, unsigned int height):
@@ -17,7 +15,7 @@ void TimeSeriesSet::add(const std::vector<double>& ts)
{
if (ts.size() != height_)
{
throw TSset_AddTSofWrongSize(name(), ts.size(), height_);
throw AddTSofWrongSize(name(), ts.size(), height_);
}
tsSet_.push_back(std::move(ts));
}
@@ -26,17 +24,17 @@ double TimeSeriesSet::getData(unsigned rank, unsigned hour)
{
if (tsSet_.empty())
{
throw TSset_Empty(name());
throw Empty(name());
}

if (rank > tsSet_.size() - 1)
{
throw TSset_RankTooBig(name(), rank);
throw RankTooBig(name(), rank);
}

if (hour > height_ - 1)
{
throw TSset_HourTooBig(name(), hour);
throw HourTooBig(name(), hour);
}

return tsSet_[rank][hour];
16 changes: 8 additions & 8 deletions src/solver/modeler/dataSeries/timeSeriesSetExceptions.cpp
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@

#include "antares/solver/modeler/dataSeries/timeSeriesSetExceptions.h"

#include <string>

#include "antares/solver/modeler/dataSeries/timeSeriesSet.h"

namespace Antares::Solver::Modeler::DataSeries
{

TSset_AddTSofWrongSize::TSset_AddTSofWrongSize(const std::string& name,
const size_t& tsSize,
const unsigned& height):
TimeSeriesSet::AddTSofWrongSize::AddTSofWrongSize(const std::string& name,
const size_t& tsSize,
const unsigned& height):
std::invalid_argument("TS set '" + name + "' : add a TS of size " + std::to_string(tsSize)
+ " in a set of height " + std::to_string(height))
{
}

TSset_Empty::TSset_Empty(const std::string& name):
TimeSeriesSet::Empty::Empty(const std::string& name):
std::invalid_argument("TS set '" + name + "' : empty, requesting a value makes no sense")
{
}

TSset_RankTooBig::TSset_RankTooBig(const std::string& name, unsigned rank):
TimeSeriesSet::RankTooBig::RankTooBig(const std::string& name, unsigned rank):
std::invalid_argument("TS set '" + name + "' : rank " + std::to_string(rank)
+ " exceeds TS set's width")
{
}

TSset_HourTooBig::TSset_HourTooBig(const std::string& name, unsigned int hour):
TimeSeriesSet::HourTooBig::HourTooBig(const std::string& name, unsigned int hour):
std::invalid_argument("TS set '" + name + "' : hour " + std::to_string(hour)
+ " exceeds TS set's height")
{

0 comments on commit c4c40d2

Please sign in to comment.