example.cc 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /// This is an example of Ray C++ application. Please visit
  2. /// `https://docs.ray.io/en/master/ray-core/walkthrough.html#installation`
  3. /// for more details.
  4. /// including the `<ray/api.h>` header
  5. #include <ray/api.h>
  6. /// common function
  7. int Plus(int x, int y) { return x + y; }
  8. /// Declare remote function
  9. RAY_REMOTE(Plus);
  10. /// class
  11. class Counter {
  12. public:
  13. int count;
  14. Counter(int init) { count = init; }
  15. /// static factory method
  16. static Counter *FactoryCreate(int init) { return new Counter(init); }
  17. /// non static function
  18. int Add(int x) {
  19. count += x;
  20. return count;
  21. }
  22. };
  23. /// Declare remote function
  24. RAY_REMOTE(Counter::FactoryCreate, &Counter::Add);
  25. int main(int argc, char **argv) {
  26. /// initialization
  27. ray::Init();
  28. /// put and get object
  29. auto object = ray::Put(100);
  30. auto put_get_result = *(ray::Get(object));
  31. std::cout << "put_get_result = " << put_get_result << std::endl;
  32. /// common task
  33. auto task_object = ray::Task(Plus).Remote(1, 2);
  34. int task_result = *(ray::Get(task_object));
  35. std::cout << "task_result = " << task_result << std::endl;
  36. /// actor
  37. ray::ActorHandle<Counter> actor = ray::Actor(Counter::FactoryCreate).Remote(0);
  38. /// actor task
  39. auto actor_object = actor.Task(&Counter::Add).Remote(3);
  40. int actor_task_result = *(ray::Get(actor_object));
  41. std::cout << "actor_task_result = " << actor_task_result << std::endl;
  42. /// actor task with reference argument
  43. auto actor_object2 = actor.Task(&Counter::Add).Remote(task_object);
  44. int actor_task_result2 = *(ray::Get(actor_object2));
  45. std::cout << "actor_task_result2 = " << actor_task_result2 << std::endl;
  46. /// shutdown
  47. ray::Shutdown();
  48. return 0;
  49. }