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