| 131 | } |
| 132 | |
| 133 | char * svec_out_internal(SvecType *svec) |
| 134 | { |
| 135 | char *ix_string,*vals_string,*result; |
| 136 | int ixlen,vslen; |
| 137 | SparseData sdata=sdata_from_svec(svec); |
| 138 | int64 *array_ix =sdata_index_to_int64arr(sdata); |
| 139 | ArrayType *pgarray_ix,*pgarray_vals; |
| 140 | |
| 141 | pgarray_ix = construct_array((Datum *)array_ix, |
| 142 | sdata->unique_value_count,INT8OID, |
| 143 | sizeof(int64),true,'d'); |
| 144 | |
| 145 | ix_string = DatumGetPointer(OidFunctionCall1(F_ARRAY_OUT, |
| 146 | PointerGetDatum(pgarray_ix))); |
| 147 | ixlen = strlen(ix_string); |
| 148 | |
| 149 | pgarray_vals = construct_array((Datum *)sdata->vals->data, |
| 150 | sdata->unique_value_count,FLOAT8OID, |
| 151 | sizeof(float8),true,'d'); |
| 152 | |
| 153 | vals_string = DatumGetPointer(OidFunctionCall1(F_ARRAY_OUT, |
| 154 | PointerGetDatum(pgarray_vals))); |
| 155 | vslen = strlen(vals_string); |
| 156 | |
| 157 | result = (char *)palloc(sizeof(char)*(vslen+ixlen+1+1)); |
| 158 | |
| 159 | /* NULLs are represented as NaN internally; see svec_in(); |
| 160 | * Here we print each NaN as an NVP. */ |
| 161 | for (int i=0; i!=vslen; i++) |
| 162 | if (vals_string[i] == 'N') |
| 163 | { |
| 164 | vals_string[i+1] = 'V'; |
| 165 | vals_string[i+2] = 'P'; |
| 166 | i = i+2; |
| 167 | } |
| 168 | |
| 169 | sprintf(result,"%s:%s",ix_string,vals_string); |
| 170 | pfree(ix_string); |
| 171 | pfree(vals_string); |
| 172 | pfree(array_ix); |
| 173 | |
| 174 | return(result); |
| 175 | } |
| 176 | |
| 177 | SvecType * svec_in_internal(char * str); |
| 178 |
no test coverage detected