MCPcopy Create free account
hub / github.com/apache/madlib / makeInplaceSparseData

Function makeInplaceSparseData

methods/svec/src/pg_gp/SparseData.c:1187–1224  ·  view source on GitHub ↗

* @param vals An array of data values * @param index An array of run-lengths * @param datasize The length of the vals array * @param indexsize The length of the index array * @param datatype The object ID of the elements represented in the vals array * @param unique_value_count The number of RLE blocks in the vals array * @param total_value_count The total number of individual elements repre

Source from the content-addressed store, hash-verified

1185 * @return A SparseData created in place using pointers to the vals and index data
1186 */
1187SparseData makeInplaceSparseData(char *vals, char *index,
1188 int datasize, int indexsize, Oid datatype,
1189 int unique_value_count, int total_value_count) {
1190 SparseData sdata = makeEmptySparseData();
1191 sdata->unique_value_count = unique_value_count;
1192 sdata->total_value_count = total_value_count;
1193
1194 /*
1195 * To be safe, we obey the constraint demanded in lib/stringinfo.h that
1196 * the data field of StringInfoData is always terminated with a null.
1197 */
1198 if (vals != NULL && vals[datasize] != '\0') {
1199 char * vals_temp = (char *)palloc(datasize+1);
1200 memcpy(vals_temp, vals, datasize);
1201 vals_temp[datasize] = '\0';
1202 vals = vals_temp;
1203 }
1204
1205 if (index != NULL && index[indexsize] != '\0') {
1206 char * index_temp = (char *)palloc(indexsize+1);
1207 memcpy(index_temp, index, indexsize);
1208 index_temp[indexsize] = '\0';
1209 index = index_temp;
1210 }
1211
1212 sdata->vals->data = vals;
1213 sdata->vals->len = datasize;
1214 sdata->vals->maxlen = datasize+1;
1215 sdata->index->data = index;
1216
1217 sdata->index->len = indexsize;
1218 sdata->index->maxlen = index == NULL ? 0 : indexsize+1;
1219 // here we are taking care of the special case of null index, which
1220 // represents uncompressed sparsedata; see SparseDataStruct defn
1221 sdata->type_of_data = datatype;
1222
1223 return sdata;
1224}
1225
1226/**
1227 * @return A copy of an existing SparseData.

Callers 3

svec_countFunction · 0.85
svec_in_internalFunction · 0.85

Calls 1

makeEmptySparseDataFunction · 0.85

Tested by

no test coverage detected