Safir SDK Core
Loading...
Searching...
No Matches
SequenceContainer.h
Go to the documentation of this file.
1/******************************************************************************
2*
3* Copyright Saab AB, 2004-2015 (http://safirsdkcore.com)
4*
5* Created by: Joel Ottosson / joot
6*
7*******************************************************************************
8*
9* This file is part of Safir SDK Core.
10*
11* Safir SDK Core is free software: you can redistribute it and/or modify
12* it under the terms of version 3 of the GNU General Public License as
13* published by the Free Software Foundation.
14*
15* Safir SDK Core is distributed in the hope that it will be useful,
16* but WITHOUT ANY WARRANTY; without even the implied warranty of
17* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18* GNU General Public License for more Internals.
19*
20* You should have received a copy of the GNU General Public License
21* along with Safir SDK Core. If not, see <http://www.gnu.org/licenses/>.
22*
23******************************************************************************/
24#pragma once
25
32#include <deque>
33#include <stdexcept>
34#include <typeinfo>
35#include <vector>
36
37namespace Safir
38{
39namespace Dob
40{
41namespace Typesystem
42{
51 template <class T>
53 {
54 public:
55
56 typedef T ContainedType;
57 typedef std::deque<T> StorageType; //we use std::deque instead of std::vector, to avoid std::vector<bool> specialization
58 typedef typename StorageType::const_iterator const_iterator;
59
67 ,m_values()
68 {
69 }
70
71 bool IsNull() const override {return empty();}
72
73 void SetNull() override
74 {
75 clear();
76 }
77
83 size_t size() const {return m_values.size();}
84
90 bool empty() const {return m_values.empty();}
91
97 const ContainedType& front() const {return m_values.front();}
98
104 const ContainedType& back() const {return m_values.back();}
105
111 const_iterator begin() const {return m_values.begin();}
112
118 const_iterator end() const {return m_values.end();}
119
125 void clear()
126 {
127 m_bIsChanged=true;
128 m_values.clear();
129 }
130
139 const ContainedType& operator [](const size_t index) const
140 {
141 return m_values[index];
142 }
143
151 const ContainedType& at(const size_t index) const
152 {
153 return m_values.at(index);
154 }
155
162 void push_back(const ContainedType& val)
163 {
164 m_bIsChanged=true;
165 m_values.push_back(val);
166 }
167
177 void SetVal(const size_t index, const ContainedType& val)
178 {
179 if (index >= m_values.size())
180 {
181 throw std::out_of_range("Index out of range.");
182 }
183 m_bIsChanged=true;
184 m_values[index]=val;
185 }
186
194 const ContainedType& GetVal(const size_t index) const
195 {
196 return m_values.at(index);
197 }
198
207 void InsertAt(const size_t index, const ContainedType& value)
208 {
209 m_bIsChanged=true;
210 m_values.insert(m_values.begin()+index, value);
211 }
212
220 void EraseAt(const size_t index)
221 {
222 m_bIsChanged=true;
223 m_values.erase(m_values.begin()+index);
224 }
225
234 void Copy(const ContainerBase& that) override
235 {
236 if (this != &that)
237 {
238 if (typeid(*this) != typeid(that))
239 {
240 throw SoftwareViolationException(L"Invalid call to Copy, containers are not of same type",__WFILE__,__LINE__);
241 }
242
244 static_cast<const SequenceContainer<ContainedType>& >(that);
245
247 m_values.clear();
248 for (typename StorageType::const_iterator it=other.m_values.begin(); it!=other.m_values.end(); ++it)
249 {
250 m_values.push_back(SequenceCopyHelper<ContainedType>::Copy(*it));
251 }
252 }
253 }
254
255 private:
256 template <class U> struct SequenceCopyHelper
257 {
258 static U Copy(const U& val) {return val;}
259 };
260
261 template <class U> struct SequenceCopyHelper< std::shared_ptr<U> >
262 {
263 static std::shared_ptr<U> Copy(const std::shared_ptr<U> & val) {return std::static_pointer_cast<U>(val->Clone());}
264 };
265
266 StorageType m_values;
267 };
268
274 {
275 public:
285
286 bool IsNull() const override {return empty();}
287
288 void SetNull() override
289 {
290 clear();
291 }
292
297 virtual size_t size() const = 0;
298
303 virtual bool empty() const = 0;
304
310 virtual void clear() = 0;
311
320 virtual void PushBackOrdinal(const EnumerationValue val) = 0;
321
330 virtual void SetOrdinal(const size_t index, const EnumerationValue val) = 0;
331
339 virtual EnumerationValue GetOrdinal(const size_t index) const = 0;
340
348 virtual void InsertOrdinalAt(const size_t index, EnumerationValue value) = 0;
349
354 virtual void EraseAt(const size_t index) = 0;
355 };
356
360 template <class T>
362 {
363 public:
364 typedef typename T::Enumeration ContainedType;
365 typedef std::deque<ContainedType> StorageType; //we use std::deque instead of std::vector, to avoid std::vector<bool> specialization
366 typedef typename StorageType::const_iterator const_iterator;
367
378
379 size_t size() const override {return m_values.size();}
380
381 bool empty() const override {return m_values.empty();}
382
387 ContainedType front() const {return m_values.front();}
388
393 ContainedType back() const {return m_values.back();}
394
399 const_iterator begin() const {return m_values.begin();}
400
405 const_iterator end() const {return m_values.end();}
406
413 void clear() override
414 {
415 m_bIsChanged=true;
416 m_values.clear();
417 }
418
427 ContainedType operator[](const size_t index) const
428 {
429 T::CheckForMismatch();
430 return m_values[index];
431 }
432
440 ContainedType at(const size_t index) const
441 {
442 T::CheckForMismatch();
443 return m_values.at(index);
444 }
445
453 void push_back(const ContainedType val)
454 {
455 T::CheckForMismatch();
456 PushBackOrdinal(val);
457 }
458
459 void PushBackOrdinal(const EnumerationValue val) override
460 {
461 if (val < T::FirstOrdinal() || val > T::LastOrdinal())
462 {
463 throw Safir::Dob::Typesystem::IllegalValueException(L"The enumerated type DotsTest.TestEnum does not have such a value",__WFILE__,__LINE__);
464 }
465 m_bIsChanged=true;
466 m_values.push_back(static_cast<ContainedType>(val));
467 }
468
469
479 void SetVal(const size_t index, const ContainedType val)
480 {
481 T::CheckForMismatch();
482 SetOrdinal(index, val);
483 }
484
492 ContainedType GetVal(const size_t index) const
493 {
494 T::CheckForMismatch();
495 return m_values.at(index);
496 }
497
498 void SetOrdinal(const size_t index, const EnumerationValue val) override
499 {
500 if (index >= m_values.size())
501 {
502 throw std::out_of_range("Index out of range.");
503 }
504
505 if (val < T::FirstOrdinal() || val > T::LastOrdinal())
506 {
507 throw Safir::Dob::Typesystem::IllegalValueException(L"The enumerated type DotsTest.TestEnum does not have such a value",__WFILE__,__LINE__);
508 }
509
510 m_bIsChanged=true;
511 m_values[index]=static_cast<ContainedType>(val);
512 }
513
514 EnumerationValue GetOrdinal(const size_t index) const override
515 {
516 return m_values.at(index);
517 }
518
527 void InsertAt(const size_t index, ContainedType value)
528 {
529 T::CheckForMismatch();
530 InsertOrdinalAt(index, value);
531 }
532
533 void InsertOrdinalAt(const size_t index, EnumerationValue value) override
534 {
535 if (value < T::FirstOrdinal() || value > T::LastOrdinal())
536 {
537 throw Safir::Dob::Typesystem::IllegalValueException(L"The enumerated type DotsTest.TestEnum does not have such a value",__WFILE__,__LINE__);
538 }
539
540 m_bIsChanged=true;
541 m_values.insert(m_values.begin()+index, static_cast<ContainedType>(value));
542 }
543
544 void EraseAt(const size_t index) override
545 {
546 m_bIsChanged=true;
547 m_values.erase(m_values.begin()+index);
548 }
549
558 void Copy(const ContainerBase& that) override
559 {
560 if (this != &that)
561 {
562 if (typeid(*this) != typeid(that))
563 {
564 throw SoftwareViolationException(L"Invalid call to Copy, containers are not of same type",__WFILE__,__LINE__);
565 }
566
567 const auto& other=
568 static_cast<const EnumerationSequenceContainer<T>& >(that);
569
571 m_values = other.m_values;
572 }
573 }
574
575 private:
576 StorageType m_values;
577 };
578
579
582 {
583 public:
591 virtual bool IsChangedHere() const = 0;
592
600 virtual void SetChangedHere(const bool changed) = 0;
601
606 virtual size_t size() const = 0;
607
615#ifndef SAFIR_NO_DEPRECATED
629 virtual ObjectPtr GetObj(const size_t index) = 0;
630
644 virtual ObjectConstPtr GetObj(const size_t index) const = 0;
645#endif
653 virtual ObjectPtr GetObjectPointer(const size_t index) = 0;
654
662 virtual ObjectConstPtr GetObjectPointer(const size_t index) const = 0;
663
674 virtual void SetObjectPointer(const size_t index, const ObjectPtr& ptr) = 0;
675
684 virtual void PushBackObjectPointer(const ObjectPtr& ptr) = 0;
685
688 private:
689 friend void Utilities::MergeChanges(ObjectPtr into, const ObjectConstPtr& from);
690
696 virtual void Merge(const GenericObjectSequenceContainerBase& other) = 0;
697 };
698
699
700 template <class T>
702 : public SequenceContainer<std::shared_ptr<T> >
704 {
706 public:
708 typedef std::shared_ptr<T> T_Ptr;
709
710 bool IsChanged() const override
711 {
713 {
714 return true;
715 }
716
717 for (typename Base::const_iterator it=Base::begin(); it!=Base::end(); ++it)
718 {
719 if ((*it)->IsChanged()) //something in an object has changed
720 {
721 return true;
722 }
723 }
724
725 return false;
726 }
727
728 bool IsChangedHere() const override
729 {
730 return Base::m_bIsChanged;
731 }
732
733 void SetChanged(const bool changed) override
734 {
735 Base::m_bIsChanged = changed;
736
737 for (typename Base::const_iterator it=Base::begin(); it!=Base::end(); ++it)
738 {
739 (*it)->SetChanged(changed);
740 }
741 }
742
743 void SetChangedHere(const bool changed) override
744 {
745 Base::m_bIsChanged = changed;
746 }
747
748 size_t size() const override {return Base::size();}
749#ifndef SAFIR_NO_DEPRECATED
750 ObjectPtr GetObj(const size_t index) override {return Base::operator[](index);}
751 ObjectConstPtr GetObj(const size_t index) const override {return Base::operator[](index);}
752#endif
760 T_Ptr GetPtr(const size_t index)
761 {
762 return Base::at(index);
763 }
764
765 ObjectPtr GetObjectPointer(const size_t index) override
766 {
767 return GetPtr(index);
768 }
769
777 std::shared_ptr<const T> GetPtr(const size_t index) const
778 {
779 return Base::at(index);
780 }
781
782 ObjectConstPtr GetObjectPointer(const size_t index) const override
783 {
784 return GetPtr(index);
785 }
786
794 void SetPtr(const size_t index, const T_Ptr& ptr)
795 {
796 Base::SetVal(index, ptr);
797 }
798
799 void SetObjectPointer(const size_t index, const ObjectPtr& ptr) override
800 {
801 const auto tptr = std::dynamic_pointer_cast<T>(ptr);
802 if (tptr == nullptr)
803 {
804 throw SoftwareViolationException(L"Invalid call to SetPtr, incompatible types!", __WFILE__,__LINE__);
805 }
806 SetPtr(index, tptr);
807 }
808
809 void PushBackObjectPointer(const ObjectPtr& ptr) override
810 {
811 const auto tptr = std::dynamic_pointer_cast<T>(ptr);
812 if (tptr == nullptr)
813 {
814 throw SoftwareViolationException(L"Invalid call to PushBackObjectPointer, incompatible types!", __WFILE__,__LINE__);
815 }
816 Base::push_back(tptr);
817 }
818
819 private:
820#ifdef SAFIR_NO_DEPRECATED
821 void SetVal(const size_t index, const typename Base::ContainedType& val) = delete;
822 const typename Base::ContainedType& GetVal(const size_t index) const = delete;
823#endif
824
825 void Merge(const GenericObjectSequenceContainerBase& that) override
826 {
827#ifndef NDEBUG
828 if (typeid(GenericObjectSequenceContainer<T>) != typeid(that))
829 {
830 throw SoftwareViolationException(L"Invalid call to Merge, containers are not of same type",
831 __WFILE__,__LINE__);
832 }
833#endif
834
835 const GenericObjectSequenceContainer<T>& other =
836 static_cast<const GenericObjectSequenceContainer<T>&>(that);
837
838 //Note: this function only gets called when IsChangedHere() == false
839
840 if (!other.IsChanged())
841 {
842 return;
843 }
844
845 if (Base::size() != other.size())
846 {
847 throw SoftwareViolationException(L"It is not possible to merge two object sequences of different sizes.",
848 __WFILE__,__LINE__);
849 }
850
851 for (size_t i = 0; i < Base::size(); ++i)
852 {
853 if (other.at(i)->IsChanged())
854 {
855 //recurse
856 Utilities::MergeChanges(Base::at(i),other.at(i));
857 }
858 }
859 }
860 };
861
862
872
875
878
881
884
887
890
893
896
899
902
905
908
911 //--------------------------------------------------
912 // SI-types (32-bits)
913 //--------------------------------------------------
914 namespace Si32
915 {
918
921
924
927
930
933
936
939
942
945
948
951
954
957
960
963
966
969
972 }
973
974 //--------------------------------------------------
975 // SI-types (64-bits)
976 //--------------------------------------------------
977 namespace Si64
978 {
981
984
987
990
993
996
999
1002
1005
1008
1011
1014
1017
1020
1023
1026
1029
1032
1035 }
1036}
1037}
1038}
#define __WFILE__
Definition Exceptions.h:31
This namespace contains all the functionality and definitions of the SAFIR SDK.
Definition Backdoor.h:31
DotsC_EnumerationValue EnumerationValue
The ordinal value of an enumeration.
Definition Defs.h:270
SequenceContainer< HandlerId > HandlerIdSequenceContainer
A container containing HandlerId values.
Definition SequenceContainer.h:901
std::shared_ptr< const Object > ObjectConstPtr
A smart pointer to a const Object.
Definition Object.h:47
GenericObjectSequenceContainer< Object > ObjectSequenceContainer
A container containing Object values.
Definition SequenceContainer.h:907
SequenceContainer< TypeId > TypeIdSequenceContainer
A container containing TypeId values.
Definition SequenceContainer.h:889
SequenceContainer< EntityId > EntityIdSequenceContainer
A container containing EntityId values.
Definition SequenceContainer.h:895
SequenceContainer< Float64 > Float64SequenceContainer
A container containing 64 bit floating point values.
Definition SequenceContainer.h:886
SequenceContainer< std::wstring > StringSequenceContainer
A container containing string values.
Definition SequenceContainer.h:871
SequenceContainer< Binary > BinarySequenceContainer
A container containing Binary values.
Definition SequenceContainer.h:904
SequenceContainer< Int32 > Int32SequenceContainer
A container containing 32 bit integer values.
Definition SequenceContainer.h:877
std::shared_ptr< Object > ObjectPtr
A smart pointer to an Object.
Definition Object.h:44
SequenceContainer< Int64 > Int64SequenceContainer
A container containing 64 bit integer values.
Definition SequenceContainer.h:880
SequenceContainer< bool > BooleanSequenceContainer
A container containing boolean values.
Definition SequenceContainer.h:874
SequenceContainer< ChannelId > ChannelIdSequenceContainer
A container containing ChannelId values.
Definition SequenceContainer.h:898
SequenceContainer< InstanceId > InstanceIdSequenceContainer
A container containing InstanceId values.
Definition SequenceContainer.h:892
SequenceContainer< Float32 > Float32SequenceContainer
A container containing 32 bit floating point values.
Definition SequenceContainer.h:883
SequenceContainer< Kelvin > KelvinSequenceContainer
A container containing 32 bit Kelvin values.
Definition SequenceContainer.h:929
SequenceContainer< CubicMeter > CubicMeterSequenceContainer
A container containing 32 bit CubicMeter values.
Definition SequenceContainer.h:920
SequenceContainer< SquareMeter > SquareMeterSequenceContainer
A container containing 32 bit SquareMeter values.
Definition SequenceContainer.h:962
SequenceContainer< Joule > JouleSequenceContainer
A container containing 32 bit Joule values.
Definition SequenceContainer.h:926
SequenceContainer< MeterPerSecondSquared > MeterPerSecondSquaredSequenceContainer
A container containing 32 bit MeterPerSecondSquared values.
Definition SequenceContainer.h:941
SequenceContainer< Pascal > PascalSequenceContainer
A container containing 32 bit Pascal values.
Definition SequenceContainer.h:947
SequenceContainer< Hertz > HertzSequenceContainer
A container containing 32 bit Hertz values.
Definition SequenceContainer.h:923
SequenceContainer< MeterPerSecond > MeterPerSecondSequenceContainer
A container containing 32 bit MeterPerSecond values.
Definition SequenceContainer.h:938
SequenceContainer< RadianPerSecond > RadianPerSecondSequenceContainer
A container containing 32 bit RadianPerSecond values.
Definition SequenceContainer.h:953
SequenceContainer< Radian > RadianSequenceContainer
A container containing 32 bit Radian values.
Definition SequenceContainer.h:950
SequenceContainer< Ampere > AmpereSequenceContainer
A container containing 32 bit Ampere values.
Definition SequenceContainer.h:917
SequenceContainer< RadianPerSecondSquared > RadianPerSecondSquaredSequenceContainer
A container containing 32 bit RadianPerSecondSquared values.
Definition SequenceContainer.h:956
SequenceContainer< Meter > MeterSequenceContainer
A container containing 32 bit Meter values.
Definition SequenceContainer.h:935
SequenceContainer< Steradian > SteradianSequenceContainer
A container containing 32 bit Steradian values.
Definition SequenceContainer.h:965
SequenceContainer< Newton > NewtonSequenceContainer
A container containing 32 bit Newton values.
Definition SequenceContainer.h:944
SequenceContainer< Watt > WattSequenceContainer
A container containing 32 bit Watt values.
Definition SequenceContainer.h:971
SequenceContainer< Kilogram > KilogramSequenceContainer
A container containing 32 bit Kilogram values.
Definition SequenceContainer.h:932
SequenceContainer< Volt > VoltSequenceContainer
A container containing 32 bit Volt values.
Definition SequenceContainer.h:968
SequenceContainer< Second > SecondSequenceContainer
A container containing 32 bit Second values.
Definition SequenceContainer.h:959
SequenceContainer< Hertz > HertzSequenceContainer
A container containing 64 bit Hertz values.
Definition SequenceContainer.h:986
SequenceContainer< Watt > WattSequenceContainer
A container containing 64 bit Watt values.
Definition SequenceContainer.h:1034
SequenceContainer< Meter > MeterSequenceContainer
A container containing 64 bit Meter values.
Definition SequenceContainer.h:998
SequenceContainer< Newton > NewtonSequenceContainer
A container containing 64 bit Newton values.
Definition SequenceContainer.h:1007
SequenceContainer< Ampere > AmpereSequenceContainer
A container containing 64 bit Ampere values.
Definition SequenceContainer.h:980
SequenceContainer< Radian > RadianSequenceContainer
A container containing 64 bit Radian values.
Definition SequenceContainer.h:1013
SequenceContainer< SquareMeter > SquareMeterSequenceContainer
A container containing 64 bit SquareMeter values.
Definition SequenceContainer.h:1025
SequenceContainer< RadianPerSecond > RadianPerSecondSequenceContainer
A container containing 64 bit RadianPerSecond values.
Definition SequenceContainer.h:1016
SequenceContainer< Second > SecondSequenceContainer
A container containing 64 bit Second values.
Definition SequenceContainer.h:1022
SequenceContainer< MeterPerSecondSquared > MeterPerSecondSquaredSequenceContainer
A container containing 64 bit MeterPerSecondSquared values.
Definition SequenceContainer.h:1004
SequenceContainer< Joule > JouleSequenceContainer
A container containing 64 bit Joule values.
Definition SequenceContainer.h:989
SequenceContainer< Steradian > SteradianSequenceContainer
A container containing 64 bit Steradian values.
Definition SequenceContainer.h:1028
SequenceContainer< MeterPerSecond > MeterPerSecondSequenceContainer
A container containing 64 bit MeterPerSecond values.
Definition SequenceContainer.h:1001
SequenceContainer< CubicMeter > CubicMeterSequenceContainer
A container containing 64 bit CubicMeter values.
Definition SequenceContainer.h:983
SequenceContainer< Pascal > PascalSequenceContainer
A container containing 64 bit Pascal values.
Definition SequenceContainer.h:1010
SequenceContainer< RadianPerSecondSquared > RadianPerSecondSquaredSequenceContainer
A container containing 64 bit RadianPerSecondSquared values.
Definition SequenceContainer.h:1019
SequenceContainer< Volt > VoltSequenceContainer
A container containing 64 bit Volt values.
Definition SequenceContainer.h:1031
SequenceContainer< Kelvin > KelvinSequenceContainer
A container containing 64 bit Kelvin values.
Definition SequenceContainer.h:992
SequenceContainer< Kilogram > KilogramSequenceContainer
A container containing 64 bit Kilogram values.
Definition SequenceContainer.h:995
DOTS_CPP_API void MergeChanges(ObjectPtr into, const ObjectConstPtr &from)
Merge the changed members (recursively) from one object into another.
Base class for all Containers.
Definition ContainerBase.h:44
bool m_bIsChanged
The variable containing the change flag.
Definition ContainerBase.h:127
A parameter in the call was invalid.
Definition Exceptions.h:264
Meant to be used when something goes very wrong.
Definition Exceptions.h:364
Container class for sequences of values.
Definition SequenceContainer.h:53
const ContainedType & at(const size_t index) const
Get const reference to the value with specified index.
Definition SequenceContainer.h:151
void SetNull() override
Set the container to null.
Definition SequenceContainer.h:73
SequenceContainer()
Default Constructor.
Definition SequenceContainer.h:65
const ContainedType & operator[](const size_t index) const
Get const reference to the value with specified index.
Definition SequenceContainer.h:139
size_t size() const
Get the size of the sequence, i.e number of contained values.
Definition SequenceContainer.h:83
void InsertAt(const size_t index, const ContainedType &value)
Insert a new value at specified index.
Definition SequenceContainer.h:207
const_iterator end() const
Get const_iterator pointing past the last element in the sequence.
Definition SequenceContainer.h:118
StorageType::const_iterator const_iterator
Definition SequenceContainer.h:58
void SetVal(const size_t index, const ContainedType &val)
Update a specific value.
Definition SequenceContainer.h:177
const ContainedType & back() const
Get a const reference to the last value in the sequence.
Definition SequenceContainer.h:104
const_iterator begin() const
Get const_iterator pointing to the first element in the sequence.
Definition SequenceContainer.h:111
bool IsNull() const override
Is the container set to null?
Definition SequenceContainer.h:71
const ContainedType & GetVal(const size_t index) const
Get const reference to the value with specified index.
Definition SequenceContainer.h:194
bool empty() const
Check if sequence is empty.
Definition SequenceContainer.h:90
const ContainedType & front() const
Get a const reference to the first value in the sequence.
Definition SequenceContainer.h:97
void EraseAt(const size_t index)
Erase a value at specified index.
Definition SequenceContainer.h:220
std::deque< T > StorageType
Definition SequenceContainer.h:57
void clear()
Clear the sequence, i.e remove all values.
Definition SequenceContainer.h:125
void push_back(const ContainedType &val)
Insert a new value last in the sequence.
Definition SequenceContainer.h:162
T ContainedType
Definition SequenceContainer.h:56
void Copy(const ContainerBase &that) override
Copy all the members from "that" into "this".
Definition SequenceContainer.h:234
Base class for containers for sequences of enumeration values.
Definition SequenceContainer.h:274
virtual EnumerationValue GetOrdinal(const size_t index) const =0
Get the ordinal value of the value at the specified index.
virtual void PushBackOrdinal(const EnumerationValue val)=0
Insert a new ordinal value last in the sequence.
virtual void clear()=0
Clear the sequence, i.e remove all values.
virtual size_t size() const =0
Get the size of the sequence, i.e number of contained values.
EnumerationSequenceContainerBase()
Default Constructor.
Definition SequenceContainer.h:281
void SetNull() override
Set the container to null.
Definition SequenceContainer.h:288
virtual void InsertOrdinalAt(const size_t index, EnumerationValue value)=0
Insert a new ordinal value at specified index, growing the sequence.
virtual void SetOrdinal(const size_t index, const EnumerationValue val)=0
Update a specific value, using ordinal value.
bool IsNull() const override
Is the container set to null?
Definition SequenceContainer.h:286
virtual bool empty() const =0
Check if sequence is empty.
virtual void EraseAt(const size_t index)=0
Erase a value at specified index.
Container for sequences of enumeration values.
Definition SequenceContainer.h:362
EnumerationValue GetOrdinal(const size_t index) const override
Get the ordinal value of the value at the specified index.
Definition SequenceContainer.h:514
T::Enumeration ContainedType
Definition SequenceContainer.h:364
const_iterator begin() const
Get const_iterator pointing to the first element in the sequence.
Definition SequenceContainer.h:399
void Copy(const ContainerBase &that) override
Copy all the members from "that" into "this".
Definition SequenceContainer.h:558
void InsertAt(const size_t index, ContainedType value)
Insert a new value at specified index.
Definition SequenceContainer.h:527
ContainedType at(const size_t index) const
Get the value at the specified index.
Definition SequenceContainer.h:440
std::deque< ContainedType > StorageType
Definition SequenceContainer.h:365
StorageType::const_iterator const_iterator
Definition SequenceContainer.h:366
void push_back(const ContainedType val)
Insert a new value last in the sequence.
Definition SequenceContainer.h:453
void InsertOrdinalAt(const size_t index, EnumerationValue value) override
Insert a new ordinal value at specified index, growing the sequence.
Definition SequenceContainer.h:533
const_iterator end() const
Get const_iterator pointing past the last element in the sequence.
Definition SequenceContainer.h:405
void EraseAt(const size_t index) override
Erase a value at specified index.
Definition SequenceContainer.h:544
bool empty() const override
Check if sequence is empty.
Definition SequenceContainer.h:381
void SetVal(const size_t index, const ContainedType val)
Update a specific value.
Definition SequenceContainer.h:479
EnumerationSequenceContainer()
Default Constructor.
Definition SequenceContainer.h:373
void clear() override
Clear the sequence, i.e remove all values.
Definition SequenceContainer.h:413
ContainedType front() const
Get a const reference to the first value in the sequence.
Definition SequenceContainer.h:387
ContainedType back() const
Get a const reference to the last value in the sequence.
Definition SequenceContainer.h:393
void SetOrdinal(const size_t index, const EnumerationValue val) override
Update a specific value, using ordinal value.
Definition SequenceContainer.h:498
ContainedType operator[](const size_t index) const
Get the value at the specified index.
Definition SequenceContainer.h:427
ContainedType GetVal(const size_t index) const
Get the value at the specified index.
Definition SequenceContainer.h:492
void PushBackOrdinal(const EnumerationValue val) override
Insert a new ordinal value last in the sequence.
Definition SequenceContainer.h:459
size_t size() const override
Get the size of the sequence, i.e number of contained values.
Definition SequenceContainer.h:379
Base class for all object sequences.
Definition SequenceContainer.h:582
virtual size_t size() const =0
Get the size of the sequence, i.e number of contained values.
virtual ObjectPtr GetObjectPointer(const size_t index)=0
Get a generic pointer to the object at the specified index.
virtual ObjectPtr GetObj(const size_t index)=0
Get a generic pointer to the object at the specified index.
virtual ObjectConstPtr GetObjectPointer(const size_t index) const =0
Get a const generic pointer to the object at the specified index.
virtual bool IsChangedHere() const =0
Is the change flag in the container set?
virtual void SetChangedHere(const bool changed)=0
Set the change flag in the container.
virtual void PushBackObjectPointer(const ObjectPtr &ptr)=0
Insert a new object last in the sequence.
virtual ObjectConstPtr GetObj(const size_t index) const =0
Get a const generic pointer to the object at the specified index.
virtual void SetObjectPointer(const size_t index, const ObjectPtr &ptr)=0
Set the smart pointer at a certain index in the container.
ObjectConstPtr GetObj(const size_t index) const override
Get a const generic pointer to the object at the specified index.
Definition SequenceContainer.h:751
void SetObjectPointer(const size_t index, const ObjectPtr &ptr) override
Set the smart pointer at a certain index in the container.
Definition SequenceContainer.h:799
std::shared_ptr< T > T_Ptr
Typedef for the contained smart pointer.
Definition SequenceContainer.h:708
std::shared_ptr< const T > GetPtr(const size_t index) const
Get the object at the specified index, const version.
Definition SequenceContainer.h:777
ObjectPtr GetObjectPointer(const size_t index) override
Get a generic pointer to the object at the specified index.
Definition SequenceContainer.h:765
ObjectPtr GetObj(const size_t index) override
Get a generic pointer to the object at the specified index.
Definition SequenceContainer.h:750
T_Ptr GetPtr(const size_t index)
Get the object at the specified index.
Definition SequenceContainer.h:760
void SetChanged(const bool changed) override
Set the containers change flag.
Definition SequenceContainer.h:733
void SetChangedHere(const bool changed) override
Set the change flag in the container.
Definition SequenceContainer.h:743
ObjectConstPtr GetObjectPointer(const size_t index) const override
Get a const generic pointer to the object at the specified index.
Definition SequenceContainer.h:782
size_t size() const override
Get the size of the sequence, i.e number of contained values.
Definition SequenceContainer.h:748
void PushBackObjectPointer(const ObjectPtr &ptr) override
Insert a new object last in the sequence.
Definition SequenceContainer.h:809
bool IsChanged() const override
Is the change flag set on the container?
Definition SequenceContainer.h:710
bool IsChangedHere() const override
Is the change flag in the container set?
Definition SequenceContainer.h:728
void SetPtr(const size_t index, const T_Ptr &ptr)
Set a the object pointer a the specified index.
Definition SequenceContainer.h:794