Changeset 3278 for trunk/lang
- Timestamp:
- Feb 4, 2013, 1:54:59 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/lang/ruby/Ruby_Rappture.cc
r3177 r3278 27 27 #include "RpUnits.h" /* RpUnits::convert() */ 28 28 #include "ruby.h" /* VALUE, rb_*(), Data_*_Struct(), NUM2INT(), 29 INT2NUM(), NUM2DBL(), S TR2CSTR(), ANYARGS */29 INT2NUM(), NUM2DBL(), Str2Cstr(), ANYARGS */ 30 30 31 31 /****************************************************************************** … … 40 40 41 41 extern "C" void Init_Rappture(void); 42 43 static std::string 44 GetStdString(VALUE value) 45 { 46 VALUE strValue; 47 48 strValue = StringValue(value); 49 return std::string(RSTRING(strValue)->ptr, RSTRING(strValue)->len); 50 } 51 52 static const char * 53 GetString(VALUE value) 54 { 55 return StringValuePtr(value); 56 } 42 57 43 58 /****************************************************************************** … … 61 76 { 62 77 RpLibrary *lib; 63 std::string str;78 std::string result; 64 79 65 80 /* Extract the pointer to the Rappture object, lib, from the Ruby object, … … 67 82 Data_Get_Struct(self, RpLibrary, lib); 68 83 84 69 85 /* Read the data from path in lib as a C++ std::string. */ 70 str = lib->getString(STR2CSTR(path));86 result = lib->getString(GetStdString(path)); 71 87 72 88 /* Return a Ruby VALUE */ 73 return rb_str_new2( str.c_str());89 return rb_str_new2(result.c_str()); 74 90 75 91 } /* end RbRp_GetString */ … … 95 111 96 112 /* Read the data from path in lib as a C++ std::string. */ 97 buf = lib->getData( STR2CSTR(path));113 buf = lib->getData(GetStdString(path)); 98 114 99 115 /* Return a Ruby VALUE */ … … 142 158 { 143 159 case T_STRING: 144 lib->put(STR2CSTR(path), STR2CSTR(value), "", NUM2INT(append)); 160 /* Read the data from path in lib as a C++ std::string. */ 161 lib->put(GetStdString(path), GetStdString(value), "", 162 NUM2INT(append)); 145 163 break; 146 164 case T_FIXNUM: 147 165 intVal = NUM2INT(value); 148 lib->putData( STR2CSTR(path), (const char *)&intVal, sizeof(int),166 lib->putData(GetStdString(path), (const char *)&intVal, sizeof(int), 149 167 NUM2INT(append)); 150 168 break; 151 169 case T_FLOAT: 152 lib->put( STR2CSTR(path), NUM2DBL(value), "", NUM2INT(append));170 lib->put(GetStdString(path), NUM2DBL(value), "", NUM2INT(append)); 153 171 break; 154 172 default: … … 156 174 rb_raise(rb_eRuntimeError, 157 175 "Unable to put object %s to Rappture: unknown type", 158 STR2CSTR(rbStrName));176 GetString(rbStrName)); 159 177 #endif 160 178 break; … … 202 220 char *bytes = rb_str2cstr(value, &nbytes); 203 221 204 lib->putData( STR2CSTR(path), bytes, nbytes, NUM2INT(append));222 lib->putData(GetStdString(path), bytes, nbytes, NUM2INT(append)); 205 223 } 206 224 #ifdef RAISE_EXCEPTIONS … … 209 227 rb_raise(rb_eRuntimeError, 210 228 "Unable to put data \"%s\" to Rappture: unknown type", 211 STR2CSTR(rbStrName));229 GetString(rbStrName)); 212 230 } 213 231 #endif … … 257 275 if (Qtrue == rb_funcall(ft, id_filetest, 1, filename)) /* valid filename */ 258 276 { 259 lib->putFile( STR2CSTR(path), STR2CSTR(filename), NUM2INT(compress),260 277 lib->putFile(GetStdString(path), GetStdString(filename), 278 NUM2INT(compress), NUM2INT(append)); 261 279 } 262 280 #ifdef RAISE_EXCEPTIONS … … 264 282 { 265 283 rb_raise(rb_eRuntimeError, "%s is not a valid file", 266 STR2CSTR(rbStrName));284 GetString(rbStrName)); 267 285 } 268 286 #endif … … 270 288 #ifdef RAISE_EXCEPTIONS 271 289 else 272 rb_raise(rb_eRuntimeError, "Bad file name: %s", STR2CSTR(rbStrName)); 290 rb_raise(rb_eRuntimeError, "Bad file name: %s", 291 GetString(rbStrName)); 273 292 #endif 274 293 … … 360 379 361 380 /* Write the message */ 362 (void)Rappture::Utils::progress(NUM2INT(percent), STR2CSTR(message)); 381 (void)Rappture::Utils::progress(NUM2INT(percent), 382 GetString(message)); 363 383 364 384 /* Return a Ruby VALUE */ … … 385 405 { 386 406 VALUE retVal = Qnil; 387 RpLibrary *lib;388 407 std::string strRetVal; 389 408 int result; 390 409 391 /* Extract the pointer to the Rappture object, lib, from the Ruby392 object, self */393 Data_Get_Struct(self, RpLibrary, lib);394 395 410 /* Convert */ 396 strRetVal = RpUnits::convert( STR2CSTR(fromVal), STR2CSTR(toUnitsName),397 411 strRetVal = RpUnits::convert(GetStdString(fromVal), 412 GetStdString(toUnitsName), NUM2INT(showUnits), &result); 398 413 /* Return value */ 399 414 if (0 == result) … … 409 424 else 410 425 rb_raise(rb_eRuntimeError, "Unable to convert \"%s\" to \"%s\"", 411 STR2CSTR(fromVal), STR2CSTR(toUnitsName));426 GetString(fromVal), GetString(toUnitsName)); 412 427 #endif 413 428 return retVal; … … 473 488 { 474 489 /* Create the Rappture object from the XML driver file. */ 475 RpLibrary *lib = new RpLibrary( STR2CSTR(driver));490 RpLibrary *lib = new RpLibrary(GetStdString(driver)); 476 491 477 492 /* Data_Wrap_Struct() creates a new Ruby object which associates the
Note: See TracChangeset
for help on using the changeset viewer.