github.com/matrixorigin/matrixone@v0.7.0/cgo/mo.h (about) 1 /* 2 * Copyright 2021 Matrix Origin 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef _MO_H_ 18 #define _MO_H_ 19 20 #include <stdint.h> 21 #include <stdbool.h> 22 23 /* Bitmap ops */ 24 void Bitmap_Add(uint64_t *p, uint64_t pos); 25 void Bitmap_Remove(uint64_t *p, uint64_t pos); 26 bool Bitmap_Contains(uint64_t *p, uint64_t pos); 27 bool Bitmap_IsEmpty(uint64_t *p, uint64_t nbits); 28 uint64_t Bitmap_Count(uint64_t *p, uint64_t nbits); 29 void Bitmap_And(uint64_t *dst, uint64_t *a, uint64_t *b, uint64_t nbits); 30 void Bitmap_Or(uint64_t *dst, uint64_t *a, uint64_t *b, uint64_t nbits); 31 void Bitmap_Not(uint64_t *dst, uint64_t *a, uint64_t nbits); 32 33 /* Decimal. Both decimal64 and decimal128 are passed in/out as int64_t* */ 34 int32_t Decimal64_Compare(int32_t *r, int64_t *a, int64_t *b); 35 int32_t Decimal128_Compare(int32_t *r, int64_t *a, int64_t *b); 36 37 int32_t Decimal64_FromInt32(int64_t *r, int32_t v); 38 int32_t Decimal128_FromInt32(int64_t *r, int32_t v); 39 40 int32_t Decimal64_FromUint32(int64_t *r, uint32_t v); 41 int32_t Decimal128_FromUint32(int64_t *r, uint32_t v); 42 43 int32_t Decimal64_FromInt64(int64_t *r, int64_t v, int32_t range); 44 int32_t Decimal128_FromInt64(int64_t *r, int64_t v, int32_t range); 45 46 int32_t Decimal64_FromUint64(int64_t *r, uint64_t v, int32_t range); 47 int32_t Decimal128_FromUint64(int64_t *r, uint64_t v, int32_t range); 48 49 int32_t Decimal64_FromFloat64(int64_t *r, double v, int32_t width, int32_t scale); 50 int32_t Decimal128_FromFloat64(int64_t *r, double v, int32_t width, int32_t scale); 51 52 int32_t Decimal64_FromString(int64_t *r, char* s); 53 int32_t Decimal128_FromString(int64_t *r, char* s); 54 55 int32_t Decimal64_FromStringWithScale(int64_t *r, char* s, int32_t width, int32_t scale); 56 int32_t Decimal128_FromStringWithScale(int64_t *r, char* s, int32_t width, int32_t scale); 57 58 int32_t Decimal64_ToFloat64(double *r, int64_t *d); 59 int32_t Decimal128_ToFloat64(double *r, int64_t *d); 60 61 int32_t Decimal64_ToInt64(int64_t *r, int64_t *d); 62 int32_t Decimal128_ToInt64(int64_t *r, int64_t *d); 63 64 int32_t Decimal64_ToString(char *s, int64_t *d); 65 int32_t Decimal128_ToString(char *s, int64_t *d); 66 67 int32_t Decimal64_ToStringWithScale(char *s, int64_t *d, int32_t scale); 68 int32_t Decimal128_ToStringWithScale(char *s, int64_t *d, int32_t scale); 69 70 int32_t Decimal64_ToDecimal128(int64_t *d128, int64_t *d64); 71 int32_t Decimal128_ToDecimal64(int64_t *d64, int64_t *d128); 72 int32_t Decimal64_ToDecimal128WithScale(int64_t *d128, int64_t *d64, int32_t width, int32_t scale); 73 int32_t Decimal128_ToDecimal64WithScale(int64_t *d64, int64_t *d128, int32_t width, int32_t scale); 74 75 76 int32_t Decimal64_Add(int64_t *r, int64_t *a, int64_t *b); 77 int32_t Decimal64_AddInt64(int64_t *r, int64_t *a, int64_t b); 78 int32_t Decimal64_Sub(int64_t *r, int64_t *a, int64_t *b); 79 int32_t Decimal64_SubInt64(int64_t *r, int64_t *a, int64_t b); 80 int32_t Decimal64_Mul(int64_t *r, int64_t *a, int64_t *b); 81 int32_t Decimal64_MulWiden(int64_t *r, int64_t *a, int64_t *b); 82 int32_t Decimal64_MulInt64(int64_t *r, int64_t *a, int64_t b); 83 int32_t Decimal64_Div(int64_t *r, int64_t *a, int64_t *b); 84 int32_t Decimal64_DivWiden(int64_t *r, int64_t *a, int64_t *b); 85 int32_t Decimal64_DivInt64(int64_t *r, int64_t *a, int64_t b); 86 87 int32_t Decimal128_Add(int64_t *r, int64_t *a, int64_t *b); 88 int32_t Decimal128_AddInt64(int64_t *r, int64_t *a, int64_t b); 89 int32_t Decimal128_AddDecimal64(int64_t *r, int64_t *a, int64_t* b); 90 int32_t Decimal128_Sub(int64_t *r, int64_t *a, int64_t *b); 91 int32_t Decimal128_SubInt64(int64_t *r, int64_t *a, int64_t b); 92 int32_t Decimal128_Mul(int64_t *r, int64_t *a, int64_t *b); 93 int32_t Decimal128_MulInt64(int64_t *r, int64_t *a, int64_t b); 94 int32_t Decimal128_Div(int64_t *r, int64_t *a, int64_t *b); 95 int32_t Decimal128_DivInt64(int64_t *r, int64_t *a, int64_t b); 96 97 int32_t Decimal64_VecAdd(int64_t *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 98 int32_t Decimal128_VecAdd(int64_t *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 99 100 int32_t Decimal64_VecSub(int64_t *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 101 int32_t Decimal128_VecSub(int64_t *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 102 103 int32_t Decimal64_VecMul(int64_t *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 104 int32_t Decimal128_VecMul(int64_t *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 105 106 int32_t Decimal64_VecDiv(int64_t *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 107 int32_t Decimal128_VecDiv(int64_t *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 108 109 /* vector arithmatics */ 110 int32_t SignedInt_VecAdd(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 111 int32_t UnsignedInt_VecAdd(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 112 int32_t Float_VecAdd(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 113 114 int32_t SignedInt_VecSub(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 115 int32_t UnsignedInt_VecSub(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 116 int32_t Float_VecSub(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 117 118 int32_t SignedInt_VecMul(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 119 int32_t UnsignedInt_VecMul(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 120 int32_t Float_VecMul(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 121 122 int32_t Float_VecDiv(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 123 int32_t Float_VecIntegerDiv(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 124 125 int32_t SignedInt_VecMod(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 126 int32_t UnsignedInt_VecMod(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 127 int32_t Float_VecMod(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t szof); 128 129 130 /* compare operator */ 131 int32_t Numeric_VecEq(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t type); 132 int32_t Decimal64_VecEQ(bool *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 133 int32_t Decimal128_VecEQ(bool *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 134 135 int32_t Numeric_VecNe(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t type); 136 int32_t Decimal64_VecNE(bool *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 137 int32_t Decimal128_VecNE(bool *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 138 139 int32_t Numeric_VecGt(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t type); 140 int32_t Decimal64_VecGT(bool *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 141 int32_t Decimal128_VecGT(bool *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 142 143 int32_t Numeric_VecGe(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t type); 144 int32_t Decimal64_VecGE(bool *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 145 int32_t Decimal128_VecGE(bool *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 146 147 int32_t Numeric_VecLt(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t type); 148 int32_t Decimal64_VecLT(bool *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 149 int32_t Decimal128_VecLT(bool *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 150 151 int32_t Numeric_VecLe(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag, int32_t type); 152 int32_t Decimal64_VecLE(bool *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 153 int32_t Decimal128_VecLE(bool *r, int64_t *a, int64_t *b, uint64_t n, uint64_t *nulls, int32_t flag); 154 155 156 /* vector logical operation */ 157 int32_t Logic_VecAnd(void *r, void *a, void *b, uint64_t n, uint64_t *anulls, uint64_t *bnulls, uint64_t *rnulls, int32_t flag); 158 int32_t Logic_VecOr(void *r, void *a, void *b, uint64_t n, uint64_t *anulls, uint64_t *bnulls, uint64_t *rnulls, int32_t flag); 159 int32_t Logic_VecXor(void *r, void *a, void *b, uint64_t n, uint64_t *nulls, int32_t flag); 160 int32_t Logic_VecNot(void *r, void *a, uint64_t n, uint64_t *nulls, int32_t flag); 161 162 /* aggregation operation */ 163 int32_t Decimal64_VecSum(int64_t *rs, int64_t *vs, int64_t start, int64_t count, uint64_t *vps ,int64_t *zs, uint64_t *nulls); 164 int32_t Decimal64_VecSumToDecimal128(int64_t *rs, int64_t *vs, int64_t start, int64_t count, uint64_t *vps ,int64_t *zs, uint64_t *nulls); 165 int32_t Decimal128_VecSum(int64_t *rs, int64_t *vs, int64_t start, int64_t count, uint64_t *vps ,int64_t *zs, uint64_t *nulls); 166 167 #endif /* _MO_H_ */