source: issm/trunk-jpl/src/c/objects/Params/StringParam.cpp@ 11843

Last change on this file since 11843 was 11843, checked in by Eric.Larour, 13 years ago

Made matlab and python layers more independent in the ISSM code

File size: 4.9 KB
Line 
1/*!\file StringParam.c
2 * \brief: implementation of the StringParam object
3 */
4
5/*header files: */
6/*{{{1*/
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 <stdio.h>
14#include <string.h>
15#include "../objects.h"
16#include "../../EnumDefinitions/EnumDefinitions.h"
17#include "../../shared/shared.h"
18#include "../../Container/Container.h"
19#include "../../include/include.h"
20/*}}}*/
21
22/*StringParam constructors and destructor*/
23/*FUNCTION StringParam::StringParam(){{{1*/
24StringParam::StringParam(){
25 return;
26}
27/*}}}*/
28/*FUNCTION StringParam::StringParam(int enum_type,IssmString value){{{1*/
29StringParam::StringParam(int in_enum_type,char* in_value){
30
31 enum_type=in_enum_type;
32 value=(char*)xmalloc((strlen(in_value)+1)*sizeof(char));
33 memcpy(value,in_value,(strlen(in_value)+1)*sizeof(char));
34
35
36}
37/*}}}*/
38/*FUNCTION StringParam::~StringParam(){{{1*/
39StringParam::~StringParam(){
40 xfree((void**)&value);
41}
42/*}}}*/
43
44/*Object virtual functions definitions:*/
45/*FUNCTION StringParam::Echo {{{1*/
46void StringParam::Echo(void){
47 this->DeepEcho();
48}
49/*}}}*/
50/*FUNCTION StringParam::DeepEcho{{{1*/
51void StringParam::DeepEcho(void){
52 printf("StringParam:\n");
53 printf(" enum: %i (%s)\n",this->enum_type,EnumToStringx(this->enum_type));
54 printf(" value: %s\n",this->value);
55}
56/*}}}*/
57/*FUNCTION StringParam::Id{{{1*/
58int StringParam::Id(void){ return -1; }
59/*}}}*/
60/*FUNCTION StringParam::MyRank{{{1*/
61int StringParam::MyRank(void){
62 extern int my_rank;
63 return my_rank;
64}
65/*}}}*/
66#ifdef _SERIAL_
67/*FUNCTION StringParam::Marshall{{{1*/
68void StringParam::Marshall(char** pmarshalled_dataset){
69
70 char* marshalled_dataset=NULL;
71 int enum_value=0;
72 int stringsize;
73
74 /*recover marshalled_dataset: */
75 marshalled_dataset=*pmarshalled_dataset;
76
77 /*get enum value of StringParam: */
78 enum_value=StringParamEnum;
79
80 /*marshall enum: */
81 memcpy(marshalled_dataset,&enum_value,sizeof(enum_value));marshalled_dataset+=sizeof(enum_value);
82
83 /*marshall data: */
84 memcpy(marshalled_dataset,&enum_type,sizeof(enum_type));marshalled_dataset+=sizeof(enum_type);
85 stringsize=strlen(this->value)+1;
86
87 memcpy(marshalled_dataset,&stringsize,sizeof(stringsize));marshalled_dataset+=sizeof(stringsize);
88 memcpy(marshalled_dataset,this->value,stringsize*sizeof(char));marshalled_dataset+=stringsize*sizeof(char);
89
90 *pmarshalled_dataset=marshalled_dataset;
91}
92/*}}}*/
93/*FUNCTION StringParam::MarshallSize{{{1*/
94int StringParam::MarshallSize(){
95
96 int stringsize;
97 stringsize=strlen(this->value)+1;
98
99 return sizeof(int)+
100 stringsize*sizeof(char)+
101 sizeof(enum_type)+
102 sizeof(int); //sizeof(int) for enum value
103}
104/*}}}*/
105/*FUNCTION StringParam::Demarshall{{{1*/
106void StringParam::Demarshall(char** pmarshalled_dataset){
107
108 char* marshalled_dataset=NULL;
109 int i;
110 int stringsize;
111
112 /*recover marshalled_dataset: */
113 marshalled_dataset=*pmarshalled_dataset;
114
115 /*this time, no need to get enum type, the pointer directly points to the beginning of the
116 *object data (thanks to DataSet::Demarshall):*/
117 memcpy(&enum_type,marshalled_dataset,sizeof(enum_type));marshalled_dataset+=sizeof(enum_type);
118
119 memcpy(&stringsize,marshalled_dataset,sizeof(int));marshalled_dataset+=sizeof(int);
120
121 this->value=(char*)xmalloc(stringsize*sizeof(char));
122 memcpy(this->value,marshalled_dataset,stringsize*sizeof(char));marshalled_dataset+=stringsize*sizeof(char);
123
124 /*return: */
125 *pmarshalled_dataset=marshalled_dataset;
126 return;
127}
128/*}}}*/
129#endif
130/*FUNCTION StringParam::ObjectEnum{{{1*/
131int StringParam::ObjectEnum(void){
132
133 return StringParamEnum;
134
135}
136/*}}}*/
137/*FUNCTION StringParam::copy{{{1*/
138Object* StringParam::copy() {
139
140 return new StringParam(this->enum_type,this->value);
141
142}
143/*}}}*/
144
145/*StringParam virtual functions definitions: */
146/*FUNCTION StringParam::GetParameterValue{{{1*/
147void StringParam::GetParameterValue(char** pstring){
148
149 char* outstring=NULL;
150 int stringsize;
151
152 stringsize=strlen(this->value)+1;
153
154 outstring=(char*)xmalloc(stringsize*sizeof(char));
155 memcpy(outstring,this->value,stringsize*sizeof(char));
156
157 *pstring=outstring;
158
159}
160/*}}}*/
161/*FUNCTION StringParam::GetParameterName{{{1*/
162void StringParam::GetParameterName(char**pname){
163 EnumToStringx(pname,this->enum_type);
164}
165/*}}}*/
166/*FUNCTION StringParam::SetMatlabField{{{1*/
167#ifdef _HAVE_MATLAB_
168void StringParam::SetMatlabField(mxArray* dataref){
169
170 char* name=NULL;
171
172 this->GetParameterName(&name);
173 mxSetField( dataref, 0, name, mxCreateString(value));
174}
175#endif
176/*}}}*/
177/*FUNCTION StringParam::SetValue{{{1*/
178void StringParam::SetValue(char* string){
179
180 int stringsize;
181
182 /*avoid leak: */
183 xfree((void**)&this->value);
184
185 /*copy: */
186 stringsize=strlen(string)+1;
187 this->value=(char*)xmalloc(stringsize*sizeof(char));
188 memcpy(this->value,string,stringsize*sizeof(char));
189
190}
191/*}}}*/
192/*FUNCTION StringParam::UnitConversion{{{1*/
193void StringParam::UnitConversion(int direction_enum){
194 /*do nothing, no unit conversion*/
195}
196/*}}}*/
Note: See TracBrowser for help on using the repository browser.