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

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

Preliminary commit of new issm version, where serial code is starting to be stripped away. Will not run before some major debugging is done

File size: 4.6 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::SetValue{{{1*/
167void StringParam::SetValue(char* string){
168
169 int stringsize;
170
171 /*avoid leak: */
172 xfree((void**)&this->value);
173
174 /*copy: */
175 stringsize=strlen(string)+1;
176 this->value=(char*)xmalloc(stringsize*sizeof(char));
177 memcpy(this->value,string,stringsize*sizeof(char));
178
179}
180/*}}}*/
181/*FUNCTION StringParam::UnitConversion{{{1*/
182void StringParam::UnitConversion(int direction_enum){
183 /*do nothing, no unit conversion*/
184}
185/*}}}*/
Note: See TracBrowser for help on using the repository browser.