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
36namespace Safir
37{
38namespace Dob
39{
40namespace Typesystem
41{
50 template <class T>
52 {
53 public:
54
55 typedef T ContainedType;
56 typedef std::deque<T> StorageType; //we use std::deque instead of std::vector, to avoid std::vector<bool> specialization
57 typedef typename StorageType::const_iterator const_iterator;
58
66 ,m_values()
67 {
68 }
69
70 bool IsNull() const override {return empty();}
71
72 bool HasVal() const override {return !empty();}
73
74
75 void SetNull() override
76 {
77 clear();
78 }
79
85 size_t size() const {return m_values.size();}
86
92 bool empty() const {return m_values.empty();}
93
99 const ContainedType& front() const {return m_values.front();}
100
106 const ContainedType& back() const {return m_values.back();}
107
113 const_iterator begin() const {return m_values.begin();}
114
120 const_iterator end() const {return m_values.end();}
121
127 void clear()
128 {
129 m_bIsChanged=true;
130 m_values.clear();
131 }
132
141 const ContainedType& operator [](const size_t index) const
142 {
143 return m_values[index];
144 }
145
153 const ContainedType& at(const size_t index) const
154 {
155 return m_values.at(index);
156 }
157
164 void push_back(const ContainedType& val)
165 {
166 m_bIsChanged=true;
167 m_values.push_back(val);
168 }
169
179 void SetVal(const size_t index, const ContainedType& val)
180 {
181 if (index >= m_values.size())
182 {
183 throw std::out_of_range("Index out of range.");
184 }
185 m_bIsChanged=true;
186 m_values[index]=val;
187 }
188
196 const ContainedType& GetVal(const size_t index) const
197 {
198 return m_values.at(index);
199 }
200
209 void InsertAt(const size_t index, const ContainedType& value)
210 {
211 m_bIsChanged=true;
212 m_values.insert(m_values.begin()+index, value);
213 }
214
222 void EraseAt(const size_t index)
223 {
224 m_bIsChanged=true;
225 m_values.erase(m_values.begin()+index);
226 }
227
236 void Copy(const ContainerBase& that) override
237 {
238 if (this != &that)
239 {
240 if (typeid(*this) != typeid(that))
241 {
242 throw SoftwareViolationException(L"Invalid call to Copy, containers are not of same type",__WFILE__,__LINE__);
243 }
244
246 static_cast<const SequenceContainer<ContainedType>& >(that);
247
249 m_values.clear();
250 for (typename StorageType::const_iterator it=other.m_values.begin(); it!=other.m_values.end(); ++it)
251 {
252 m_values.push_back(SequenceCopyHelper<ContainedType>::Copy(*it));
253 }
254 }
255 }
256
257 private:
258 template <class U> struct SequenceCopyHelper
259 {
260 static U Copy(const U& val) {return val;}
261 };
262
263 template <class U> struct SequenceCopyHelper< std::shared_ptr<U> >
264 {
265 static std::shared_ptr<U> Copy(const std::shared_ptr<U> & val) {return std::static_pointer_cast<U>(val->Clone());}
266 };
267
268 StorageType m_values;
269 };
270
276 {
277 public:
287
288 bool IsNull() const override {return empty();}
289
290 bool HasVal() const override {return !empty();}
291
292 void SetNull() override
293 {
294 clear();
295 }
296
301 virtual size_t size() const = 0;
302
307 virtual bool empty() const = 0;
308
314 virtual void clear() = 0;
315
324 virtual void PushBackOrdinal(const EnumerationValue val) = 0;
325
334 virtual void SetOrdinal(const size_t index, const EnumerationValue val) = 0;
335
343 virtual EnumerationValue GetOrdinal(const size_t index) const = 0;
344
352 virtual void InsertOrdinalAt(const size_t index, EnumerationValue value) = 0;
353
358 virtual void EraseAt(const size_t index) = 0;
359 };
360
364 template <class T>
366 {
367 public:
368 typedef typename T::Enumeration ContainedType;
369 typedef std::deque<ContainedType> StorageType; //we use std::deque instead of std::vector, to avoid std::vector<bool> specialization
370 typedef typename StorageType::const_iterator const_iterator;
371
382
383 size_t size() const override {return m_values.size();}
384
385 bool empty() const override {return m_values.empty();}
386
391 ContainedType front() const {return m_values.front();}
392
397 ContainedType back() const {return m_values.back();}
398
403 const_iterator begin() const {return m_values.begin();}
404
409 const_iterator end() const {return m_values.end();}
410
417 void clear() override
418 {
419 m_bIsChanged=true;
420 m_values.clear();
421 }
422
431 ContainedType operator[](const size_t index) const
432 {
433 T::CheckForMismatch();
434 return m_values[index];
435 }
436
444 ContainedType at(const size_t index) const
445 {
446 T::CheckForMismatch();
447 return m_values.at(index);
448 }
449
457 void push_back(const ContainedType val)
458 {
459 T::CheckForMismatch();
460 PushBackOrdinal(val);
461 }
462
463 void PushBackOrdinal(const EnumerationValue val) override
464 {
465 if (val < T::FirstOrdinal() || val > T::LastOrdinal())
466 {
467 throw Safir::Dob::Typesystem::IllegalValueException(L"The enumerated type DotsTest.TestEnum does not have such a value",__WFILE__,__LINE__);
468 }
469 m_bIsChanged=true;
470 m_values.push_back(static_cast<ContainedType>(val));
471 }
472
473
483 void SetVal(const size_t index, const ContainedType val)
484 {
485 T::CheckForMismatch();
486 SetOrdinal(index, val);
487 }
488
496 ContainedType GetVal(const size_t index) const
497 {
498 T::CheckForMismatch();
499 return m_values.at(index);
500 }
501
502 void SetOrdinal(const size_t index, const EnumerationValue val) override
503 {
504 if (index >= m_values.size())
505 {
506 throw std::out_of_range("Index out of range.");
507 }
508
509 if (val < T::FirstOrdinal() || val > T::LastOrdinal())
510 {
511 throw Safir::Dob::Typesystem::IllegalValueException(L"The enumerated type DotsTest.TestEnum does not have such a value",__WFILE__,__LINE__);
512 }
513
514 m_bIsChanged=true;
515 m_values[index]=static_cast<ContainedType>(val);
516 }
517
518 EnumerationValue GetOrdinal(const size_t index) const override
519 {
520 return m_values.at(index);
521 }
522
531 void InsertAt(const size_t index, ContainedType value)
532 {
533 T::CheckForMismatch();
534 InsertOrdinalAt(index, value);
535 }
536
537 void InsertOrdinalAt(const size_t index, EnumerationValue value) override
538 {
539 if (value < T::FirstOrdinal() || value > T::LastOrdinal())
540 {
541 throw Safir::Dob::Typesystem::IllegalValueException(L"The enumerated type DotsTest.TestEnum does not have such a value",__WFILE__,__LINE__);
542 }
543
544 m_bIsChanged=true;
545 m_values.insert(m_values.begin()+index, static_cast<ContainedType>(value));
546 }
547
548 void EraseAt(const size_t index) override
549 {
550 m_bIsChanged=true;
551 m_values.erase(m_values.begin()+index);
552 }
553
562 void Copy(const ContainerBase& that) override
563 {
564 if (this != &that)
565 {
566 if (typeid(*this) != typeid(that))
567 {
568 throw SoftwareViolationException(L"Invalid call to Copy, containers are not of same type",__WFILE__,__LINE__);
569 }
570
571 const auto& other=
572 static_cast<const EnumerationSequenceContainer<T>& >(that);
573
574 m_bIsChanged = other.m_bIsChanged;
575 m_values = other.m_values;
576 }
577 }
578
579 private:
580 StorageType m_values;
581 };
582
583
586 {
587 public:
595 virtual bool IsChangedHere() const = 0;
596
604 virtual void SetChangedHere(const bool changed) = 0;
605
610 virtual size_t size() const = 0;
611
619#ifndef SAFIR_NO_DEPRECATED
633 virtual ObjectPtr GetObj(const size_t index) = 0;
634
648 virtual ObjectConstPtr GetObj(const size_t index) const = 0;
649#endif
657 virtual ObjectPtr GetObjectPointer(const size_t index) = 0;
658
666 virtual ObjectConstPtr GetObjectPointer(const size_t index) const = 0;
667
678 virtual void SetObjectPointer(const size_t index, const ObjectPtr& ptr) = 0;
679
688 virtual void PushBackObjectPointer(const ObjectPtr& ptr) = 0;
689
691
692 private:
693 friend void Utilities::MergeChanges(ObjectPtr into, const ObjectConstPtr& from);
694
700 virtual void Merge(const GenericObjectSequenceContainerBase& other) = 0;
701 };
702
703
704 template <class T>
706 : public SequenceContainer<std::shared_ptr<T> >
708 {
710 public:
712 typedef std::shared_ptr<T> T_Ptr;
713
714 bool IsChanged() const override
715 {
717 {
718 return true;
719 }
720
721 for (typename Base::const_iterator it=Base::begin(); it!=Base::end(); ++it)
722 {
723 if ((*it)->IsChanged()) //something in an object has changed
724 {
725 return true;
726 }
727 }
728
729 return false;
730 }
731
732 bool IsChangedHere() const override
733 {
734 return Base::m_bIsChanged;
735 }
736
737 void SetChanged(const bool changed) override
738 {
739 Base::m_bIsChanged = changed;
740
741 for (typename Base::const_iterator it=Base::begin(); it!=Base::end(); ++it)
742 {
743 (*it)->SetChanged(changed);
744 }
745 }
746
747 void SetChangedHere(const bool changed) override
748 {
749 Base::m_bIsChanged = changed;
750 }
751
752 size_t size() const override {return Base::size();}
753#ifndef SAFIR_NO_DEPRECATED
754 ObjectPtr GetObj(const size_t index) override {return Base::operator[](index);}
755 ObjectConstPtr GetObj(const size_t index) const override {return Base::operator[](index);}
756#endif
764 T_Ptr GetPtr(const size_t index)
765 {
766 return Base::at(index);
767 }
768
769 ObjectPtr GetObjectPointer(const size_t index) override
770 {
771 return GetPtr(index);
772 }
773
781 std::shared_ptr<const T> GetPtr(const size_t index) const
782 {
783 return Base::at(index);
784 }
785
786 ObjectConstPtr GetObjectPointer(const size_t index) const override
787 {
788 return GetPtr(index);
789 }
790
798 void SetPtr(const size_t index, const T_Ptr& ptr)
799 {
800 Base::SetVal(index, ptr);
801 }
802
803 void SetObjectPointer(const size_t index, const ObjectPtr& ptr) override
804 {
805 const auto tptr = std::dynamic_pointer_cast<T>(ptr);
806 if (tptr == nullptr)
807 {
808 throw SoftwareViolationException(L"Invalid call to SetPtr, incompatible types!", __WFILE__,__LINE__);
809 }
810 SetPtr(index, tptr);
811 }
812
813 void PushBackObjectPointer(const ObjectPtr& ptr) override
814 {
815 const auto tptr = std::dynamic_pointer_cast<T>(ptr);
816 if (tptr == nullptr)
817 {
818 throw SoftwareViolationException(L"Invalid call to PushBackObjectPointer, incompatible types!", __WFILE__,__LINE__);
819 }
820 Base::push_back(tptr);
821 }
822
823 private:
824#ifdef SAFIR_NO_DEPRECATED
825 void SetVal(const size_t index, const typename Base::ContainedType& val) = delete;
826 const typename Base::ContainedType& GetVal(const size_t index) const = delete;
827#endif
828
829 void Merge(const GenericObjectSequenceContainerBase& that) override
830 {
831#ifndef NDEBUG
832 if (typeid(GenericObjectSequenceContainer<T>) != typeid(that))
833 {
834 throw SoftwareViolationException(L"Invalid call to Merge, containers are not of same type",
835 __WFILE__,__LINE__);
836 }
837#endif
838
839 const GenericObjectSequenceContainer<T>& other =
840 static_cast<const GenericObjectSequenceContainer<T>&>(that);
841
842 //Note: this function only gets called when IsChangedHere() == false
843
844 if (!other.IsChanged())
845 {
846 return;
847 }
848
849 if (Base::size() != other.size())
850 {
851 throw SoftwareViolationException(L"It is not possible to merge two object sequences of different sizes.",
852 __WFILE__,__LINE__);
853 }
854
855 for (size_t i = 0; i < Base::size(); ++i)
856 {
857 if (other.at(i)->IsChanged())
858 {
859 //recurse
860 Utilities::MergeChanges(Base::at(i),other.at(i));
861 }
862 }
863 }
864 };
865
866
872
873
876
879
882
885
888
891
894
897
900
903
906
909
912
914
915 //--------------------------------------------------
916 // SI-types (32-bits)
917 //--------------------------------------------------
918 namespace Si32
919 {
922
925
928
931
934
937
940
943
946
949
952
955
958
961
964
967
970
973
976 }
977
978 //--------------------------------------------------
979 // SI-types (64-bits)
980 //--------------------------------------------------
981 namespace Si64
982 {
985
988
991
994
997
1000
1003
1006
1009
1012
1015
1018
1021
1024
1027
1030
1033
1036
1039 }
1040}
1041}
1042}
#define __WFILE__
Definition Exceptions.h:31
This namespace contains all the functionality and definitions of the SAFIR SDK.
Definition Backdoor.h:31
This namespace contains all functionality of the DOB (Components DOSE and DOTS).
Definition Connection.h:38
This namespace contains the DOB Typesystem functionality and definitions.
Definition ArrayContainer.h:37
DotsC_EnumerationValue EnumerationValue
The ordinal value of an enumeration.
Definition Defs.h:270
SequenceContainer< HandlerId > HandlerIdSequenceContainer
A container containing HandlerId values.
Definition SequenceContainer.h:905
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:911
SequenceContainer< TypeId > TypeIdSequenceContainer
A container containing TypeId values.
Definition SequenceContainer.h:893
SequenceContainer< EntityId > EntityIdSequenceContainer
A container containing EntityId values.
Definition SequenceContainer.h:899
SequenceContainer< Float64 > Float64SequenceContainer
A container containing 64 bit floating point values.
Definition SequenceContainer.h:890
SequenceContainer< std::wstring > StringSequenceContainer
A container containing string values.
Definition SequenceContainer.h:875
SequenceContainer< Binary > BinarySequenceContainer
A container containing Binary values.
Definition SequenceContainer.h:908
SequenceContainer< Int32 > Int32SequenceContainer
A container containing 32 bit integer values.
Definition SequenceContainer.h:881
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:884
SequenceContainer< bool > BooleanSequenceContainer
A container containing boolean values.
Definition SequenceContainer.h:878
SequenceContainer< ChannelId > ChannelIdSequenceContainer
A container containing ChannelId values.
Definition SequenceContainer.h:902
SequenceContainer< InstanceId > InstanceIdSequenceContainer
A container containing InstanceId values.
Definition SequenceContainer.h:896
SequenceContainer< Float32 > Float32SequenceContainer
A container containing 32 bit floating point values.
Definition SequenceContainer.h:887
32 bit SI-types.
Definition ArrayContainer.h:256
SequenceContainer< Kelvin > KelvinSequenceContainer
A container containing 32 bit Kelvin values.
Definition SequenceContainer.h:933
SequenceContainer< CubicMeter > CubicMeterSequenceContainer
A container containing 32 bit CubicMeter values.
Definition SequenceContainer.h:924
SequenceContainer< SquareMeter > SquareMeterSequenceContainer
A container containing 32 bit SquareMeter values.
Definition SequenceContainer.h:966
SequenceContainer< Joule > JouleSequenceContainer
A container containing 32 bit Joule values.
Definition SequenceContainer.h:930
SequenceContainer< MeterPerSecondSquared > MeterPerSecondSquaredSequenceContainer
A container containing 32 bit MeterPerSecondSquared values.
Definition SequenceContainer.h:945
SequenceContainer< Pascal > PascalSequenceContainer
A container containing 32 bit Pascal values.
Definition SequenceContainer.h:951
SequenceContainer< Hertz > HertzSequenceContainer
A container containing 32 bit Hertz values.
Definition SequenceContainer.h:927
SequenceContainer< MeterPerSecond > MeterPerSecondSequenceContainer
A container containing 32 bit MeterPerSecond values.
Definition SequenceContainer.h:942
SequenceContainer< RadianPerSecond > RadianPerSecondSequenceContainer
A container containing 32 bit RadianPerSecond values.
Definition SequenceContainer.h:957
SequenceContainer< Radian > RadianSequenceContainer
A container containing 32 bit Radian values.
Definition SequenceContainer.h:954
SequenceContainer< Ampere > AmpereSequenceContainer
A container containing 32 bit Ampere values.
Definition SequenceContainer.h:921
SequenceContainer< RadianPerSecondSquared > RadianPerSecondSquaredSequenceContainer
A container containing 32 bit RadianPerSecondSquared values.
Definition SequenceContainer.h:960
SequenceContainer< Meter > MeterSequenceContainer
A container containing 32 bit Meter values.
Definition SequenceContainer.h:939
SequenceContainer< Steradian > SteradianSequenceContainer
A container containing 32 bit Steradian values.
Definition SequenceContainer.h:969
SequenceContainer< Newton > NewtonSequenceContainer
A container containing 32 bit Newton values.
Definition SequenceContainer.h:948
SequenceContainer< Watt > WattSequenceContainer
A container containing 32 bit Watt values.
Definition SequenceContainer.h:975
SequenceContainer< Kilogram > KilogramSequenceContainer
A container containing 32 bit Kilogram values.
Definition SequenceContainer.h:936
SequenceContainer< Volt > VoltSequenceContainer
A container containing 32 bit Volt values.
Definition SequenceContainer.h:972
SequenceContainer< Second > SecondSequenceContainer
A container containing 32 bit Second values.
Definition SequenceContainer.h:963
64 bit SI-types.
Definition ArrayContainer.h:319
SequenceContainer< Hertz > HertzSequenceContainer
A container containing 64 bit Hertz values.
Definition SequenceContainer.h:990
SequenceContainer< Watt > WattSequenceContainer
A container containing 64 bit Watt values.
Definition SequenceContainer.h:1038
SequenceContainer< Meter > MeterSequenceContainer
A container containing 64 bit Meter values.
Definition SequenceContainer.h:1002
SequenceContainer< Newton > NewtonSequenceContainer
A container containing 64 bit Newton values.
Definition SequenceContainer.h:1011
SequenceContainer< Ampere > AmpereSequenceContainer
A container containing 64 bit Ampere values.
Definition SequenceContainer.h:984
SequenceContainer< Radian > RadianSequenceContainer
A container containing 64 bit Radian values.
Definition SequenceContainer.h:1017
SequenceContainer< SquareMeter > SquareMeterSequenceContainer
A container containing 64 bit SquareMeter values.
Definition SequenceContainer.h:1029
SequenceContainer< RadianPerSecond > RadianPerSecondSequenceContainer
A container containing 64 bit RadianPerSecond values.
Definition SequenceContainer.h:1020
SequenceContainer< Second > SecondSequenceContainer
A container containing 64 bit Second values.
Definition SequenceContainer.h:1026
SequenceContainer< MeterPerSecondSquared > MeterPerSecondSquaredSequenceContainer
A container containing 64 bit MeterPerSecondSquared values.
Definition SequenceContainer.h:1008
SequenceContainer< Joule > JouleSequenceContainer
A container containing 64 bit Joule values.
Definition SequenceContainer.h:993
SequenceContainer< Steradian > SteradianSequenceContainer
A container containing 64 bit Steradian values.
Definition SequenceContainer.h:1032
SequenceContainer< MeterPerSecond > MeterPerSecondSequenceContainer
A container containing 64 bit MeterPerSecond values.
Definition SequenceContainer.h:1005
SequenceContainer< CubicMeter > CubicMeterSequenceContainer
A container containing 64 bit CubicMeter values.
Definition SequenceContainer.h:987
SequenceContainer< Pascal > PascalSequenceContainer
A container containing 64 bit Pascal values.
Definition SequenceContainer.h:1014
SequenceContainer< RadianPerSecondSquared > RadianPerSecondSquaredSequenceContainer
A container containing 64 bit RadianPerSecondSquared values.
Definition SequenceContainer.h:1023
SequenceContainer< Volt > VoltSequenceContainer
A container containing 64 bit Volt values.
Definition SequenceContainer.h:1035
SequenceContainer< Kelvin > KelvinSequenceContainer
A container containing 64 bit Kelvin values.
Definition SequenceContainer.h:996
SequenceContainer< Kilogram > KilogramSequenceContainer
A container containing 64 bit Kilogram values.
Definition SequenceContainer.h:999
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:134
constexpr ContainerBase()
Default Constructor.
Definition ContainerBase.h:51
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:52
const ContainedType & at(const size_t index) const
Get const reference to the value with specified index.
Definition SequenceContainer.h:153
void SetNull() override
Set the container to null.
Definition SequenceContainer.h:75
SequenceContainer()
Default Constructor.
Definition SequenceContainer.h:64
const ContainedType & operator[](const size_t index) const
Get const reference to the value with specified index.
Definition SequenceContainer.h:141
size_t size() const
Get the size of the sequence, i.e number of contained values.
Definition SequenceContainer.h:85
void InsertAt(const size_t index, const ContainedType &value)
Insert a new value at specified index.
Definition SequenceContainer.h:209
const_iterator end() const
Get const_iterator pointing past the last element in the sequence.
Definition SequenceContainer.h:120
StorageType::const_iterator const_iterator
Definition SequenceContainer.h:57
void SetVal(const size_t index, const ContainedType &val)
Update a specific value.
Definition SequenceContainer.h:179
const ContainedType & back() const
Get a const reference to the last value in the sequence.
Definition SequenceContainer.h:106
const_iterator begin() const
Get const_iterator pointing to the first element in the sequence.
Definition SequenceContainer.h:113
bool IsNull() const override
Is the container set to null?
Definition SequenceContainer.h:70
const ContainedType & GetVal(const size_t index) const
Get const reference to the value with specified index.
Definition SequenceContainer.h:196
bool empty() const
Check if sequence is empty.
Definition SequenceContainer.h:92
const ContainedType & front() const
Get a const reference to the first value in the sequence.
Definition SequenceContainer.h:99
bool HasVal() const override
Does the container have a value?
Definition SequenceContainer.h:72
void EraseAt(const size_t index)
Erase a value at specified index.
Definition SequenceContainer.h:222
std::deque< T > StorageType
Definition SequenceContainer.h:56
void clear()
Clear the sequence, i.e remove all values.
Definition SequenceContainer.h:127
void push_back(const ContainedType &val)
Insert a new value last in the sequence.
Definition SequenceContainer.h:164
T ContainedType
Definition SequenceContainer.h:55
void Copy(const ContainerBase &that) override
Copy all the members from "that" into "this".
Definition SequenceContainer.h:236
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:283
bool HasVal() const override
Does the container have a value?
Definition SequenceContainer.h:290
void SetNull() override
Set the container to null.
Definition SequenceContainer.h:292
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:288
virtual bool empty() const =0
Check if sequence is empty.
virtual void EraseAt(const size_t index)=0
Erase a value at specified index.
EnumerationValue GetOrdinal(const size_t index) const override
Get the ordinal value of the value at the specified index.
Definition SequenceContainer.h:518
T::Enumeration ContainedType
Definition SequenceContainer.h:368
const_iterator begin() const
Get const_iterator pointing to the first element in the sequence.
Definition SequenceContainer.h:403
void Copy(const ContainerBase &that) override
Copy all the members from "that" into "this".
Definition SequenceContainer.h:562
void InsertAt(const size_t index, ContainedType value)
Insert a new value at specified index.
Definition SequenceContainer.h:531
ContainedType at(const size_t index) const
Get the value at the specified index.
Definition SequenceContainer.h:444
std::deque< ContainedType > StorageType
Definition SequenceContainer.h:369
StorageType::const_iterator const_iterator
Definition SequenceContainer.h:370
void push_back(const ContainedType val)
Insert a new value last in the sequence.
Definition SequenceContainer.h:457
void InsertOrdinalAt(const size_t index, EnumerationValue value) override
Insert a new ordinal value at specified index, growing the sequence.
Definition SequenceContainer.h:537
const_iterator end() const
Get const_iterator pointing past the last element in the sequence.
Definition SequenceContainer.h:409
void EraseAt(const size_t index) override
Erase a value at specified index.
Definition SequenceContainer.h:548
bool empty() const override
Check if sequence is empty.
Definition SequenceContainer.h:385
void SetVal(const size_t index, const ContainedType val)
Update a specific value.
Definition SequenceContainer.h:483
EnumerationSequenceContainer()
Default Constructor.
Definition SequenceContainer.h:377
void clear() override
Clear the sequence, i.e remove all values.
Definition SequenceContainer.h:417
ContainedType front() const
Get a const reference to the first value in the sequence.
Definition SequenceContainer.h:391
ContainedType back() const
Get a const reference to the last value in the sequence.
Definition SequenceContainer.h:397
void SetOrdinal(const size_t index, const EnumerationValue val) override
Update a specific value, using ordinal value.
Definition SequenceContainer.h:502
ContainedType operator[](const size_t index) const
Get the value at the specified index.
Definition SequenceContainer.h:431
ContainedType GetVal(const size_t index) const
Get the value at the specified index.
Definition SequenceContainer.h:496
void PushBackOrdinal(const EnumerationValue val) override
Insert a new ordinal value last in the sequence.
Definition SequenceContainer.h:463
size_t size() const override
Get the size of the sequence, i.e number of contained values.
Definition SequenceContainer.h:383
Base class for all object sequences.
Definition SequenceContainer.h:586
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:755
void SetObjectPointer(const size_t index, const ObjectPtr &ptr) override
Set the smart pointer at a certain index in the container.
Definition SequenceContainer.h:803
std::shared_ptr< T > T_Ptr
Typedef for the contained smart pointer.
Definition SequenceContainer.h:712
std::shared_ptr< const T > GetPtr(const size_t index) const
Get the object at the specified index, const version.
Definition SequenceContainer.h:781
ObjectPtr GetObjectPointer(const size_t index) override
Get a generic pointer to the object at the specified index.
Definition SequenceContainer.h:769
ObjectPtr GetObj(const size_t index) override
Get a generic pointer to the object at the specified index.
Definition SequenceContainer.h:754
T_Ptr GetPtr(const size_t index)
Get the object at the specified index.
Definition SequenceContainer.h:764
void SetChanged(const bool changed) override
Set the containers change flag.
Definition SequenceContainer.h:737
void SetChangedHere(const bool changed) override
Set the change flag in the container.
Definition SequenceContainer.h:747
ObjectConstPtr GetObjectPointer(const size_t index) const override
Get a const generic pointer to the object at the specified index.
Definition SequenceContainer.h:786
size_t size() const override
Get the size of the sequence, i.e number of contained values.
Definition SequenceContainer.h:752
void PushBackObjectPointer(const ObjectPtr &ptr) override
Insert a new object last in the sequence.
Definition SequenceContainer.h:813
bool IsChanged() const override
Is the change flag set on the container?
Definition SequenceContainer.h:714
bool IsChangedHere() const override
Is the change flag in the container set?
Definition SequenceContainer.h:732
void SetPtr(const size_t index, const T_Ptr &ptr)
Set a the object pointer a the specified index.
Definition SequenceContainer.h:798