1 /**
2 * @file SedRepeatedTask.cpp
3 * @brief Implementation of the SedRepeatedTask class.
4 * @author DEVISER
5 *
6 * <!--------------------------------------------------------------------------
7 * This file is part of libSEDML. Please visit http://sed-ml.org for more
8 * information about SED-ML. The latest version of libSEDML can be found on
9 * github: https://github.com/fbergmann/libSEDML/
10 *
11
12 * Copyright (c) 2013-2019, Frank T. Bergmann
13 * All rights reserved.
14 *
15
16 * Redistribution and use in source and binary forms, with or without
17 * modification, are permitted provided that the following conditions are met:
18 *
19
20 * 1. Redistributions of source code must retain the above copyright notice,
21 * this
22 * list of conditions and the following disclaimer.
23 * 2. Redistributions in binary form must reproduce the above copyright notice,
24 * this list of conditions and the following disclaimer in the documentation
25 * and/or other materials provided with the distribution.
26 *
27 * This library is free software; you can redistribute it and/or modify it
28 * under the terms of the GNU Lesser General Public License as published by the
29 * Free Software Foundation. A copy of the license agreement is provided in the
30 * file named "LICENSE.txt" included with this software distribution and also
31 * available online as http://sbml.org/software/libsbml/license.html
32 * ------------------------------------------------------------------------ -->
33 */
34 #include <sedml/SedRepeatedTask.h>
35 #include <sbml/xml/XMLInputStream.h>
36
37 #include <sedml/SedUniformRange.h>
38 #include <sedml/SedVectorRange.h>
39 #include <sedml/SedFunctionalRange.h>
40 #include <sedml/SedDataRange.h>
41
42
43 using namespace std;
44
45
46
47 LIBSEDML_CPP_NAMESPACE_BEGIN
48
49
50
51
52 #ifdef __cplusplus
53
54
55 /*
56 * Creates a new SedRepeatedTask using the given SED-ML Level and @ p version
57 * values.
58 */
SedRepeatedTask(unsigned int level,unsigned int version)59 SedRepeatedTask::SedRepeatedTask(unsigned int level, unsigned int version)
60 : SedAbstractTask(level, version)
61 , mRange ("")
62 , mResetModel (false)
63 , mIsSetResetModel (false)
64 , mConcatenate (false)
65 , mIsSetConcatenate (false)
66 , mRanges (level, version)
67 , mSetValues (level, version)
68 , mSubTasks (level, version)
69 {
70 setSedNamespacesAndOwn(new SedNamespaces(level, version));
71 connectToChild();
72 }
73
74
75 /*
76 * Creates a new SedRepeatedTask using the given SedNamespaces object @p
77 * sedmlns.
78 */
SedRepeatedTask(SedNamespaces * sedmlns)79 SedRepeatedTask::SedRepeatedTask(SedNamespaces *sedmlns)
80 : SedAbstractTask(sedmlns)
81 , mRange ("")
82 , mResetModel (false)
83 , mIsSetResetModel (false)
84 , mConcatenate(false)
85 , mIsSetConcatenate(false)
86 , mRanges (sedmlns)
87 , mSetValues (sedmlns)
88 , mSubTasks (sedmlns)
89 {
90 setElementNamespace(sedmlns->getURI());
91 connectToChild();
92 }
93
94
95 /*
96 * Copy constructor for SedRepeatedTask.
97 */
SedRepeatedTask(const SedRepeatedTask & orig)98 SedRepeatedTask::SedRepeatedTask(const SedRepeatedTask& orig)
99 : SedAbstractTask( orig )
100 , mRange ( orig.mRange )
101 , mResetModel ( orig.mResetModel )
102 , mIsSetResetModel ( orig.mIsSetResetModel )
103 , mConcatenate( orig.mConcatenate)
104 , mIsSetConcatenate( orig.mIsSetConcatenate)
105 , mRanges ( orig.mRanges )
106 , mSetValues ( orig.mSetValues )
107 , mSubTasks ( orig.mSubTasks )
108 {
109 connectToChild();
110 }
111
112
113 /*
114 * Assignment operator for SedRepeatedTask.
115 */
116 SedRepeatedTask&
operator =(const SedRepeatedTask & rhs)117 SedRepeatedTask::operator=(const SedRepeatedTask& rhs)
118 {
119 if (&rhs != this)
120 {
121 SedAbstractTask::operator=(rhs);
122 mRange = rhs.mRange;
123 mResetModel = rhs.mResetModel;
124 mIsSetResetModel = rhs.mIsSetResetModel;
125 mConcatenate = rhs.mConcatenate;
126 mIsSetConcatenate = rhs.mIsSetConcatenate;
127 mRanges = rhs.mRanges;
128 mSetValues = rhs.mSetValues;
129 mSubTasks = rhs.mSubTasks;
130 connectToChild();
131 }
132
133 return *this;
134 }
135
136
137 /*
138 * Creates and returns a deep copy of this SedRepeatedTask object.
139 */
140 SedRepeatedTask*
clone() const141 SedRepeatedTask::clone() const
142 {
143 return new SedRepeatedTask(*this);
144 }
145
146
147 /*
148 * Destructor for SedRepeatedTask.
149 */
~SedRepeatedTask()150 SedRepeatedTask::~SedRepeatedTask()
151 {
152 }
153
154
155 /*
156 * Returns the value of the "range" attribute of this SedRepeatedTask.
157 */
158 const std::string&
getRangeId() const159 SedRepeatedTask::getRangeId() const
160 {
161 return mRange;
162 }
163
164
165 /*
166 * Returns the value of the "resetModel" attribute of this SedRepeatedTask.
167 */
168 bool
getResetModel() const169 SedRepeatedTask::getResetModel() const
170 {
171 return mResetModel;
172 }
173
174
175 /*
176 * Returns the value of the "concatenate" attribute of this SedRepeatedTask.
177 */
178 bool
getConcatenate() const179 SedRepeatedTask::getConcatenate() const
180 {
181 return mConcatenate;
182 }
183
184
185 /*
186 * Predicate returning @c true if this SedRepeatedTask's "range" attribute is
187 * set.
188 */
189 bool
isSetRangeId() const190 SedRepeatedTask::isSetRangeId() const
191 {
192 return (mRange.empty() == false);
193 }
194
195
196 /*
197 * Predicate returning @c true if this SedRepeatedTask's "resetModel" attribute
198 * is set.
199 */
200 bool
isSetResetModel() const201 SedRepeatedTask::isSetResetModel() const
202 {
203 return mIsSetResetModel;
204 }
205
206
207 /*
208 * Predicate returning @c true if this SedRepeatedTask's "concatenate" attribute
209 * is set.
210 */
211 bool
isSetConcatenate() const212 SedRepeatedTask::isSetConcatenate() const
213 {
214 return mIsSetConcatenate;
215 }
216
217
218 /*
219 * Sets the value of the "range" attribute of this SedRepeatedTask.
220 */
221 int
setRangeId(const std::string & rangeId)222 SedRepeatedTask::setRangeId(const std::string& rangeId)
223 {
224 if (!(SyntaxChecker::isValidInternalSId(rangeId)))
225 {
226 return LIBSEDML_INVALID_ATTRIBUTE_VALUE;
227 }
228 else
229 {
230 mRange = rangeId;
231 return LIBSEDML_OPERATION_SUCCESS;
232 }
233 }
234
235
236 /*
237 * Sets the value of the "resetModel" attribute of this SedRepeatedTask.
238 */
239 int
setResetModel(bool resetModel)240 SedRepeatedTask::setResetModel(bool resetModel)
241 {
242 mResetModel = resetModel;
243 mIsSetResetModel = true;
244 return LIBSEDML_OPERATION_SUCCESS;
245 }
246
247
248 /*
249 * Sets the value of the "concatenate" attribute of this SedRepeatedTask.
250 */
251 int
setConcatenate(bool concatenate)252 SedRepeatedTask::setConcatenate(bool concatenate)
253 {
254 if (getLevel() == 1 && getVersion() < 4)
255 {
256 return LIBSEDML_UNEXPECTED_ATTRIBUTE;
257 }
258 mConcatenate= concatenate;
259 mIsSetConcatenate= true;
260 return LIBSEDML_OPERATION_SUCCESS;
261 }
262
263
264 /*
265 * Unsets the value of the "range" attribute of this SedRepeatedTask.
266 */
267 int
unsetRangeId()268 SedRepeatedTask::unsetRangeId()
269 {
270 mRange.erase();
271
272 if (mRange.empty() == true)
273 {
274 return LIBSEDML_OPERATION_SUCCESS;
275 }
276 else
277 {
278 return LIBSEDML_OPERATION_FAILED;
279 }
280 }
281
282
283 /*
284 * Unsets the value of the "resetModel" attribute of this SedRepeatedTask.
285 */
286 int
unsetResetModel()287 SedRepeatedTask::unsetResetModel()
288 {
289 mResetModel = false;
290 mIsSetResetModel = false;
291
292 if (isSetResetModel() == false)
293 {
294 return LIBSEDML_OPERATION_SUCCESS;
295 }
296 else
297 {
298 return LIBSEDML_OPERATION_FAILED;
299 }
300 }
301
302
303 /*
304 * Unsets the value of the "concatenate" attribute of this SedRepeatedTask.
305 */
306 int
unsetConcatenate()307 SedRepeatedTask::unsetConcatenate()
308 {
309 mConcatenate = false;
310 mIsSetConcatenate = false;
311
312 if (isSetConcatenate() == false)
313 {
314 return LIBSEDML_OPERATION_SUCCESS;
315 }
316 else
317 {
318 return LIBSEDML_OPERATION_FAILED;
319 }
320 }
321
322
323 /*
324 * Returns the SedListOfRanges from this SedRepeatedTask.
325 */
326 const SedListOfRanges*
getListOfRanges() const327 SedRepeatedTask::getListOfRanges() const
328 {
329 return &mRanges;
330 }
331
332
333 /*
334 * Returns the SedListOfRanges from this SedRepeatedTask.
335 */
336 SedListOfRanges*
getListOfRanges()337 SedRepeatedTask::getListOfRanges()
338 {
339 return &mRanges;
340 }
341
342
343 /*
344 * Get a SedRange from the SedRepeatedTask.
345 */
346 SedRange*
getRange(unsigned int n)347 SedRepeatedTask::getRange(unsigned int n)
348 {
349 return mRanges.get(n);
350 }
351
352
353 /*
354 * Get a SedRange from the SedRepeatedTask.
355 */
356 const SedRange*
getRange(unsigned int n) const357 SedRepeatedTask::getRange(unsigned int n) const
358 {
359 return mRanges.get(n);
360 }
361
362
363 /*
364 * Get a SedRange from the SedRepeatedTask based on its identifier.
365 */
366 SedRange*
getRange(const std::string & sid)367 SedRepeatedTask::getRange(const std::string& sid)
368 {
369 return mRanges.get(sid);
370 }
371
372
373 /*
374 * Get a SedRange from the SedRepeatedTask based on its identifier.
375 */
376 const SedRange*
getRange(const std::string & sid) const377 SedRepeatedTask::getRange(const std::string& sid) const
378 {
379 return mRanges.get(sid);
380 }
381
382
383 /*
384 * Adds a copy of the given SedRange to this SedRepeatedTask.
385 */
386 int
addRange(const SedRange * sr)387 SedRepeatedTask::addRange(const SedRange* sr)
388 {
389 if (sr == NULL)
390 {
391 return LIBSEDML_OPERATION_FAILED;
392 }
393 else if (sr->hasRequiredAttributes() == false)
394 {
395 return LIBSEDML_INVALID_OBJECT;
396 }
397 else if (getLevel() != sr->getLevel())
398 {
399 return LIBSEDML_LEVEL_MISMATCH;
400 }
401 else if (getVersion() != sr->getVersion())
402 {
403 return LIBSEDML_VERSION_MISMATCH;
404 }
405 else if (matchesRequiredSedNamespacesForAddition(static_cast<const
406 SedBase*>(sr)) == false)
407 {
408 return LIBSEDML_NAMESPACES_MISMATCH;
409 }
410 else if (sr->isSetId() && (mRanges.get(sr->getId())) != NULL)
411 {
412 return LIBSEDML_DUPLICATE_OBJECT_ID;
413 }
414 else
415 {
416 return mRanges.append(sr);
417 }
418 }
419
420
421 /*
422 * Get the number of SedRange objects in this SedRepeatedTask.
423 */
424 unsigned int
getNumRanges() const425 SedRepeatedTask::getNumRanges() const
426 {
427 return mRanges.size();
428 }
429
430
431 /*
432 * Creates a new SedUniformRange object, adds it to this SedRepeatedTask object
433 * and returns the SedUniformRange object created.
434 */
435 SedUniformRange*
createUniformRange()436 SedRepeatedTask::createUniformRange()
437 {
438 SedUniformRange* sur = NULL;
439
440 try
441 {
442 sur = new SedUniformRange(getSedNamespaces());
443 }
444 catch (...)
445 {
446 }
447
448 if (sur != NULL)
449 {
450 mRanges.appendAndOwn(sur);
451 }
452
453 return sur;
454 }
455
456
457 /*
458 * Creates a new SedVectorRange object, adds it to this SedRepeatedTask object
459 * and returns the SedVectorRange object created.
460 */
461 SedVectorRange*
createVectorRange()462 SedRepeatedTask::createVectorRange()
463 {
464 SedVectorRange* svr = NULL;
465
466 try
467 {
468 svr = new SedVectorRange(getSedNamespaces());
469 }
470 catch (...)
471 {
472 }
473
474 if (svr != NULL)
475 {
476 mRanges.appendAndOwn(svr);
477 }
478
479 return svr;
480 }
481
482
483 /*
484 * Creates a new SedFunctionalRange object, adds it to this SedRepeatedTask
485 * object and returns the SedFunctionalRange object created.
486 */
487 SedFunctionalRange*
createFunctionalRange()488 SedRepeatedTask::createFunctionalRange()
489 {
490 SedFunctionalRange* sfr = NULL;
491
492 try
493 {
494 sfr = new SedFunctionalRange(getSedNamespaces());
495 }
496 catch (...)
497 {
498 }
499
500 if (sfr != NULL)
501 {
502 mRanges.appendAndOwn(sfr);
503 }
504
505 return sfr;
506 }
507
508
509 /*
510 * Creates a new SedDataRange object, adds it to this SedRepeatedTask object
511 * and returns the SedDataRange object created.
512 */
513 SedDataRange*
createDataRange()514 SedRepeatedTask::createDataRange()
515 {
516 SedDataRange* sdr = NULL;
517
518 try
519 {
520 sdr = new SedDataRange(getSedNamespaces());
521 }
522 catch (const SedConstructorException&)
523 {
524 return NULL;
525 }
526
527 if (sdr != NULL)
528 {
529 mRanges.appendAndOwn(sdr);
530 }
531
532 return sdr;
533 }
534
535
536 /*
537 * Removes the nth SedRange from this SedRepeatedTask and returns a pointer to
538 * it.
539 */
540 SedRange*
removeRange(unsigned int n)541 SedRepeatedTask::removeRange(unsigned int n)
542 {
543 return mRanges.remove(n);
544 }
545
546
547 /*
548 * Removes the SedRange from this SedRepeatedTask based on its identifier and
549 * returns a pointer to it.
550 */
551 SedRange*
removeRange(const std::string & sid)552 SedRepeatedTask::removeRange(const std::string& sid)
553 {
554 return mRanges.remove(sid);
555 }
556
557
558 /*
559 * Returns the SedListOfSetValues from this SedRepeatedTask.
560 */
561 const SedListOfSetValues*
getListOfTaskChanges() const562 SedRepeatedTask::getListOfTaskChanges() const
563 {
564 return &mSetValues;
565 }
566
567
568 /*
569 * Returns the SedListOfSetValues from this SedRepeatedTask.
570 */
571 SedListOfSetValues*
getListOfTaskChanges()572 SedRepeatedTask::getListOfTaskChanges()
573 {
574 return &mSetValues;
575 }
576
577
578 /*
579 * Get a SedSetValue from the SedRepeatedTask.
580 */
581 SedSetValue*
getTaskChange(unsigned int n)582 SedRepeatedTask::getTaskChange(unsigned int n)
583 {
584 return mSetValues.get(n);
585 }
586
587
588 /*
589 * Get a SedSetValue from the SedRepeatedTask.
590 */
591 const SedSetValue*
getTaskChange(unsigned int n) const592 SedRepeatedTask::getTaskChange(unsigned int n) const
593 {
594 return mSetValues.get(n);
595 }
596
597
598 /*
599 * Get a SedSetValue from the SedRepeatedTask based on the ModelReference to
600 * which it refers.
601 */
602 const SedSetValue*
getTaskChangeByModelReference(const std::string & sid) const603 SedRepeatedTask::getTaskChangeByModelReference(const std::string& sid) const
604 {
605 return mSetValues.getByModelReference(sid);
606 }
607
608
609 /*
610 * Get a SedSetValue from the SedRepeatedTask based on the ModelReference to
611 * which it refers.
612 */
613 SedSetValue*
getTaskChangeByModelReference(const std::string & sid)614 SedRepeatedTask::getTaskChangeByModelReference(const std::string& sid)
615 {
616 return mSetValues.getByModelReference(sid);
617 }
618
619
620 /*
621 * Get a SedSetValue from the SedRepeatedTask based on the Range to which it
622 * refers.
623 */
624 const SedSetValue*
getTaskChangeByRange(const std::string & sid) const625 SedRepeatedTask::getTaskChangeByRange(const std::string& sid) const
626 {
627 return mSetValues.getByRange(sid);
628 }
629
630
631 /*
632 * Get a SedSetValue from the SedRepeatedTask based on the Range to which it
633 * refers.
634 */
635 SedSetValue*
getTaskChangeByRange(const std::string & sid)636 SedRepeatedTask::getTaskChangeByRange(const std::string& sid)
637 {
638 return mSetValues.getByRange(sid);
639 }
640
641
642 /*
643 * Adds a copy of the given SedSetValue to this SedRepeatedTask.
644 */
645 int
addTaskChange(const SedSetValue * ssv)646 SedRepeatedTask::addTaskChange(const SedSetValue* ssv)
647 {
648 if (ssv == NULL)
649 {
650 return LIBSEDML_OPERATION_FAILED;
651 }
652 else if (ssv->hasRequiredAttributes() == false)
653 {
654 return LIBSEDML_INVALID_OBJECT;
655 }
656 else if (ssv->hasRequiredElements() == false)
657 {
658 return LIBSEDML_INVALID_OBJECT;
659 }
660 else if (getLevel() != ssv->getLevel())
661 {
662 return LIBSEDML_LEVEL_MISMATCH;
663 }
664 else if (getVersion() != ssv->getVersion())
665 {
666 return LIBSEDML_VERSION_MISMATCH;
667 }
668 else if (matchesRequiredSedNamespacesForAddition(static_cast<const
669 SedBase*>(ssv)) == false)
670 {
671 return LIBSEDML_NAMESPACES_MISMATCH;
672 }
673 else
674 {
675 return mSetValues.append(ssv);
676 }
677 }
678
679
680 /*
681 * Get the number of SedSetValue objects in this SedRepeatedTask.
682 */
683 unsigned int
getNumTaskChanges() const684 SedRepeatedTask::getNumTaskChanges() const
685 {
686 return mSetValues.size();
687 }
688
689
690 /*
691 * Creates a new SedSetValue object, adds it to this SedRepeatedTask object and
692 * returns the SedSetValue object created.
693 */
694 SedSetValue*
createTaskChange()695 SedRepeatedTask::createTaskChange()
696 {
697 SedSetValue* ssv = NULL;
698
699 try
700 {
701 ssv = new SedSetValue(getSedNamespaces());
702 }
703 catch (...)
704 {
705 }
706
707 if (ssv != NULL)
708 {
709 mSetValues.appendAndOwn(ssv);
710 }
711
712 return ssv;
713 }
714
715
716 /*
717 * Removes the nth SedSetValue from this SedRepeatedTask and returns a pointer
718 * to it.
719 */
720 SedSetValue*
removeTaskChange(unsigned int n)721 SedRepeatedTask::removeTaskChange(unsigned int n)
722 {
723 return mSetValues.remove(n);
724 }
725
726
727 /*
728 * Returns the SedListOfSubTasks from this SedRepeatedTask.
729 */
730 const SedListOfSubTasks*
getListOfSubTasks() const731 SedRepeatedTask::getListOfSubTasks() const
732 {
733 return &mSubTasks;
734 }
735
736
737 /*
738 * Returns the SedListOfSubTasks from this SedRepeatedTask.
739 */
740 SedListOfSubTasks*
getListOfSubTasks()741 SedRepeatedTask::getListOfSubTasks()
742 {
743 return &mSubTasks;
744 }
745
746
747 /*
748 * Get a SedSubTask from the SedRepeatedTask.
749 */
750 SedSubTask*
getSubTask(unsigned int n)751 SedRepeatedTask::getSubTask(unsigned int n)
752 {
753 return mSubTasks.get(n);
754 }
755
756
757 /*
758 * Get a SedSubTask from the SedRepeatedTask.
759 */
760 const SedSubTask*
getSubTask(unsigned int n) const761 SedRepeatedTask::getSubTask(unsigned int n) const
762 {
763 return mSubTasks.get(n);
764 }
765
766
767 /*
768 * Get a SedSubTask from the SedRepeatedTask based on the Task to which it
769 * refers.
770 */
771 const SedSubTask*
getSubTaskByTask(const std::string & sid) const772 SedRepeatedTask::getSubTaskByTask(const std::string& sid) const
773 {
774 return mSubTasks.getByTask(sid);
775 }
776
777
778 /*
779 * Get a SedSubTask from the SedRepeatedTask based on the Task to which it
780 * refers.
781 */
782 SedSubTask*
getSubTaskByTask(const std::string & sid)783 SedRepeatedTask::getSubTaskByTask(const std::string& sid)
784 {
785 return mSubTasks.getByTask(sid);
786 }
787
788
789 /*
790 * Adds a copy of the given SedSubTask to this SedRepeatedTask.
791 */
792 int
addSubTask(const SedSubTask * sst)793 SedRepeatedTask::addSubTask(const SedSubTask* sst)
794 {
795 if (sst == NULL)
796 {
797 return LIBSEDML_OPERATION_FAILED;
798 }
799 else if (sst->hasRequiredAttributes() == false)
800 {
801 return LIBSEDML_INVALID_OBJECT;
802 }
803 else if (getLevel() != sst->getLevel())
804 {
805 return LIBSEDML_LEVEL_MISMATCH;
806 }
807 else if (getVersion() != sst->getVersion())
808 {
809 return LIBSEDML_VERSION_MISMATCH;
810 }
811 else if (matchesRequiredSedNamespacesForAddition(static_cast<const
812 SedBase*>(sst)) == false)
813 {
814 return LIBSEDML_NAMESPACES_MISMATCH;
815 }
816 else
817 {
818 return mSubTasks.append(sst);
819 }
820 }
821
822
823 /*
824 * Get the number of SedSubTask objects in this SedRepeatedTask.
825 */
826 unsigned int
getNumSubTasks() const827 SedRepeatedTask::getNumSubTasks() const
828 {
829 return mSubTasks.size();
830 }
831
832
833 /*
834 * Creates a new SedSubTask object, adds it to this SedRepeatedTask object and
835 * returns the SedSubTask object created.
836 */
837 SedSubTask*
createSubTask()838 SedRepeatedTask::createSubTask()
839 {
840 SedSubTask* sst = NULL;
841
842 try
843 {
844 sst = new SedSubTask(getSedNamespaces());
845 }
846 catch (...)
847 {
848 }
849
850 if (sst != NULL)
851 {
852 mSubTasks.appendAndOwn(sst);
853 }
854
855 return sst;
856 }
857
858
859 /*
860 * Removes the nth SedSubTask from this SedRepeatedTask and returns a pointer
861 * to it.
862 */
863 SedSubTask*
removeSubTask(unsigned int n)864 SedRepeatedTask::removeSubTask(unsigned int n)
865 {
866 return mSubTasks.remove(n);
867 }
868
869
870 /*
871 * @copydoc doc_renamesidref_common
872 */
873 void
renameSIdRefs(const std::string & oldid,const std::string & newid)874 SedRepeatedTask::renameSIdRefs(const std::string& oldid,
875 const std::string& newid)
876 {
877 if (isSetRangeId() && mRange == oldid)
878 {
879 setRangeId(newid);
880 }
881 }
882
883
884 /*
885 * Returns the XML element name of this SedRepeatedTask object.
886 */
887 const std::string&
getElementName() const888 SedRepeatedTask::getElementName() const
889 {
890 static const string name = "repeatedTask";
891 return name;
892 }
893
894
895 /*
896 * Returns the libSEDML type code for this SedRepeatedTask object.
897 */
898 int
getTypeCode() const899 SedRepeatedTask::getTypeCode() const
900 {
901 return SEDML_TASK_REPEATEDTASK;
902 }
903
904
905 /*
906 * Predicate returning @c true if all the required attributes for this
907 * SedRepeatedTask object have been set.
908 */
909 bool
hasRequiredAttributes() const910 SedRepeatedTask::hasRequiredAttributes() const
911 {
912 bool allPresent = SedAbstractTask::hasRequiredAttributes();
913
914 return allPresent;
915 }
916
917
918 /*
919 * Predicate returning @c true if all the required elements for this
920 * SedRepeatedTask object have been set.
921 */
922 bool
hasRequiredElements() const923 SedRepeatedTask::hasRequiredElements() const
924 {
925 bool allPresent = SedAbstractTask::hasRequiredElements();
926
927 return allPresent;
928 }
929
930
931
932 /** @cond doxygenLibSEDMLInternal */
933
934 /*
935 * Write any contained elements
936 */
937 void
writeElements(LIBSBML_CPP_NAMESPACE_QUALIFIER XMLOutputStream & stream) const938 SedRepeatedTask::writeElements(LIBSBML_CPP_NAMESPACE_QUALIFIER XMLOutputStream&
939 stream) const
940 {
941 SedAbstractTask::writeElements(stream);
942
943 if (getNumRanges() > 0)
944 {
945 mRanges.write(stream);
946 }
947
948 if (getNumTaskChanges() > 0)
949 {
950 mSetValues.write(stream);
951 }
952
953 if (getNumSubTasks() > 0)
954 {
955 mSubTasks.write(stream);
956 }
957 }
958
959 /** @endcond */
960
961
962
963 /** @cond doxygenLibSEDMLInternal */
964
965 /*
966 * Accepts the given SedVisitor
967 */
968 bool
accept(SedVisitor & v) const969 SedRepeatedTask::accept(SedVisitor& v) const
970 {
971 return false;
972 }
973
974 /** @endcond */
975
976
977
978 /** @cond doxygenLibSEDMLInternal */
979
980 /*
981 * Sets the parent SedDocument
982 */
983 void
setSedDocument(SedDocument * d)984 SedRepeatedTask::setSedDocument(SedDocument* d)
985 {
986 SedAbstractTask::setSedDocument(d);
987
988 mRanges.setSedDocument(d);
989
990 mSetValues.setSedDocument(d);
991
992 mSubTasks.setSedDocument(d);
993 }
994
995 /** @endcond */
996
997
998
999 /** @cond doxygenLibSEDMLInternal */
1000
1001 /*
1002 * Connects to child elements
1003 */
1004 void
connectToChild()1005 SedRepeatedTask::connectToChild()
1006 {
1007 SedAbstractTask::connectToChild();
1008
1009 mRanges.connectToParent(this);
1010
1011 mSetValues.connectToParent(this);
1012
1013 mSubTasks.connectToParent(this);
1014 }
1015
1016 /** @endcond */
1017
1018
1019
1020 /** @cond doxygenLibSEDMLInternal */
1021
1022 /*
1023 * Gets the value of the "attributeName" attribute of this SedRepeatedTask.
1024 */
1025 int
getAttribute(const std::string & attributeName,bool & value) const1026 SedRepeatedTask::getAttribute(const std::string& attributeName,
1027 bool& value) const
1028 {
1029 int return_value = SedAbstractTask::getAttribute(attributeName, value);
1030
1031 if (return_value == LIBSEDML_OPERATION_SUCCESS)
1032 {
1033 return return_value;
1034 }
1035
1036 if (attributeName == "resetModel")
1037 {
1038 value = getResetModel();
1039 return_value = LIBSEDML_OPERATION_SUCCESS;
1040 }
1041
1042 if (attributeName == "concatenate")
1043 {
1044 value = getConcatenate();
1045 return_value = LIBSEDML_OPERATION_SUCCESS;
1046 }
1047
1048 return return_value;
1049 }
1050
1051 /** @endcond */
1052
1053
1054
1055 /** @cond doxygenLibSEDMLInternal */
1056
1057 /*
1058 * Gets the value of the "attributeName" attribute of this SedRepeatedTask.
1059 */
1060 int
getAttribute(const std::string & attributeName,int & value) const1061 SedRepeatedTask::getAttribute(const std::string& attributeName,
1062 int& value) const
1063 {
1064 int return_value = SedAbstractTask::getAttribute(attributeName, value);
1065
1066 return return_value;
1067 }
1068
1069 /** @endcond */
1070
1071
1072
1073 /** @cond doxygenLibSEDMLInternal */
1074
1075 /*
1076 * Gets the value of the "attributeName" attribute of this SedRepeatedTask.
1077 */
1078 int
getAttribute(const std::string & attributeName,double & value) const1079 SedRepeatedTask::getAttribute(const std::string& attributeName,
1080 double& value) const
1081 {
1082 int return_value = SedAbstractTask::getAttribute(attributeName, value);
1083
1084 return return_value;
1085 }
1086
1087 /** @endcond */
1088
1089
1090
1091 /** @cond doxygenLibSEDMLInternal */
1092
1093 /*
1094 * Gets the value of the "attributeName" attribute of this SedRepeatedTask.
1095 */
1096 int
getAttribute(const std::string & attributeName,unsigned int & value) const1097 SedRepeatedTask::getAttribute(const std::string& attributeName,
1098 unsigned int& value) const
1099 {
1100 int return_value = SedAbstractTask::getAttribute(attributeName, value);
1101
1102 return return_value;
1103 }
1104
1105 /** @endcond */
1106
1107
1108
1109 /** @cond doxygenLibSEDMLInternal */
1110
1111 /*
1112 * Gets the value of the "attributeName" attribute of this SedRepeatedTask.
1113 */
1114 int
getAttribute(const std::string & attributeName,std::string & value) const1115 SedRepeatedTask::getAttribute(const std::string& attributeName,
1116 std::string& value) const
1117 {
1118 int return_value = SedAbstractTask::getAttribute(attributeName, value);
1119
1120 if (return_value == LIBSEDML_OPERATION_SUCCESS)
1121 {
1122 return return_value;
1123 }
1124
1125 if (attributeName == "range")
1126 {
1127 value = getRangeId();
1128 return_value = LIBSEDML_OPERATION_SUCCESS;
1129 }
1130
1131 return return_value;
1132 }
1133
1134 /** @endcond */
1135
1136
1137
1138 /** @cond doxygenLibSEDMLInternal */
1139
1140 /*
1141 * Predicate returning @c true if this SedRepeatedTask's attribute
1142 * "attributeName" is set.
1143 */
1144 bool
isSetAttribute(const std::string & attributeName) const1145 SedRepeatedTask::isSetAttribute(const std::string& attributeName) const
1146 {
1147 bool value = SedAbstractTask::isSetAttribute(attributeName);
1148
1149 if (attributeName == "range")
1150 {
1151 value = isSetRangeId();
1152 }
1153 else if (attributeName == "resetModel")
1154 {
1155 value = isSetResetModel();
1156 }
1157 else if (attributeName == "concatenate")
1158 {
1159 value = isSetConcatenate();
1160 }
1161
1162 return value;
1163 }
1164
1165 /** @endcond */
1166
1167
1168
1169 /** @cond doxygenLibSEDMLInternal */
1170
1171 /*
1172 * Sets the value of the "attributeName" attribute of this SedRepeatedTask.
1173 */
1174 int
setAttribute(const std::string & attributeName,bool value)1175 SedRepeatedTask::setAttribute(const std::string& attributeName, bool value)
1176 {
1177 int return_value = SedAbstractTask::setAttribute(attributeName, value);
1178
1179 if (attributeName == "resetModel")
1180 {
1181 return_value = setResetModel(value);
1182 }
1183 else if (attributeName == "concatenate")
1184 {
1185 return_value = setConcatenate(value);
1186 }
1187
1188 return return_value;
1189 }
1190
1191 /** @endcond */
1192
1193
1194
1195 /** @cond doxygenLibSEDMLInternal */
1196
1197 /*
1198 * Sets the value of the "attributeName" attribute of this SedRepeatedTask.
1199 */
1200 int
setAttribute(const std::string & attributeName,int value)1201 SedRepeatedTask::setAttribute(const std::string& attributeName, int value)
1202 {
1203 int return_value = SedAbstractTask::setAttribute(attributeName, value);
1204
1205 return return_value;
1206 }
1207
1208 /** @endcond */
1209
1210
1211
1212 /** @cond doxygenLibSEDMLInternal */
1213
1214 /*
1215 * Sets the value of the "attributeName" attribute of this SedRepeatedTask.
1216 */
1217 int
setAttribute(const std::string & attributeName,double value)1218 SedRepeatedTask::setAttribute(const std::string& attributeName, double value)
1219 {
1220 int return_value = SedAbstractTask::setAttribute(attributeName, value);
1221
1222 return return_value;
1223 }
1224
1225 /** @endcond */
1226
1227
1228
1229 /** @cond doxygenLibSEDMLInternal */
1230
1231 /*
1232 * Sets the value of the "attributeName" attribute of this SedRepeatedTask.
1233 */
1234 int
setAttribute(const std::string & attributeName,unsigned int value)1235 SedRepeatedTask::setAttribute(const std::string& attributeName,
1236 unsigned int value)
1237 {
1238 int return_value = SedAbstractTask::setAttribute(attributeName, value);
1239
1240 return return_value;
1241 }
1242
1243 /** @endcond */
1244
1245
1246
1247 /** @cond doxygenLibSEDMLInternal */
1248
1249 /*
1250 * Sets the value of the "attributeName" attribute of this SedRepeatedTask.
1251 */
1252 int
setAttribute(const std::string & attributeName,const std::string & value)1253 SedRepeatedTask::setAttribute(const std::string& attributeName,
1254 const std::string& value)
1255 {
1256 int return_value = SedAbstractTask::setAttribute(attributeName, value);
1257
1258 if (attributeName == "range")
1259 {
1260 return_value = setRangeId(value);
1261 }
1262
1263 return return_value;
1264 }
1265
1266 /** @endcond */
1267
1268
1269
1270 /** @cond doxygenLibSEDMLInternal */
1271
1272 /*
1273 * Unsets the value of the "attributeName" attribute of this SedRepeatedTask.
1274 */
1275 int
unsetAttribute(const std::string & attributeName)1276 SedRepeatedTask::unsetAttribute(const std::string& attributeName)
1277 {
1278 int value = SedAbstractTask::unsetAttribute(attributeName);
1279
1280 if (attributeName == "range")
1281 {
1282 value = unsetRangeId();
1283 }
1284 else if (attributeName == "resetModel")
1285 {
1286 value = unsetResetModel();
1287 }
1288 else if (attributeName == "concatenate")
1289 {
1290 value = unsetConcatenate();
1291 }
1292
1293 return value;
1294 }
1295
1296 /** @endcond */
1297
1298
1299
1300 /** @cond doxygenLibSEDMLInternal */
1301
1302 /*
1303 * Creates and returns an new "elementName" object in this SedRepeatedTask.
1304 */
1305 SedBase*
createChildObject(const std::string & elementName)1306 SedRepeatedTask::createChildObject(const std::string& elementName)
1307 {
1308 SedAbstractTask* obj = NULL;
1309
1310 if (elementName == "uniformRange")
1311 {
1312 return createUniformRange();
1313 }
1314 else if (elementName == "vectorRange")
1315 {
1316 return createVectorRange();
1317 }
1318 else if (elementName == "functionalRange")
1319 {
1320 return createFunctionalRange();
1321 }
1322 else if (elementName == "dataRange")
1323 {
1324 return createDataRange();
1325 }
1326 else if (elementName == "setValue")
1327 {
1328 return createTaskChange();
1329 }
1330 else if (elementName == "subTask")
1331 {
1332 return createSubTask();
1333 }
1334
1335 return obj;
1336 }
1337
1338 /** @endcond */
1339
1340
1341
1342 /** @cond doxygenLibSEDMLInternal */
1343
1344 /*
1345 * Adds a new "elementName" object to this SedRepeatedTask.
1346 */
1347 int
addChildObject(const std::string & elementName,const SedBase * element)1348 SedRepeatedTask::addChildObject(const std::string& elementName,
1349 const SedBase* element)
1350 {
1351 if (elementName == "uniformRange" && element->getTypeCode() ==
1352 SEDML_RANGE_UNIFORMRANGE)
1353 {
1354 return addRange((const SedRange*)(element));
1355 }
1356 else if (elementName == "vectorRange" && element->getTypeCode() ==
1357 SEDML_RANGE_VECTORRANGE)
1358 {
1359 return addRange((const SedRange*)(element));
1360 }
1361 else if (elementName == "functionalRange" && element->getTypeCode() ==
1362 SEDML_RANGE_FUNCTIONALRANGE)
1363 {
1364 return addRange((const SedRange*)(element));
1365 }
1366 else if (elementName == "dataRange" && element->getTypeCode() ==
1367 SEDML_DATA_RANGE)
1368 {
1369 return addRange((const SedRange*)(element));
1370 }
1371 else if (elementName == "setValue" && element->getTypeCode() ==
1372 SEDML_TASK_SETVALUE)
1373 {
1374 return addTaskChange((const SedSetValue*)(element));
1375 }
1376 else if (elementName == "subTask" && element->getTypeCode() ==
1377 SEDML_TASK_SUBTASK)
1378 {
1379 return addSubTask((const SedSubTask*)(element));
1380 }
1381
1382 return LIBSBML_OPERATION_FAILED;
1383 }
1384
1385 /** @endcond */
1386
1387
1388
1389 /** @cond doxygenLibSEDMLInternal */
1390
1391 /*
1392 * Removes and returns the new "elementName" object with the given id in this
1393 * SedRepeatedTask.
1394 */
1395 SedBase*
removeChildObject(const std::string & elementName,const std::string & id)1396 SedRepeatedTask::removeChildObject(const std::string& elementName,
1397 const std::string& id)
1398 {
1399 if (elementName == "uniformRange")
1400 {
1401 return removeRange(id);
1402 }
1403 else if (elementName == "vectorRange")
1404 {
1405 return removeRange(id);
1406 }
1407 else if (elementName == "functionalRange")
1408 {
1409 return removeRange(id);
1410 }
1411 else if (elementName == "dataRange")
1412 {
1413 return removeRange(id);
1414 }
1415 else if (elementName == "setValue")
1416 {
1417 for (unsigned int i = 0; i < getNumTaskChanges(); i++)
1418 {
1419 if (getTaskChange(i)->getId() == id)
1420 {
1421 return removeTaskChange(i);
1422 }
1423 }
1424 }
1425 else if (elementName == "subTask")
1426 {
1427 for (unsigned int i = 0; i < getNumSubTasks(); i++)
1428 {
1429 if (getSubTask(i)->getId() == id)
1430 {
1431 return removeSubTask(i);
1432 }
1433 }
1434 }
1435
1436 return NULL;
1437 }
1438
1439 /** @endcond */
1440
1441
1442
1443 /** @cond doxygenLibSEDMLInternal */
1444
1445 /*
1446 * Returns the number of "elementName" in this SedRepeatedTask.
1447 */
1448 unsigned int
getNumObjects(const std::string & elementName)1449 SedRepeatedTask::getNumObjects(const std::string& elementName)
1450 {
1451 unsigned int n = 0;
1452
1453 if (elementName == "range")
1454 {
1455 return getNumRanges();
1456 }
1457 else if (elementName == "setValue")
1458 {
1459 return getNumTaskChanges();
1460 }
1461 else if (elementName == "subTask")
1462 {
1463 return getNumSubTasks();
1464 }
1465
1466 return n;
1467 }
1468
1469 /** @endcond */
1470
1471
1472
1473 /** @cond doxygenLibSEDMLInternal */
1474
1475 /*
1476 * Returns the nth object of "objectName" in this SedRepeatedTask.
1477 */
1478 SedBase*
getObject(const std::string & elementName,unsigned int index)1479 SedRepeatedTask::getObject(const std::string& elementName, unsigned int index)
1480 {
1481 SedBase* obj = NULL;
1482
1483 if (elementName == "range")
1484 {
1485 return getRange(index);
1486 }
1487 else if (elementName == "setValue")
1488 {
1489 return getTaskChange(index);
1490 }
1491 else if (elementName == "subTask")
1492 {
1493 return getSubTask(index);
1494 }
1495
1496 return obj;
1497 }
1498
1499 /** @endcond */
1500
1501
1502 /*
1503 * Returns the first child element that has the given @p id in the model-wide
1504 * SId namespace, or @c NULL if no such object is found.
1505 */
1506 SedBase*
getElementBySId(const std::string & id)1507 SedRepeatedTask::getElementBySId(const std::string& id)
1508 {
1509 if (id.empty())
1510 {
1511 return NULL;
1512 }
1513
1514 SedBase* obj = NULL;
1515
1516 obj = mRanges.getElementBySId(id);
1517
1518 if (obj != NULL)
1519 {
1520 return obj;
1521 }
1522
1523 obj = mSetValues.getElementBySId(id);
1524
1525 if (obj != NULL)
1526 {
1527 return obj;
1528 }
1529
1530 obj = mSubTasks.getElementBySId(id);
1531
1532 if (obj != NULL)
1533 {
1534 return obj;
1535 }
1536
1537 return obj;
1538 }
1539
1540
1541 /*
1542 * Returns a List of all child SedBase objects, including those nested to an
1543 * arbitrary depth.
1544 */
1545 List*
getAllElements(SedElementFilter * filter)1546 SedRepeatedTask::getAllElements(SedElementFilter* filter)
1547 {
1548 List* ret = new List();
1549 List* sublist = NULL;
1550
1551 SED_ADD_FILTERED_LIST(ret, sublist, mRanges, filter);
1552 SED_ADD_FILTERED_LIST(ret, sublist, mSetValues, filter);
1553 SED_ADD_FILTERED_LIST(ret, sublist, mSubTasks, filter);
1554
1555 return ret;
1556 }
1557
1558
1559
1560 /** @cond doxygenLibSEDMLInternal */
1561
1562 /*
1563 * Creates a new object from the next XMLToken on the XMLInputStream
1564 */
1565 SedBase*
createObject(LIBSBML_CPP_NAMESPACE_QUALIFIER XMLInputStream & stream)1566 SedRepeatedTask::createObject(LIBSBML_CPP_NAMESPACE_QUALIFIER XMLInputStream&
1567 stream)
1568 {
1569 SedBase* obj = SedAbstractTask::createObject(stream);
1570
1571 const std::string& name = stream.peek().getName();
1572
1573 if (name == "listOfRanges")
1574 {
1575 if (getErrorLog() && mRanges.size() != 0)
1576 {
1577 getErrorLog()->logError(SedmlRepeatedTaskAllowedElements, getLevel(),
1578 getVersion(), "", getLine(), getColumn());
1579 }
1580
1581 obj = &mRanges;
1582 }
1583 else if (name == "listOfChanges")
1584 {
1585 if (getErrorLog() && mSetValues.size() != 0)
1586 {
1587 getErrorLog()->logError(SedmlRepeatedTaskAllowedElements, getLevel(),
1588 getVersion(), "", getLine(), getColumn());
1589 }
1590
1591 obj = &mSetValues;
1592 }
1593 else if (name == "listOfSubTasks")
1594 {
1595 if (getErrorLog() && mSubTasks.size() != 0)
1596 {
1597 getErrorLog()->logError(SedmlRepeatedTaskAllowedElements, getLevel(),
1598 getVersion(), "", getLine(), getColumn());
1599 }
1600
1601 obj = &mSubTasks;
1602 }
1603
1604 connectToChild();
1605
1606 return obj;
1607 }
1608
1609 /** @endcond */
1610
1611
1612
1613 /** @cond doxygenLibSEDMLInternal */
1614
1615 /*
1616 * Adds the expected attributes for this element
1617 */
1618 void
addExpectedAttributes(LIBSBML_CPP_NAMESPACE_QUALIFIER ExpectedAttributes & attributes)1619 SedRepeatedTask::addExpectedAttributes(LIBSBML_CPP_NAMESPACE_QUALIFIER
1620 ExpectedAttributes& attributes)
1621 {
1622 SedAbstractTask::addExpectedAttributes(attributes);
1623
1624 attributes.add("range");
1625
1626 attributes.add("resetModel");
1627
1628 attributes.add("concatenate");
1629 }
1630
1631 /** @endcond */
1632
1633
1634
1635 /** @cond doxygenLibSEDMLInternal */
1636
1637 /*
1638 * Reads the expected attributes into the member data variables
1639 */
1640 void
readAttributes(const LIBSBML_CPP_NAMESPACE_QUALIFIER XMLAttributes & attributes,const LIBSBML_CPP_NAMESPACE_QUALIFIER ExpectedAttributes & expectedAttributes)1641 SedRepeatedTask::readAttributes(
1642 const LIBSBML_CPP_NAMESPACE_QUALIFIER
1643 XMLAttributes& attributes,
1644 const LIBSBML_CPP_NAMESPACE_QUALIFIER
1645 ExpectedAttributes& expectedAttributes)
1646 {
1647 unsigned int level = getLevel();
1648 unsigned int version = getVersion();
1649 unsigned int numErrs;
1650 bool assigned = false;
1651 SedErrorLog* log = getErrorLog();
1652
1653 SedAbstractTask::readAttributes(attributes, expectedAttributes);
1654
1655 if (log)
1656 {
1657 numErrs = log->getNumErrors();
1658
1659 for (int n = numErrs-1; n >= 0; n--)
1660 {
1661 if (log->getError(n)->getErrorId() == SedUnknownCoreAttribute)
1662 {
1663 const std::string details = log->getError(n)->getMessage();
1664 log->remove(SedUnknownCoreAttribute);
1665 log->logError(SedmlRepeatedTaskAllowedAttributes, level, version,
1666 details, getLine(), getColumn());
1667 }
1668 }
1669 }
1670
1671 //
1672 // range SIdRef (use = "optional" )
1673 //
1674
1675 assigned = attributes.readInto("range", mRange);
1676
1677 if (assigned == true)
1678 {
1679 if (mRange.empty() == true)
1680 {
1681 logEmptyString(mRange, level, version, "<SedRepeatedTask>");
1682 }
1683 else if (SyntaxChecker::isValidSBMLSId(mRange) == false)
1684 {
1685 std::string msg = "The range attribute on the <" + getElementName() +
1686 ">";
1687 if (isSetId())
1688 {
1689 msg += " with id '" + getId() + "'";
1690 }
1691
1692 msg += " is '" + mRange + "', which does not conform to the syntax.";
1693 logError(SedmlRepeatedTaskRangeMustBeRange, level, version, msg,
1694 getLine(), getColumn());
1695 }
1696 }
1697
1698 //
1699 // resetModel bool (use = "optional" )
1700 //
1701
1702 numErrs = log ? log->getNumErrors() : 0;
1703 mIsSetResetModel = attributes.readInto("resetModel", mResetModel);
1704
1705 if (mIsSetResetModel == false)
1706 {
1707 if (log && log->getNumErrors() == numErrs + 1 &&
1708 log->contains(XMLAttributeTypeMismatch))
1709 {
1710 log->remove(XMLAttributeTypeMismatch);
1711 log->logError(SedmlRepeatedTaskResetModelMustBeBoolean, level, version);
1712 }
1713 }
1714
1715 //
1716 // concatentate bool (use = "optional" )
1717 //
1718
1719 numErrs = log ? log->getNumErrors() : 0;
1720 mIsSetConcatenate = attributes.readInto("concatentate", mConcatenate);
1721
1722 if (mIsSetConcatenate == false)
1723 {
1724 if (log && log->getNumErrors() == numErrs + 1 &&
1725 log->contains(XMLAttributeTypeMismatch))
1726 {
1727 log->remove(XMLAttributeTypeMismatch);
1728 log->logError(SedmlRepeatedTaskConcatenateMustBeBoolean, level, version);
1729 }
1730 }
1731 }
1732
1733 /** @endcond */
1734
1735
1736
1737 /** @cond doxygenLibSEDMLInternal */
1738
1739 /*
1740 * Writes the attributes to the stream
1741 */
1742 void
writeAttributes(LIBSBML_CPP_NAMESPACE_QUALIFIER XMLOutputStream & stream) const1743 SedRepeatedTask::writeAttributes(LIBSBML_CPP_NAMESPACE_QUALIFIER
1744 XMLOutputStream& stream) const
1745 {
1746 SedAbstractTask::writeAttributes(stream);
1747
1748 if (isSetRangeId() == true)
1749 {
1750 stream.writeAttribute("range", getPrefix(), mRange);
1751 }
1752
1753 if (isSetResetModel() == true)
1754 {
1755 stream.writeAttribute("resetModel", getPrefix(), mResetModel);
1756 }
1757
1758 if (isSetConcatenate() == true && (getLevel()>1 || getVersion() >=4))
1759 {
1760 stream.writeAttribute("concatenate", getPrefix(), mConcatenate);
1761 }
1762 }
1763
1764 /** @endcond */
1765
1766
1767
1768
1769 #endif /* __cplusplus */
1770
1771
1772 /*
1773 * Creates a new SedRepeatedTask_t using the given SED-ML Level and @ p version
1774 * values.
1775 */
1776 LIBSEDML_EXTERN
1777 SedRepeatedTask_t *
SedRepeatedTask_create(unsigned int level,unsigned int version)1778 SedRepeatedTask_create(unsigned int level, unsigned int version)
1779 {
1780 return new SedRepeatedTask(level, version);
1781 }
1782
1783
1784 /*
1785 * Creates and returns a deep copy of this SedRepeatedTask_t object.
1786 */
1787 LIBSEDML_EXTERN
1788 SedRepeatedTask_t*
SedRepeatedTask_clone(const SedRepeatedTask_t * srt)1789 SedRepeatedTask_clone(const SedRepeatedTask_t* srt)
1790 {
1791 if (srt != NULL)
1792 {
1793 return static_cast<SedRepeatedTask_t*>(srt->clone());
1794 }
1795 else
1796 {
1797 return NULL;
1798 }
1799 }
1800
1801
1802 /*
1803 * Frees this SedRepeatedTask_t object.
1804 */
1805 LIBSEDML_EXTERN
1806 void
SedRepeatedTask_free(SedRepeatedTask_t * srt)1807 SedRepeatedTask_free(SedRepeatedTask_t* srt)
1808 {
1809 if (srt != NULL)
1810 {
1811 delete srt;
1812 }
1813 }
1814
1815
1816 /*
1817 * Returns the value of the "range" attribute of this SedRepeatedTask_t.
1818 */
1819 LIBSEDML_EXTERN
1820 char *
SedRepeatedTask_getRangeId(const SedRepeatedTask_t * srt)1821 SedRepeatedTask_getRangeId(const SedRepeatedTask_t * srt)
1822 {
1823 if (srt == NULL)
1824 {
1825 return NULL;
1826 }
1827
1828 return srt->getRangeId().empty() ? NULL : safe_strdup(srt->getRangeId().c_str());
1829 }
1830
1831
1832 /*
1833 * Returns the value of the "resetModel" attribute of this SedRepeatedTask_t.
1834 */
1835 LIBSEDML_EXTERN
1836 int
SedRepeatedTask_getResetModel(const SedRepeatedTask_t * srt)1837 SedRepeatedTask_getResetModel(const SedRepeatedTask_t * srt)
1838 {
1839 return (srt != NULL) ? static_cast<int>(srt->getResetModel()) : 0;
1840 }
1841
1842
1843 /*
1844 * Returns the value of the "concatenate" attribute of this SedRepeatedTask_t.
1845 */
1846 LIBSEDML_EXTERN
1847 int
SedRepeatedTask_getConcatenate(const SedRepeatedTask_t * srt)1848 SedRepeatedTask_getConcatenate(const SedRepeatedTask_t* srt)
1849 {
1850 return (srt != NULL) ? static_cast<int>(srt->getConcatenate()) : 0;
1851 }
1852
1853
1854 /*
1855 * Predicate returning @c 1 (true) if this SedRepeatedTask_t's "range"
1856 * attribute is set.
1857 */
1858 LIBSEDML_EXTERN
1859 int
SedRepeatedTask_isSetRangeId(const SedRepeatedTask_t * srt)1860 SedRepeatedTask_isSetRangeId(const SedRepeatedTask_t * srt)
1861 {
1862 return (srt != NULL) ? static_cast<int>(srt->isSetRangeId()) : 0;
1863 }
1864
1865
1866 /*
1867 * Predicate returning @c 1 (true) if this SedRepeatedTask_t's "resetModel"
1868 * attribute is set.
1869 */
1870 LIBSEDML_EXTERN
1871 int
SedRepeatedTask_isSetResetModel(const SedRepeatedTask_t * srt)1872 SedRepeatedTask_isSetResetModel(const SedRepeatedTask_t * srt)
1873 {
1874 return (srt != NULL) ? static_cast<int>(srt->isSetResetModel()) : 0;
1875 }
1876
1877
1878 /*
1879 * Predicate returning @c 1 (true) if this SedRepeatedTask_t's "concatenate"
1880 * attribute is set.
1881 */
1882 LIBSEDML_EXTERN
1883 int
SedRepeatedTask_isSetConcatenate(const SedRepeatedTask_t * srt)1884 SedRepeatedTask_isSetConcatenate(const SedRepeatedTask_t* srt)
1885 {
1886 return (srt != NULL) ? static_cast<int>(srt->isSetConcatenate()) : 0;
1887 }
1888
1889
1890 /*
1891 * Sets the value of the "range" attribute of this SedRepeatedTask_t.
1892 */
1893 LIBSEDML_EXTERN
1894 int
SedRepeatedTask_setRangeId(SedRepeatedTask_t * srt,const char * rangeId)1895 SedRepeatedTask_setRangeId(SedRepeatedTask_t * srt, const char * rangeId)
1896 {
1897 return (srt != NULL) ? srt->setRangeId(rangeId) : LIBSEDML_INVALID_OBJECT;
1898 }
1899
1900
1901 /*
1902 * Sets the value of the "resetModel" attribute of this SedRepeatedTask_t.
1903 */
1904 LIBSEDML_EXTERN
1905 int
SedRepeatedTask_setResetModel(SedRepeatedTask_t * srt,int resetModel)1906 SedRepeatedTask_setResetModel(SedRepeatedTask_t * srt, int resetModel)
1907 {
1908 return (srt != NULL) ? srt->setResetModel(resetModel) :
1909 LIBSEDML_INVALID_OBJECT;
1910 }
1911
1912
1913 /*
1914 * Sets the value of the "concatenate" attribute of this SedRepeatedTask_t.
1915 */
1916 LIBSEDML_EXTERN
1917 int
SedRepeatedTask_setConcatenate(SedRepeatedTask_t * srt,int concatenate)1918 SedRepeatedTask_setConcatenate(SedRepeatedTask_t* srt, int concatenate)
1919 {
1920 return (srt != NULL) ? srt->setConcatenate(concatenate) :
1921 LIBSEDML_INVALID_OBJECT;
1922 }
1923
1924
1925 /*
1926 * Unsets the value of the "range" attribute of this SedRepeatedTask_t.
1927 */
1928 LIBSEDML_EXTERN
1929 int
SedRepeatedTask_unsetRangeId(SedRepeatedTask_t * srt)1930 SedRepeatedTask_unsetRangeId(SedRepeatedTask_t * srt)
1931 {
1932 return (srt != NULL) ? srt->unsetRangeId() : LIBSEDML_INVALID_OBJECT;
1933 }
1934
1935
1936 /*
1937 * Unsets the value of the "resetModel" attribute of this SedRepeatedTask_t.
1938 */
1939 LIBSEDML_EXTERN
1940 int
SedRepeatedTask_unsetResetModel(SedRepeatedTask_t * srt)1941 SedRepeatedTask_unsetResetModel(SedRepeatedTask_t * srt)
1942 {
1943 return (srt != NULL) ? srt->unsetResetModel() : LIBSEDML_INVALID_OBJECT;
1944 }
1945
1946
1947 /*
1948 * Unsets the value of the "concatenate" attribute of this SedRepeatedTask_t.
1949 */
1950 LIBSEDML_EXTERN
1951 int
SedRepeatedTask_unsetConcatenate(SedRepeatedTask_t * srt)1952 SedRepeatedTask_unsetConcatenate(SedRepeatedTask_t* srt)
1953 {
1954 return (srt != NULL) ? srt->unsetConcatenate() : LIBSEDML_INVALID_OBJECT;
1955 }
1956
1957
1958 /*
1959 * Returns a ListOf_t * containing SedRange_t objects from this
1960 * SedRepeatedTask_t.
1961 */
1962 LIBSEDML_EXTERN
1963 SedListOf_t*
SedRepeatedTask_getListOfRanges(SedRepeatedTask_t * srt)1964 SedRepeatedTask_getListOfRanges(SedRepeatedTask_t* srt)
1965 {
1966 return (srt != NULL) ? srt->getListOfRanges() : NULL;
1967 }
1968
1969
1970 /*
1971 * Get a SedRange_t from the SedRepeatedTask_t.
1972 */
1973 LIBSEDML_EXTERN
1974 SedRange_t*
SedRepeatedTask_getRange(SedRepeatedTask_t * srt,unsigned int n)1975 SedRepeatedTask_getRange(SedRepeatedTask_t* srt, unsigned int n)
1976 {
1977 return (srt != NULL) ? srt->getRange(n) : NULL;
1978 }
1979
1980
1981 /*
1982 * Get a SedRange_t from the SedRepeatedTask_t based on its identifier.
1983 */
1984 LIBSEDML_EXTERN
1985 SedRange_t*
SedRepeatedTask_getRangeById(SedRepeatedTask_t * srt,const char * sid)1986 SedRepeatedTask_getRangeById(SedRepeatedTask_t* srt, const char *sid)
1987 {
1988 return (srt != NULL && sid != NULL) ? srt->getRange(sid) : NULL;
1989 }
1990
1991
1992 /*
1993 * Adds a copy of the given SedRange_t to this SedRepeatedTask_t.
1994 */
1995 LIBSEDML_EXTERN
1996 int
SedRepeatedTask_addRange(SedRepeatedTask_t * srt,const SedRange_t * sr)1997 SedRepeatedTask_addRange(SedRepeatedTask_t* srt, const SedRange_t* sr)
1998 {
1999 return (srt != NULL) ? srt->addRange(sr) : LIBSEDML_INVALID_OBJECT;
2000 }
2001
2002
2003 /*
2004 * Get the number of SedRange_t objects in this SedRepeatedTask_t.
2005 */
2006 LIBSEDML_EXTERN
2007 unsigned int
SedRepeatedTask_getNumRanges(SedRepeatedTask_t * srt)2008 SedRepeatedTask_getNumRanges(SedRepeatedTask_t* srt)
2009 {
2010 return (srt != NULL) ? srt->getNumRanges() : SEDML_INT_MAX;
2011 }
2012
2013
2014 /*
2015 * Creates a new SedUniformRange_t object, adds it to this SedRepeatedTask_t
2016 * object and returns the SedUniformRange_t object created.
2017 */
2018 LIBSEDML_EXTERN
2019 SedUniformRange_t*
SedRepeatedTask_createUniformRange(SedRepeatedTask_t * srt)2020 SedRepeatedTask_createUniformRange(SedRepeatedTask_t* srt)
2021 {
2022 return (srt != NULL) ? srt->createUniformRange() : NULL;
2023 }
2024
2025
2026 /*
2027 * Creates a new SedVectorRange_t object, adds it to this SedRepeatedTask_t
2028 * object and returns the SedVectorRange_t object created.
2029 */
2030 LIBSEDML_EXTERN
2031 SedVectorRange_t*
SedRepeatedTask_createVectorRange(SedRepeatedTask_t * srt)2032 SedRepeatedTask_createVectorRange(SedRepeatedTask_t* srt)
2033 {
2034 return (srt != NULL) ? srt->createVectorRange() : NULL;
2035 }
2036
2037
2038 /*
2039 * Creates a new SedFunctionalRange_t object, adds it to this SedRepeatedTask_t
2040 * object and returns the SedFunctionalRange_t object created.
2041 */
2042 LIBSEDML_EXTERN
2043 SedFunctionalRange_t*
SedRepeatedTask_createFunctionalRange(SedRepeatedTask_t * srt)2044 SedRepeatedTask_createFunctionalRange(SedRepeatedTask_t* srt)
2045 {
2046 return (srt != NULL) ? srt->createFunctionalRange() : NULL;
2047 }
2048
2049
2050 /*
2051 * Creates a new SedDataRange_t object, adds it to this SedRepeatedTask_t
2052 * object and returns the SedDataRange_t object created.
2053 */
2054 LIBSEDML_EXTERN
2055 SedDataRange_t*
SedRepeatedTask_createDataRange(SedRepeatedTask_t * srt)2056 SedRepeatedTask_createDataRange(SedRepeatedTask_t* srt)
2057 {
2058 return (srt != NULL) ? srt->createDataRange() : NULL;
2059 }
2060
2061
2062 /*
2063 * Removes the nth SedRange_t from this SedRepeatedTask_t and returns a pointer
2064 * to it.
2065 */
2066 LIBSEDML_EXTERN
2067 SedRange_t*
SedRepeatedTask_removeRange(SedRepeatedTask_t * srt,unsigned int n)2068 SedRepeatedTask_removeRange(SedRepeatedTask_t* srt, unsigned int n)
2069 {
2070 return (srt != NULL) ? srt->removeRange(n) : NULL;
2071 }
2072
2073
2074 /*
2075 * Removes the SedRange_t from this SedRepeatedTask_t based on its identifier
2076 * and returns a pointer to it.
2077 */
2078 LIBSEDML_EXTERN
2079 SedRange_t*
SedRepeatedTask_removeRangeById(SedRepeatedTask_t * srt,const char * sid)2080 SedRepeatedTask_removeRangeById(SedRepeatedTask_t* srt, const char* sid)
2081 {
2082 return (srt != NULL && sid != NULL) ? srt->removeRange(sid) : NULL;
2083 }
2084
2085
2086 /*
2087 * Returns a ListOf_t * containing SedSetValue_t objects from this
2088 * SedRepeatedTask_t.
2089 */
2090 LIBSEDML_EXTERN
2091 SedListOf_t*
SedRepeatedTask_getListOfTaskChanges(SedRepeatedTask_t * srt)2092 SedRepeatedTask_getListOfTaskChanges(SedRepeatedTask_t* srt)
2093 {
2094 return (srt != NULL) ? srt->getListOfTaskChanges() : NULL;
2095 }
2096
2097
2098 /*
2099 * Get a SedSetValue_t from the SedRepeatedTask_t.
2100 */
2101 LIBSEDML_EXTERN
2102 SedSetValue_t*
SedRepeatedTask_getTaskChange(SedRepeatedTask_t * srt,unsigned int n)2103 SedRepeatedTask_getTaskChange(SedRepeatedTask_t* srt, unsigned int n)
2104 {
2105 return (srt != NULL) ? srt->getTaskChange(n) : NULL;
2106 }
2107
2108
2109 /*
2110 * Get a SedSetValue_t from the SedRepeatedTask_t based on the ModelReference
2111 * to which it refers.
2112 */
2113 LIBSEDML_EXTERN
2114 SedSetValue_t*
SedRepeatedTask_getTaskChangeByModelReference(SedRepeatedTask_t * srt,const char * sid)2115 SedRepeatedTask_getTaskChangeByModelReference(SedRepeatedTask_t* srt,
2116 const char *sid)
2117 {
2118 return (srt != NULL && sid != NULL) ? srt->getTaskChangeByModelReference(sid)
2119 : NULL;
2120 }
2121
2122
2123 /*
2124 * Get a SedSetValue_t from the SedRepeatedTask_t based on the Range to which
2125 * it refers.
2126 */
2127 LIBSEDML_EXTERN
2128 SedSetValue_t*
SedRepeatedTask_getTaskChangeByRange(SedRepeatedTask_t * srt,const char * sid)2129 SedRepeatedTask_getTaskChangeByRange(SedRepeatedTask_t* srt, const char *sid)
2130 {
2131 return (srt != NULL && sid != NULL) ? srt->getTaskChangeByRange(sid) : NULL;
2132 }
2133
2134
2135 /*
2136 * Adds a copy of the given SedSetValue_t to this SedRepeatedTask_t.
2137 */
2138 LIBSEDML_EXTERN
2139 int
SedRepeatedTask_addTaskChange(SedRepeatedTask_t * srt,const SedSetValue_t * ssv)2140 SedRepeatedTask_addTaskChange(SedRepeatedTask_t* srt,
2141 const SedSetValue_t* ssv)
2142 {
2143 return (srt != NULL) ? srt->addTaskChange(ssv) : LIBSEDML_INVALID_OBJECT;
2144 }
2145
2146
2147 /*
2148 * Get the number of SedSetValue_t objects in this SedRepeatedTask_t.
2149 */
2150 LIBSEDML_EXTERN
2151 unsigned int
SedRepeatedTask_getNumTaskChanges(SedRepeatedTask_t * srt)2152 SedRepeatedTask_getNumTaskChanges(SedRepeatedTask_t* srt)
2153 {
2154 return (srt != NULL) ? srt->getNumTaskChanges() : SEDML_INT_MAX;
2155 }
2156
2157
2158 /*
2159 * Creates a new SedSetValue_t object, adds it to this SedRepeatedTask_t object
2160 * and returns the SedSetValue_t object created.
2161 */
2162 LIBSEDML_EXTERN
2163 SedSetValue_t*
SedRepeatedTask_createTaskChange(SedRepeatedTask_t * srt)2164 SedRepeatedTask_createTaskChange(SedRepeatedTask_t* srt)
2165 {
2166 return (srt != NULL) ? srt->createTaskChange() : NULL;
2167 }
2168
2169
2170 /*
2171 * Removes the nth SedSetValue_t from this SedRepeatedTask_t and returns a
2172 * pointer to it.
2173 */
2174 LIBSEDML_EXTERN
2175 SedSetValue_t*
SedRepeatedTask_removeTaskChange(SedRepeatedTask_t * srt,unsigned int n)2176 SedRepeatedTask_removeTaskChange(SedRepeatedTask_t* srt, unsigned int n)
2177 {
2178 return (srt != NULL) ? srt->removeTaskChange(n) : NULL;
2179 }
2180
2181
2182 /*
2183 * Returns a ListOf_t * containing SedSubTask_t objects from this
2184 * SedRepeatedTask_t.
2185 */
2186 LIBSEDML_EXTERN
2187 SedListOf_t*
SedRepeatedTask_getListOfSubTasks(SedRepeatedTask_t * srt)2188 SedRepeatedTask_getListOfSubTasks(SedRepeatedTask_t* srt)
2189 {
2190 return (srt != NULL) ? srt->getListOfSubTasks() : NULL;
2191 }
2192
2193
2194 /*
2195 * Get a SedSubTask_t from the SedRepeatedTask_t.
2196 */
2197 LIBSEDML_EXTERN
2198 SedSubTask_t*
SedRepeatedTask_getSubTask(SedRepeatedTask_t * srt,unsigned int n)2199 SedRepeatedTask_getSubTask(SedRepeatedTask_t* srt, unsigned int n)
2200 {
2201 return (srt != NULL) ? srt->getSubTask(n) : NULL;
2202 }
2203
2204
2205 /*
2206 * Get a SedSubTask_t from the SedRepeatedTask_t based on the Task to which it
2207 * refers.
2208 */
2209 LIBSEDML_EXTERN
2210 SedSubTask_t*
SedRepeatedTask_getSubTaskByTask(SedRepeatedTask_t * srt,const char * sid)2211 SedRepeatedTask_getSubTaskByTask(SedRepeatedTask_t* srt, const char *sid)
2212 {
2213 return (srt != NULL && sid != NULL) ? srt->getSubTaskByTask(sid) : NULL;
2214 }
2215
2216
2217 /*
2218 * Adds a copy of the given SedSubTask_t to this SedRepeatedTask_t.
2219 */
2220 LIBSEDML_EXTERN
2221 int
SedRepeatedTask_addSubTask(SedRepeatedTask_t * srt,const SedSubTask_t * sst)2222 SedRepeatedTask_addSubTask(SedRepeatedTask_t* srt, const SedSubTask_t* sst)
2223 {
2224 return (srt != NULL) ? srt->addSubTask(sst) : LIBSEDML_INVALID_OBJECT;
2225 }
2226
2227
2228 /*
2229 * Get the number of SedSubTask_t objects in this SedRepeatedTask_t.
2230 */
2231 LIBSEDML_EXTERN
2232 unsigned int
SedRepeatedTask_getNumSubTasks(SedRepeatedTask_t * srt)2233 SedRepeatedTask_getNumSubTasks(SedRepeatedTask_t* srt)
2234 {
2235 return (srt != NULL) ? srt->getNumSubTasks() : SEDML_INT_MAX;
2236 }
2237
2238
2239 /*
2240 * Creates a new SedSubTask_t object, adds it to this SedRepeatedTask_t object
2241 * and returns the SedSubTask_t object created.
2242 */
2243 LIBSEDML_EXTERN
2244 SedSubTask_t*
SedRepeatedTask_createSubTask(SedRepeatedTask_t * srt)2245 SedRepeatedTask_createSubTask(SedRepeatedTask_t* srt)
2246 {
2247 return (srt != NULL) ? srt->createSubTask() : NULL;
2248 }
2249
2250
2251 /*
2252 * Removes the nth SedSubTask_t from this SedRepeatedTask_t and returns a
2253 * pointer to it.
2254 */
2255 LIBSEDML_EXTERN
2256 SedSubTask_t*
SedRepeatedTask_removeSubTask(SedRepeatedTask_t * srt,unsigned int n)2257 SedRepeatedTask_removeSubTask(SedRepeatedTask_t* srt, unsigned int n)
2258 {
2259 return (srt != NULL) ? srt->removeSubTask(n) : NULL;
2260 }
2261
2262
2263 /*
2264 * Predicate returning @c 1 (true) if all the required attributes for this
2265 * SedRepeatedTask_t object have been set.
2266 */
2267 LIBSEDML_EXTERN
2268 int
SedRepeatedTask_hasRequiredAttributes(const SedRepeatedTask_t * srt)2269 SedRepeatedTask_hasRequiredAttributes(const SedRepeatedTask_t * srt)
2270 {
2271 return (srt != NULL) ? static_cast<int>(srt->hasRequiredAttributes()) : 0;
2272 }
2273
2274
2275 /*
2276 * Predicate returning @c 1 (true) if all the required elements for this
2277 * SedRepeatedTask_t object have been set.
2278 */
2279 LIBSEDML_EXTERN
2280 int
SedRepeatedTask_hasRequiredElements(const SedRepeatedTask_t * srt)2281 SedRepeatedTask_hasRequiredElements(const SedRepeatedTask_t * srt)
2282 {
2283 return (srt != NULL) ? static_cast<int>(srt->hasRequiredElements()) : 0;
2284 }
2285
2286
2287
2288
2289 LIBSEDML_CPP_NAMESPACE_END
2290
2291
2292