Arguments.cpp 1.7 KB
Newer Older
Y
Yu Yang 已提交
1 2 3
#include "PaddleCAPI.h"
#include "PaddleCAPIPrivate.h"

Y
Yu Yang 已提交
4 5 6 7
using paddle::capi::cast;

#define castArg(v) cast<paddle::capi::CArguments>(v)
#define castIVec(v) cast<paddle::capi::CIVector>(v)
Y
Yu Yang 已提交
8 9 10 11 12

extern "C" {
int PDArgsCreateNone(PD_Arguments* args) {
  auto ptr = new paddle::capi::CArguments();
  *args = ptr;
Y
Yu Yang 已提交
13
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
14 15 16
}

int PDArgsDestroy(PD_Arguments args) {
Y
Yu Yang 已提交
17 18 19
  if (args == nullptr) return kPD_NULLPTR;
  delete castArg(args);
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
20 21 22
}

int PDArgsGetSize(PD_Arguments args, uint64_t* size) {
Y
Yu Yang 已提交
23 24 25
  if (args == nullptr || size == nullptr) return kPD_NULLPTR;
  *size = castArg(args)->args.size();
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
26 27 28
}

int PDArgsResize(PD_Arguments args, uint64_t size) {
Y
Yu Yang 已提交
29 30 31
  if (args == nullptr) return kPD_NULLPTR;
  castArg(args)->args.resize(size);
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
32 33 34
}

int PDArgsSetValue(PD_Arguments args, uint64_t ID, PD_Matrix mat) {
Y
Yu Yang 已提交
35
  if (args == nullptr || mat == nullptr) return kPD_NULLPTR;
Y
Yu Yang 已提交
36
  auto m = paddle::capi::cast<paddle::capi::CMatrix>(mat);
Y
Yu Yang 已提交
37 38 39
  if (m->mat == nullptr) return kPD_NULLPTR;
  auto a = castArg(args);
  if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
Y
Yu Yang 已提交
40
  a->args[ID].value = m->mat;
Y
Yu Yang 已提交
41
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
42 43 44
}

int PDArgsGetValue(PD_Arguments args, uint64_t ID, PD_Matrix mat) {
Y
Yu Yang 已提交
45
  if (args == nullptr || mat == nullptr) return kPD_NULLPTR;
Y
Yu Yang 已提交
46
  auto m = paddle::capi::cast<paddle::capi::CMatrix>(mat);
Y
Yu Yang 已提交
47 48
  auto a = castArg(args);
  if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
Y
Yu Yang 已提交
49
  m->mat = a->args[ID].value;
Y
Yu Yang 已提交
50 51 52 53 54 55 56 57 58 59
  return kPD_NO_ERROR;
}

int PDArgsGetIds(PD_Arguments args, uint64_t ID, PD_IVector ids) {
  if (args == nullptr || ids == nullptr) return kPD_NULLPTR;
  auto iv = castIVec(ids);
  auto a = castArg(args);
  if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
  iv->vec = a->args[ID].ids;
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
60 61
}
}