Skip to content

Commit 3519c63

Browse files
livcreyoung
authored andcommitted
complete some functions of c-api.
1 parent 97c6425 commit 3519c63

File tree

4 files changed

+102
-10
lines changed

4 files changed

+102
-10
lines changed

paddle/capi/Arguments.cpp

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,34 +75,66 @@ int PDArgsGetIds(PD_Arguments args, uint64_t ID, PD_IVector ids) {
7575

7676
int PDArgsSetIds(PD_Arguments args, uint64_t ID, PD_IVector ids) {
7777
//! TODO(lizhao): Complete this method.
78-
return kPD_UNDEFINED_ERROR;
78+
if (args == nullptr || ids == nullptr) return kPD_NULLPTR;
79+
auto iv = paddle::capi::cast<paddle::capi::CIVector>(ids);
80+
if (iv->vec == nullptr) return kPD_NULLPTR;
81+
auto a = castArg(args);
82+
if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
83+
a->args[ID].ids = iv->vec;
84+
return kPD_NO_ERROR;
7985
}
8086

8187
int PDArgsSetSequenceStartPos(PD_Arguments args,
8288
uint64_t ID,
8389
PD_IVector seqPos) {
8490
//! TODO(lizhao): Complete this method.
85-
return kPD_UNDEFINED_ERROR;
91+
if (args == nullptr || seqPos == nullptr) return kPD_NULLPTR;
92+
auto iv = paddle::capi::cast<paddle::capi::CIVector>(seqPos);
93+
if (iv->vec == nullptr) return kPD_NULLPTR;
94+
auto a = castArg(args);
95+
if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
96+
a->args[ID].sequenceStartPositions =
97+
std::make_shared<paddle::ICpuGpuVector>(iv->vec);
98+
return kPD_NO_ERROR;
8699
}
87100

88101
int PDArgsSetSubSequenceStartPos(PD_Arguments args,
89102
uint64_t ID,
90103
PD_IVector subSeqPos) {
91104
//! TODO(lizhao): Complete this method.
92-
return kPD_UNDEFINED_ERROR;
105+
if (args == nullptr || subSeqPos == nullptr) return kPD_NULLPTR;
106+
auto iv = paddle::capi::cast<paddle::capi::CIVector>(subSeqPos);
107+
if (iv->vec == nullptr) return kPD_NULLPTR;
108+
auto a = castArg(args);
109+
if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
110+
a->args[ID].sequenceStartPositions =
111+
std::make_shared<paddle::ICpuGpuVector>(iv->vec);
112+
return kPD_NO_ERROR;
93113
}
94114

95115
int PDArgsGetSequenceStartPos(PD_Arguments args,
96116
uint64_t ID,
97117
PD_IVector seqPos) {
98118
//! TODO(lizhao): Complete this method.
99-
return kPD_UNDEFINED_ERROR;
119+
if (args == nullptr || seqPos == nullptr) return kPD_NULLPTR;
120+
auto iv = castIVec(seqPos);
121+
auto a = castArg(args);
122+
if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
123+
std::make_shared<paddle::ICpuGpuVector>(iv->vec) =
124+
a->args[ID].sequenceStartPositions;
125+
return kPD_NO_ERROR;
100126
}
101127

102128
int PDArgsGetSubSequenceStartPos(PD_Arguments args,
103129
uint64_t ID,
104130
PD_IVector subSeqPos) {
105131
//! TODO(lizhao): Complete this method.
106-
return kPD_UNDEFINED_ERROR;
132+
if (args == nullptr || subSeqPos == nullptr) return kPD_NULLPTR;
133+
auto iv = castIVec(subSeqPos);
134+
auto a = castArg(args);
135+
if (ID >= a->args.size()) return kPD_OUT_OF_RANGE;
136+
std::make_shared<paddle::ICpuGpuVector>(iv->vec) =
137+
a->args[ID].sequenceStartPositions;
138+
return kPD_NO_ERROR;
107139
}
108140
}

paddle/capi/Vector.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,16 @@ int PDIVecCreateNone(PD_IVector* ivec) {
2828

2929
int PDIVectorCreate(PD_IVector* ivec, int* array, uint64_t size, bool copy) {
3030
//! TODO(lizhao): Complete this method.
31-
return kPD_UNDEFINED_ERROR;
31+
if (ivec == nullptr) return kPD_NULLPTR;
32+
auto ptr = new paddle::capi::CIVector();
33+
if (copy) {
34+
ptr->vec = paddle::IVector::create(size, false);
35+
ptr->vec->copyFrom(array, size);
36+
} else {
37+
ptr->vec = paddle::IVector::create(array, size, false);
38+
}
39+
*ivec = ptr;
40+
return kPD_NO_ERROR;
3241
}
3342

3443
int PDIVecDestroy(PD_IVector ivec) {
@@ -47,11 +56,19 @@ int PDIVectorGet(PD_IVector ivec, int** buffer) {
4756

4857
int PDIVectorResize(PD_IVector ivec, uint64_t size) {
4958
//! TODO(lizhao): Complete this method.
50-
return kPD_UNDEFINED_ERROR;
59+
if (ivec == nullptr) return kPD_NULLPTR;
60+
auto v = cast<paddle::capi::CIVector>(ivec);
61+
if (v->vec == nullptr) return kPD_NULLPTR;
62+
v->vec->resize(size);
63+
return kPD_NO_ERROR;
5164
}
5265

5366
int PDIVectorGetSize(PD_IVector ivec, uint64_t* size) {
5467
//! TODO(lizhao): Complete this method.
55-
return kPD_UNDEFINED_ERROR;
68+
if (ivec == nullptr) return kPD_NULLPTR;
69+
auto v = cast<paddle::capi::CIVector>(ivec);
70+
if (v->vec == nullptr) return kPD_NULLPTR;
71+
*size = v->vec->getSize();
72+
return kPD_NO_ERROR;
5673
}
5774
}

paddle/capi/tests/test_Arguments.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,39 @@ TEST(CAPIArguments, value) {
7070
ASSERT_EQ(kPD_NO_ERROR, PDMatDestroy(mat));
7171
ASSERT_EQ(kPD_NO_ERROR, PDArgsDestroy(args));
7272
}
73+
74+
TEST(CAPIArguments, ids) {
75+
PD_Arguments args;
76+
ASSERT_EQ(kPD_NO_ERROR, PDArgsCreateNone(&args));
77+
ASSERT_EQ(kPD_NO_ERROR, PDArgsResize(args, 1));
78+
79+
PD_IVector ivec;
80+
int array[3] = {1, 2, 3};
81+
ASSERT_EQ(kPD_NO_ERROR, PDIVectorCreate(&ivec, array, 3, true));
82+
ASSERT_EQ(kPD_NO_ERROR, PDArgsSetIds(args, 0, ivec));
83+
84+
PD_IVector val;
85+
ASSERT_EQ(kPD_NO_ERROR, PDIVecCreateNone(&val));
86+
ASSERT_EQ(kPD_NO_ERROR, PDArgsGetIds(args, 0, val));
87+
ASSERT_EQ(kPD_NO_ERROR, PDIVecDestroy(ivec));
88+
ASSERT_EQ(kPD_NO_ERROR, PDIVecDestroy(val));
89+
ASSERT_EQ(kPD_NO_ERROR, PDArgsDestroy(args));
90+
}
91+
92+
TEST(CAPIArguments, Sequence) {
93+
PD_Arguments args;
94+
ASSERT_EQ(kPD_NO_ERROR, PDArgsCreateNone(&args));
95+
ASSERT_EQ(kPD_NO_ERROR, PDArgsResize(args, 1));
96+
97+
PD_IVector ivec;
98+
int array[3] = {1, 2, 3};
99+
ASSERT_EQ(kPD_NO_ERROR, PDIVectorCreate(&ivec, array, 3, true));
100+
ASSERT_EQ(kPD_NO_ERROR, PDArgsSetSequenceStartPos(args, 0, ivec));
101+
102+
PD_IVector val;
103+
ASSERT_EQ(kPD_NO_ERROR, PDIVecCreateNone(&val));
104+
ASSERT_EQ(kPD_NO_ERROR, PDArgsGetSequenceStartPos(args, 0, val));
105+
ASSERT_EQ(kPD_NO_ERROR, PDIVecDestroy(ivec));
106+
ASSERT_EQ(kPD_NO_ERROR, PDIVecDestroy(val));
107+
ASSERT_EQ(kPD_NO_ERROR, PDArgsDestroy(args));
108+
}

paddle/capi/tests/test_Vector.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,17 @@ limitations under the License. */
1717

1818
TEST(CAPIVector, create) {
1919
PD_IVector vec;
20-
ASSERT_EQ(kPD_NO_ERROR, PDIVecCreateNone(&vec));
20+
int array[3] = {1, 2, 3};
21+
ASSERT_EQ(kPD_NO_ERROR, PDIVectorCreate(&vec, array, 3, true));
22+
ASSERT_EQ(kPD_NO_ERROR, PDIVectorCreate(&vec, array, 3, false));
2123
ASSERT_EQ(kPD_NO_ERROR, PDIVectorResize(vec, 1000));
2224
uint64_t size;
2325
ASSERT_EQ(kPD_NO_ERROR, PDIVectorGetSize(vec, &size));
24-
ASSERT_EQ(1000, size);
26+
ASSERT_EQ(kPD_NO_ERROR, PDIVecDestroy(vec));
27+
}
28+
29+
TEST(CAPIVector, createNone) {
30+
PD_IVector vec;
31+
ASSERT_EQ(kPD_NO_ERROR, PDIVecCreateNone(&vec));
2532
ASSERT_EQ(kPD_NO_ERROR, PDIVecDestroy(vec));
2633
}

0 commit comments

Comments
 (0)