// Generated by `RayCallGenerator.java`. DO NOT EDIT.

package io.ray.api;

import io.ray.api.call.CppActorTaskCaller;
import io.ray.api.function.CppActorMethod;

/** This class provides type-safe interfaces for remote actor calls. */
interface CppActorCall {

  default <R> CppActorTaskCaller<R> task(CppActorMethod<R> cppActorMethod) {
    Object[] args = new Object[] {};
    return new CppActorTaskCaller<>((CppActorHandle) this, cppActorMethod, args);
  }

  default <R> CppActorTaskCaller<R> task(CppActorMethod<R> cppActorMethod, Object obj0) {
    Object[] args = new Object[] {obj0};
    return new CppActorTaskCaller<>((CppActorHandle) this, cppActorMethod, args);
  }

  default <R> CppActorTaskCaller<R> task(
      CppActorMethod<R> cppActorMethod, Object obj0, Object obj1) {
    Object[] args = new Object[] {obj0, obj1};
    return new CppActorTaskCaller<>((CppActorHandle) this, cppActorMethod, args);
  }

  default <R> CppActorTaskCaller<R> task(
      CppActorMethod<R> cppActorMethod, Object obj0, Object obj1, Object obj2) {
    Object[] args = new Object[] {obj0, obj1, obj2};
    return new CppActorTaskCaller<>((CppActorHandle) this, cppActorMethod, args);
  }

  default <R> CppActorTaskCaller<R> task(
      CppActorMethod<R> cppActorMethod, Object obj0, Object obj1, Object obj2, Object obj3) {
    Object[] args = new Object[] {obj0, obj1, obj2, obj3};
    return new CppActorTaskCaller<>((CppActorHandle) this, cppActorMethod, args);
  }

  default <R> CppActorTaskCaller<R> task(
      CppActorMethod<R> cppActorMethod,
      Object obj0,
      Object obj1,
      Object obj2,
      Object obj3,
      Object obj4) {
    Object[] args = new Object[] {obj0, obj1, obj2, obj3, obj4};
    return new CppActorTaskCaller<>((CppActorHandle) this, cppActorMethod, args);
  }
}
