/* * Encode the NativeReal using the standard REAL type DER encoder. */ asn_enc_rval_t NativeReal_encode_der(asn_TYPE_descriptor_t *td, void *ptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { double Dbl = *(const double *)ptr; asn_enc_rval_t erval; REAL_t tmp; /* Prepare a temporary clean structure */ memset(&tmp, 0, sizeof(tmp)); if(asn_double2REAL(&tmp, Dbl)) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } /* Encode a fake REAL */ erval = der_encode_primitive(td, &tmp, tag_mode, tag, cb, app_key); if(erval.encoded == -1) { assert(erval.structure_ptr == &tmp); erval.structure_ptr = ptr; } /* Free possibly allocated members of the temporary structure */ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); return erval; }
/* * Encode the NativeReal using the OCTET STRING PER encoder. */ asn_enc_rval_t NativeReal_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { double Dbl = *(const double *)sptr; asn_enc_rval_t erval; REAL_t tmp; (void)constraints; /* Prepare a temporary clean structure */ memset(&tmp, 0, sizeof(tmp)); if(asn_double2REAL(&tmp, Dbl)) _ASN_ENCODE_FAILED; /* Encode a DER REAL */ erval = OCTET_STRING_encode_uper(td, NULL, &tmp, po); if(erval.encoded == -1) erval.structure_ptr = sptr; /* Free possibly allocated members of the temporary structure */ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); return erval; }
void load_statement(sqlite3_stmt *stmt, Row_t *row, Table_t *table) { guint32 i, max; if (table->header.list.count <= 0) /* Lazy header loading */ load_table_header(stmt, table); if (!row->fields) /* Lazy memory allocation */ row->fields = calloc(1, sizeof(struct RowFieldSequence)); for (i=0,max=sqlite3_data_count(stmt); i<max ;i++) { struct RowField *rf = calloc(1, sizeof(*rf)); asn_uint32_to_INTEGER(&(rf->pos), i); rf->value.present = RowFieldValue_PR_n; switch (sqlite3_column_type(stmt, i)) { case SQLITE_NULL: rf->value.present = RowFieldValue_PR_n; break; case SQLITE_INTEGER: do { gint64 i64 = sqlite3_column_int64(stmt, i); asn_int64_to_INTEGER(&(rf->value.choice.i), i64); rf->value.present = RowFieldValue_PR_i; } while (0); break; case SQLITE_FLOAT: do { gdouble d = sqlite3_column_double(stmt, i); asn_double2REAL(&(rf->value.choice.f), d); rf->value.present = RowFieldValue_PR_f; } while (0); break; case SQLITE_TEXT: do { const guint8 *t = sqlite3_column_text(stmt, i); gsize tsize = sqlite3_column_bytes(stmt, i); OCTET_STRING_fromBuf(&(rf->value.choice.s), (char*)t, tsize); rf->value.present = RowFieldValue_PR_s; } while (0); break; case SQLITE_BLOB: do { const void *b = sqlite3_column_blob(stmt, i); gsize bsize = sqlite3_column_bytes(stmt, i); OCTET_STRING_fromBuf(&(rf->value.choice.b), (char*)b, bsize); rf->value.present = RowFieldValue_PR_b; } while (0); break; default: rf->value.present = RowFieldValue_PR_n; break; } asn_sequence_add(&(row->fields->list), rf); } }