19#include "CompositeSpace.h"
23#include <arccore/base/FatalErrorException.h>
24#include <arccore/base/String.h>
25#include <arccore/base/TraceInfo.h>
33using namespace Arccore;
38namespace CompositeKernel
50 std::map<String, UniqueArray<Integer>> m_fields;
52 UniqueArray<String> m_labels;
54 UniqueArray<std::shared_ptr<ISpace>> m_sub_spaces;
68 , m_internal(space.m_internal)
74 : m_internal(space.m_internal)
79 Space& Space::operator=(
const Space& src)
81 m_internal = src.m_internal;
87 Space& Space::operator=(Space&& src)
89 m_internal = src.m_internal;
97 if (subSpaceSize() == 0)
100 for (
auto& s : m_internal->m_sub_spaces)
122 void Space::setField(String label,
const UniqueArray<Integer>& indices)
124 auto& fields = m_internal->m_fields;
125 if (fields.find(label) != fields.end())
126 throw Alien::FatalErrorException(A_FUNCINFO,
"Field already defined");
127 fields[label] = indices;
128 m_internal->m_labels.add(label);
137 const UniqueArray<Integer>& Space::field(String label)
const
139 auto& fields = m_internal->m_fields;
140 auto field = fields.find(label);
141 if (field == fields.end())
142 throw Alien::FatalErrorException(A_FUNCINFO,
"Field not defined");
143 return field->second;
148 const UniqueArray<Integer>&
Space::field(Integer i)
const
150 return field(m_internal->m_labels[i]);
155 String Space::fieldLabel(Integer i)
const {
return m_internal->m_labels[i]; }
159 std::shared_ptr<ISpace>
Space::clone()
const {
return std::make_shared<Space>(*
this); }
163 void Space::resizeSubSpace(Integer
size)
165 m_internal->m_sub_spaces.resize(
size);
166 for (
auto& s : m_internal->m_sub_spaces)
167 s.reset(
new Space());
172 std::shared_ptr<ISpace>& Space::operator[](Integer i)
174 ALIEN_ASSERT(i < subSpaceSize(),
"Bound error");
175 return m_internal->m_sub_spaces[i];
180 const std::shared_ptr<ISpace>& Space::operator[](Integer i)
const
182 ALIEN_ASSERT(i < subSpaceSize(),
"Bound error");
183 return m_internal->m_sub_spaces[i];
188 Integer Space::subSpaceSize()
const {
return m_internal->m_sub_spaces.size(); }
bool operator==(const ISpace &space) const
Comparison operator.
const String & name() const
Get space name.
bool operator!=(const ISpace &space) const
Comparison operator.
Integer size() const
Get space size.
std::shared_ptr< ISpace > clone() const
Clone this object.
Integer nbField() const
Get the number of fields.
Interface for algebraic space objects.
virtual const Arccore::String & name() const =0
Get space name.
virtual Arccore::Integer size() const =0
Get space size.
Implementation of an algebraic space.
const Arccore::UniqueArray< Arccore::Integer > & field(Arccore::Integer i) const
Get indices associated to the i-th field \para[in] i The requested field.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --