Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. import std.stdio;
  2.  
  3. import mruby;
  4. import mruby.compile;
  5. import mruby.value;
  6. import mruby.data;
  7. import mruby.mrb_class;
  8. import mruby.value;
  9. import std.string;
  10. import std.conv;
  11.  
  12. struct Test
  13. {
  14. string mystr;
  15. ulong myulong;
  16. @property string[] mystrarr;
  17. string[string] mystrmap;
  18. }
  19.  
  20. Test t;
  21.  
  22. extern(C) mrb_value mrb_nil_value();
  23. extern(C) {
  24. mrb_value getval(mrb_state *mrb, mrb_value self)
  25. {
  26. char* key;
  27. string k;
  28. mrb_get_args(mrb, "z", &key);
  29. //
  30. //writeln("key: ", key.fromStringz);
  31. k = key.fromStringz.to!string;
  32.  
  33. string val = t.mystrmap.get(k,null);
  34. if (val)
  35. return mrb_str_new(mrb, val.toStringz, val.length);
  36. else
  37. return self;
  38. //return self;
  39. }
  40. }
  41.  
  42. import std.datetime;
  43. import core.thread;
  44.  
  45. void main()
  46. {
  47. t.mystrmap["x"] = "xYOLO";
  48. auto mrb = mrb_open;
  49. auto Foo = mrb_define_class(mrb, "Foo", mrb.object_class);
  50.  
  51. mrb_define_method(mrb, Foo, "get", &getval, 262144);
  52.  
  53. auto code = "x = Foo.new; puts 'hello'; puts x.get('x') ";
  54. writeln("Executing Ruby code from D!");
  55. // StopWatch sw;
  56. // sw.start();
  57. mrb_load_string(mrb, code.toStringz);
  58. // sw.stop();
  59. // writeln( sw.peek().msecs, " [ms] per call:", sw.peek().msecs.to!float / 50_000_000 );
  60. // writeln( "per second: ", 50_000_000 /sw.peek().seconds.to!float);
  61. // writeln("finished");
  62. //
  63. //
  64. // Thread.sleep( dur!("seconds")( 1 ) );
  65. // char[] buf;
  66. // stdin.readln(buf);
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement