Skip to content

Commit

Permalink
Initial implementation of MultiDimInterDTO and it's converter. Separa…
Browse files Browse the repository at this point in the history
…te makefiles
  • Loading branch information
Lucio Trincheri committed Dec 13, 2024
1 parent 174eaf3 commit fe8d3bb
Show file tree
Hide file tree
Showing 6 changed files with 253 additions and 3 deletions.
7 changes: 4 additions & 3 deletions sbg/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@ CONVERTERS_ROOT := sbg/dto/converters
$(SBG_ROOT)/map.cpp \
$(SBG_ROOT)/pw_map.cpp \
$(SBG_ROOT)/sbg.cpp \
$(SBG_ROOT)/sbg_algorithms.cpp \
$(DTO_ROOT)/interval_dto.cpp \
$(CONVERTERS_ROOT)/interval_dto_converter.cpp
$(SBG_ROOT)/sbg_algorithms.cpp

include util/Makefile.include
include sbg/dto/Makefile.include

# Objects
SBG_OBJ=$(addprefix $(BUILD_DIR)/, $(SBG_SRC:.cpp=.o))
# Combine SBG and DTO objects
SBG_OBJ += $(DTO_OBJ)

create-folders::
@mkdir -p $(BUILD_DIR)/$(SBG_ROOT) \
Expand Down
9 changes: 9 additions & 0 deletions sbg/dto/Makefile.include
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# DTO Sources
DTO_SRC := \
$(DTO_ROOT)/interval_dto.cpp \
$(DTO_ROOT)/multidim_inter_dto.cpp \
$(CONVERTERS_ROOT)/interval_dto_converter.cpp \
$(CONVERTERS_ROOT)/multidim_inter_dto_converter.cpp

# DTO Objects
DTO_OBJ=$(addprefix $(BUILD_DIR)/, $(DTO_SRC:.cpp=.o))
45 changes: 45 additions & 0 deletions sbg/dto/converters/multidim_inter_dto_converter.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*******************************************************************************
This file is part of Set--Based Graph Library.
SBG Library is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SBG Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SBG Library. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/

#include "sbg/dto/converters/interval_dto_converter.hpp"
#include "sbg/dto/converters/multidim_inter_dto_converter.hpp"
#include "sbg/dto/interval_dto.hpp"
#include "sbg/dto/multidim_inter_dto.hpp"
#include "sbg/multidim_inter.hpp"
#include "sbg/interval.hpp"

namespace SBG {

namespace API {

SBG::LIB::MultiDimInter MultiDimInterDTOConverter::convertToMultiDimInter(const MultiDimInterDTO& dto) {
SBG::LIB::InterVector intervals;
intervals.reserve(dto.intervals_.size());

std::transform(dto.intervals_.begin(), dto.intervals_.end(), intervals.begin(),
[](const IntervalDTO& intervalDTO) {
return IntervalDTOConverter::convertToInterval(intervalDTO);
});

return SBG::LIB::MultiDimInter(intervals);
}

} // namespace API

} // namespace SBG
54 changes: 54 additions & 0 deletions sbg/dto/converters/multidim_inter_dto_converter.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/** @file interval_dto_converter.hpp
@brief <b>MultiDimInterDTOConverter implementation</b>
The MultiDimInterDTOConverter provides the methods to convert an MultiDimInterDTO
to the corresponding multidimensional interval representation. Currently, it can
convert to LIB::MultiDimInter, but more conversions can/will be added in the future.
<hr>
This file is part of Set--Based Graph Library.
SBG Library is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SBG Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SBG Library. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/

#ifndef SBG_DTO_MULTIDIM_INTERVAL_CONVERTER_HPP
#define SBG_DTO_MULTIDIM_INTERVAL_CONVERTER_HPP

#include "sbg/dto/multidim_inter_dto.hpp"
#include "sbg/multidim_inter.hpp"

namespace SBG {

namespace API {

class MultiDimInterDTOConverter {
public:
/**
* @brief Converts a MultiDimInterDTO object to an actual multidimensional
* interval implementation (e.g., SBG::LIB::MultiDimInter).
*
* @param dto The MultiDimInterDTO object to convert.
* @return SBG::LIB::MultiDimInter The converted interval object.
*/
static SBG::LIB::MultiDimInter convertToMultiDimInter(const MultiDimInterDTO& dto);
};

} // namespace API

} // namespace SBG

#endif // SBG_DTO_MULTIDIM_INTERVAL_CONVERTER_HPP
78 changes: 78 additions & 0 deletions sbg/dto/multidim_inter_dto.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*******************************************************************************
This file is part of Set--Based Graph Library.
SBG Library is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SBG Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SBG Library. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/

#include "sbg/dto/multidim_inter_dto.hpp"

namespace SBG {

namespace API {

MultiDimInterDTO::MultiDimInterDTO() : intervals_() {}
MultiDimInterDTO::MultiDimInterDTO(const MD_NAT &x) : intervals_() {
for (NAT xi : x)
intervals_.emplace_back(IntervalDTO(xi, 1, xi));
}
MultiDimInterDTO::MultiDimInterDTO(const IntervalDTO &i) : intervals_()
{
intervals_.emplace_back(i);
}
MultiDimInterDTO::MultiDimInterDTO(const unsigned int &nmbr_copies
, const IntervalDTO &i) : intervals_() {
for (unsigned int j = 0; j < nmbr_copies; ++j)
intervals_.emplace_back(i);
}
MultiDimInterDTO::MultiDimInterDTO(const IntervalDTOVector &iv) : intervals_(iv) {}

member_imp(MultiDimInterDTO, IntervalDTOVector, intervals);

void MultiDimInterDTO::emplaceBack(IntervalDTO i)
{
if (i.isEmpty())
intervals_ = IntervalDTOVector();
else
intervals_.emplace_back(i);
return;
}

IntervalDTO &MultiDimInterDTO::operator[](std::size_t n)
{
return intervals_[n];
}

const IntervalDTO &MultiDimInterDTO::operator[](std::size_t n) const
{
return intervals_[n];
}

std::ostream &operator<<(std::ostream &out, const MultiDimInterDTO &mdi)
{
std::size_t sz = mdi.intervals_.size();

if (sz > 0) {
for (std::size_t j = 0; j < sz - 1; ++j)
out << mdi[j] << "x";
out << mdi[sz-1];
}

return out;
}

} // namespace API

} // namespace SBG
63 changes: 63 additions & 0 deletions sbg/dto/multidim_inter_dto.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/** @file multidim_inter.hpp
@brief <b>Multi-dimensional interval implementation</b>
<hr>
This file is part of Set--Based Graph Library.
SBG Library is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
SBG Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SBG Library. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/

#ifndef SBG_DTO_MULTIDIM_INTERVAL_HPP
#define SBG_DTO_MULTIDIM_INTERVAL_HPP

#include "sbg/dto/interval_dto.hpp"
#include <vector>

namespace SBG {

namespace API {

using MD_NAT = Util::MD_NAT;
using NAT = Util::NAT;

typedef std::vector<IntervalDTO> IntervalDTOVector;

struct MultiDimInterDTO {

member_class(IntervalDTOVector, intervals);

MultiDimInterDTO();
MultiDimInterDTO(const MD_NAT &x);
MultiDimInterDTO(const IntervalDTO &i);
MultiDimInterDTO(const unsigned int &nmbr_copies, const IntervalDTO &i);
MultiDimInterDTO(const IntervalDTOVector &iv);

void emplaceBack(IntervalDTO i);
IntervalDTO &operator[](std::size_t n);
const IntervalDTO &operator[](std::size_t n) const;

friend std::ostream &operator<<(std::ostream &out, const MultiDimInterDTO &i);
friend class MultiDimInterDTOConverter;
};

typedef MultiDimInterDTO SetPieceDTO;

} // namespace LIB

} // namespace SBG

#endif

0 comments on commit fe8d3bb

Please sign in to comment.