Arguments.cpp 4.8 KB
Newer Older
Y
Yu Yang 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */

Y
Yu Yang 已提交
15 16 17
#include "PaddleCAPI.h"
#include "PaddleCAPIPrivate.h"

Y
Yu Yang 已提交
18 19 20 21
using paddle::capi::cast;

#define castArg(v) cast<paddle::capi::CArguments>(v)
#define castIVec(v) cast<paddle::capi::CIVector>(v)
Y
Yu Yang 已提交
22 23

extern "C" {
Y
Yu Yang 已提交
24
PD_Arguments PDArgsCreateNone() { return new paddle::capi::CArguments(); }
Y
Yu Yang 已提交
25

Y
Yu Yang 已提交
26
paddle_error PDArgsDestroy(PD_Arguments args) {
Y
Yu Yang 已提交
27 28 29
  if (args == nullptr) return kPD_NULLPTR;
  delete castArg(args);
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
30 31
}

Y
Yu Yang 已提交
32
paddle_error PDArgsGetSize(PD_Arguments args, uint64_t* size) {
Y
Yu Yang 已提交
33 34 35
  if (args == nullptr || size == nullptr) return kPD_NULLPTR;
  *size = castArg(args)->args.size();
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
36 37
}

Y
Yu Yang 已提交
38
paddle_error PDArgsResize(PD_Arguments args, uint64_t size) {
Y
Yu Yang 已提交
39 40 41
  if (args == nullptr) return kPD_NULLPTR;
  castArg(args)->args.resize(size);
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
42 43
}

Y
Yu Yang 已提交
44
paddle_error PDArgsSetValue(PD_Arguments args, uint64_t ID, paddle_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 49
  if (m->mat == nullptr) return kPD_NULLPTR;
  auto a = castArg(args);
  if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
Y
Yu Yang 已提交
50
  a->args[ID].value = m->mat;
Y
Yu Yang 已提交
51
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
52 53
}

Y
Yu Yang 已提交
54
paddle_error PDArgsGetValue(PD_Arguments args, uint64_t ID, paddle_matrix mat) {
Y
Yu Yang 已提交
55
  if (args == nullptr || mat == nullptr) return kPD_NULLPTR;
Y
Yu Yang 已提交
56
  auto m = paddle::capi::cast<paddle::capi::CMatrix>(mat);
Y
Yu Yang 已提交
57 58
  auto a = castArg(args);
  if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
Y
Yu Yang 已提交
59
  m->mat = a->args[ID].value;
Y
Yu Yang 已提交
60 61 62
  return kPD_NO_ERROR;
}

Y
Yu Yang 已提交
63
paddle_error PDArgsGetIds(PD_Arguments args, uint64_t ID, paddle_ivector ids) {
Y
Yu Yang 已提交
64 65 66 67 68 69
  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 已提交
70
}
Y
Yu Yang 已提交
71

Y
Yu Yang 已提交
72
paddle_error PDArgsSetIds(PD_Arguments args, uint64_t ID, paddle_ivector ids) {
Y
Yu Yang 已提交
73
  //! TODO(lizhao): Complete this method.
L
livc 已提交
74 75 76 77 78 79 80
  if (args == nullptr || ids == nullptr) return kPD_NULLPTR;
  auto iv = paddle::capi::cast<paddle::capi::CIVector>(ids);
  if (iv->vec == nullptr) return kPD_NULLPTR;
  auto a = castArg(args);
  if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
  a->args[ID].ids = iv->vec;
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
81 82
}

Y
Yu Yang 已提交
83 84 85
paddle_error PDArgsSetSequenceStartPos(PD_Arguments args,
                                       uint64_t ID,
                                       paddle_ivector seqPos) {
L
livc 已提交
86 87 88 89 90 91 92 93
  if (args == nullptr || seqPos == nullptr) return kPD_NULLPTR;
  auto iv = paddle::capi::cast<paddle::capi::CIVector>(seqPos);
  if (iv->vec == nullptr) return kPD_NULLPTR;
  auto a = castArg(args);
  if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
  a->args[ID].sequenceStartPositions =
      std::make_shared<paddle::ICpuGpuVector>(iv->vec);
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
94 95
}

Y
Yu Yang 已提交
96 97 98
paddle_error PDArgsSetSubSequenceStartPos(PD_Arguments args,
                                          uint64_t ID,
                                          paddle_ivector subSeqPos) {
L
livc 已提交
99 100 101 102 103
  if (args == nullptr || subSeqPos == nullptr) return kPD_NULLPTR;
  auto iv = paddle::capi::cast<paddle::capi::CIVector>(subSeqPos);
  if (iv->vec == nullptr) return kPD_NULLPTR;
  auto a = castArg(args);
  if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
Y
Yu Yang 已提交
104
  a->args[ID].subSequenceStartPositions =
L
livc 已提交
105 106
      std::make_shared<paddle::ICpuGpuVector>(iv->vec);
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
107 108
}

Y
Yu Yang 已提交
109 110 111
paddle_error PDArgsGetSequenceStartPos(PD_Arguments args,
                                       uint64_t ID,
                                       paddle_ivector seqPos) {
L
livc 已提交
112 113 114 115
  if (args == nullptr || seqPos == nullptr) return kPD_NULLPTR;
  auto iv = castIVec(seqPos);
  auto a = castArg(args);
  if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
Y
Yu Yang 已提交
116 117
  paddle::Argument& arg = a->args[ID];
  iv->vec = arg.sequenceStartPositions->getMutableVector(false);
L
livc 已提交
118
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
119 120
}

Y
Yu Yang 已提交
121 122 123
paddle_error PDArgsGetSubSequenceStartPos(PD_Arguments args,
                                          uint64_t ID,
                                          paddle_ivector subSeqPos) {
L
livc 已提交
124 125 126 127
  if (args == nullptr || subSeqPos == nullptr) return kPD_NULLPTR;
  auto iv = castIVec(subSeqPos);
  auto a = castArg(args);
  if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
Y
Yu Yang 已提交
128 129
  paddle::Argument& arg = a->args[ID];
  iv->vec = arg.subSequenceStartPositions->getMutableVector(false);
L
livc 已提交
130
  return kPD_NO_ERROR;
Y
Yu Yang 已提交
131
}
Y
Yu Yang 已提交
132
}