Ice Sheet System Model  4.18
Code documentation
Results.cpp
Go to the documentation of this file.
1 /*
2  * \file Results.cpp
3  * \brief: Implementation of the Results class, derived from DataSet class.
4  */
5 
6 /*Headers: {{{*/
7 #ifdef HAVE_CONFIG_H
8  #include <config.h>
9 #else
10 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
11 #endif
12 
13 #include "./Results.h"
14 #include "./ExternalResult.h"
15 #include "../../shared/shared.h"
16 #include "../Params/Parameters.h"
17 
18 using namespace std;
19 /*}}}*/
20 
21 /*Object constructors and destructor*/
23  enum_type=ResultsEnum;
24  return;
25 }
26 /*}}}*/
28  return;
29 }
30 /*}}}*/
31 
32 /*Object management*/
33 int Results::AddResult(ExternalResult* in_result){/*{{{*/
34 
35  /*First, go through dataset of inputs and check whether any input
36  * with the same name is already in. If so, erase the corresponding
37  * object before adding this new one: */
38 
39  /*In debugging mode, check that the input is not a NULL pointer*/
40  _assert_(in_result);
41 
42  for(int i=0;i<this->Size();i++){
43  ExternalResult* result=xDynamicCast<ExternalResult*>(this->GetObjectByOffset(i));
44 
45  if(result->GetStep()==in_result->GetStep()){
46  char* result_name = result->GetResultName();
47  char* in_result_name = in_result->GetResultName();
48  if(strcmp(in_result_name,result_name)==0){
49 
50  this->DeleteObject(result);
51  xDelete<char>(result_name);
52  xDelete<char>(in_result_name);
53  break;
54  }
55  xDelete<char>(result_name);
56  xDelete<char>(in_result_name);
57  }
58  }
59  this->AddObject(in_result);
60 
61  return 1;
62 }
63 /*}}}*/
64 int Results::DeleteResult(int result_enum,int result_step){/*{{{*/
65 
66  for(int i=0;i<this->Size();i++){
67  ExternalResult* result=xDynamicCast<ExternalResult*>(this->GetObjectByOffset(i));
68 
69  if(result->GetStep()==result_step){
70  if(strcmp(result->GetResultName(),EnumToStringx(result_enum))==0){
71  this->DeleteObject(result);
72  break;
73  }
74  }
75  }
76 
77  return 1;
78 }
79 /*}}}*/
80 ExternalResult* Results::FindResult(int result_enum){/*{{{*/
81 
82  for(int i=0;i<this->Size();i++){
83  ExternalResult* result=xDynamicCast<ExternalResult*>(this->GetObjectByOffset(i));
84 
85  if(result->GetResultEnum()==result_enum){
86  return result;
87  }
88  }
89  return NULL;
90 }
91 /*}}}*/
92 void Results::Write(Parameters* parameters){/*{{{*/
93 
94  FILE *fid = NULL;
95  bool io_gather;
96 
97  /*Recover file descriptor: */
98  parameters->FindParam(&fid,OutputFilePointerEnum);
99  parameters->FindParam(&io_gather,SettingsIoGatherEnum);
100 
101  for(int i=0;i<this->Size();i++){
102  ExternalResult* result=xDynamicCast<ExternalResult*>(this->GetObjectByOffset(i));
103  result->WriteData(fid,io_gather);
104  }
105 
106 }
107 /*}}}*/
_assert_
#define _assert_(ignore)
Definition: exceptions.h:37
Parameters
Declaration of Parameters class.
Definition: Parameters.h:18
Results::Write
void Write(Parameters *parameters)
Definition: Results.cpp:92
ExternalResult::GetStep
virtual int GetStep(void)=0
Results::DeleteResult
int DeleteResult(int result_enum, int result_step)
Definition: Results.cpp:64
Results::Results
Results()
Definition: Results.cpp:22
Results::~Results
~Results()
Definition: Results.cpp:27
ExternalResult
Definition: ExternalResult.h:21
EnumToStringx
const char * EnumToStringx(int enum_in)
Definition: EnumToStringx.cpp:15
ExternalResult::WriteData
virtual void WriteData(FILE *fid, bool io_gather)=0
ExternalResult.h
abstract class for ExternalResult object
Results::AddResult
int AddResult(ExternalResult *result)
Definition: Results.cpp:33
Results::FindResult
ExternalResult * FindResult(int result_enum)
Definition: Results.cpp:80
ResultsEnum
@ ResultsEnum
Definition: EnumDefinitions.h:300
ExternalResult::GetResultName
virtual char * GetResultName(void)=0
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
Results.h
OutputFilePointerEnum
@ OutputFilePointerEnum
Definition: EnumDefinitions.h:284
SettingsIoGatherEnum
@ SettingsIoGatherEnum
Definition: EnumDefinitions.h:334
ExternalResult::GetResultEnum
virtual int GetResultEnum(void)=0