expmple_addCplusplus.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include <rtthread.h>
  2. #include <jerry_util.h>
  3. class Rectangle
  4. {
  5. private:
  6. int length;
  7. int width;
  8. public:
  9. Rectangle(int length,int width);
  10. int getSize();
  11. int getLength();
  12. int getWidth();
  13. };
  14. Rectangle::Rectangle(int length,int width)
  15. {
  16. this->length = length;
  17. this->width = width;
  18. }
  19. int Rectangle::getSize()
  20. {
  21. return (this->length * this->width);
  22. }
  23. int Rectangle::getLength()
  24. {
  25. return this->length;
  26. }
  27. int Rectangle::getWidth()
  28. {
  29. return this->width;
  30. }
  31. void rectangle_free_callback(void *native_p)
  32. {
  33. Rectangle* rect = (Rectangle*)native_p;
  34. delete(rect);
  35. }
  36. const static jerry_object_native_info_t rectangle_info =
  37. {
  38. rectangle_free_callback
  39. };
  40. DECLARE_HANDLER(getSize)
  41. {
  42. void *native_pointer = RT_NULL;
  43. jerry_get_object_native_pointer(this_value,&native_pointer,RT_NULL);
  44. if(native_pointer)
  45. {
  46. Rectangle* rectangle = (Rectangle*)native_pointer;
  47. jerry_value_t js_size = jerry_create_number(rectangle->getSize());
  48. return js_size;
  49. }
  50. return jerry_create_undefined();
  51. }
  52. DECLARE_HANDLER(getLength)
  53. {
  54. void *native_pointer = RT_NULL;
  55. jerry_get_object_native_pointer(this_value,&native_pointer,RT_NULL);
  56. if(native_pointer)
  57. {
  58. Rectangle* rectangle = (Rectangle*)native_pointer;
  59. jerry_value_t js_length = jerry_create_number(rectangle->getLength());
  60. return js_length;
  61. }
  62. return jerry_create_undefined();
  63. }
  64. DECLARE_HANDLER(getWidth)
  65. {
  66. void *native_pointer = RT_NULL;
  67. jerry_get_object_native_pointer(this_value,&native_pointer,RT_NULL);
  68. if(native_pointer)
  69. {
  70. Rectangle* rectangle = (Rectangle*)native_pointer;
  71. jerry_value_t js_width = jerry_create_number(rectangle->getWidth());
  72. return js_width;
  73. }
  74. return jerry_create_undefined();
  75. }
  76. DECLARE_HANDLER(rectangle)
  77. {
  78. if(args_cnt !=2 || !jerry_value_is_number(args[0]) || !jerry_value_is_number(args[1]))
  79. return jerry_create_undefined();
  80. jerry_value_t js_rect = jerry_create_object();
  81. Rectangle* rectangle = new Rectangle(jerry_get_number_value(args[0]),jerry_get_number_value(args[1]));
  82. jerry_set_object_native_pointer(js_rect, rectangle,&rectangle_info);
  83. jerry_value_t js_length = jerry_create_number(rectangle->getLength());
  84. jerry_value_t js_width = jerry_create_number(rectangle->getWidth());
  85. js_set_property(js_rect,"length",js_length);
  86. js_set_property(js_rect,"width",js_width);
  87. jerry_release_value(js_length);
  88. jerry_release_value(js_width);
  89. REGISTER_METHOD(js_rect,getSize);
  90. REGISTER_METHOD(js_rect,getLength);
  91. REGISTER_METHOD(js_rect,getWidth);
  92. return js_rect;
  93. }
  94. extern "C"
  95. {
  96. int js_example_rect_init(jerry_value_t obj)
  97. {
  98. REGISTER_METHOD(obj, rectangle);
  99. return 0;
  100. }
  101. }