43 if (SDDS_target->layout.n_columns &&
44 ((!(SDDS_target->column_flag = (int32_t *)
SDDS_Malloc(
sizeof(int32_t) * SDDS_target->layout.n_columns)) ||
45 !(SDDS_target->column_order = (int32_t *)
SDDS_Malloc(
sizeof(int32_t) * SDDS_target->layout.n_columns))) ||
47 !
SDDS_SetMemory(SDDS_target->column_order, SDDS_target->layout.n_columns,
SDDS_LONG, (int32_t)0, (int32_t)1)))) {
48 SDDS_SetError(
"Unable to allocate column flags--memory allocation failure (SDDS_AllocateColumnFlags)");
77 if ((SDDS_dataset->writing_page) && (SDDS_dataset->layout.data_mode.fixed_row_count)) {
82 SDDS_SetError(
"Unable to start page--couldn't restore layout (SDDS_StartPage)");
85 if (expected_n_rows <= 0)
87 SDDS_dataset->n_rows_written = 0;
88 SDDS_dataset->last_row_written = -1;
89 SDDS_dataset->writing_page = 0;
90 SDDS_dataset->first_row_in_mem = 0;
91 layout = &SDDS_dataset->layout;
92 if (SDDS_dataset->page_started == 0) {
93 if (layout->n_parameters) {
94 if (!(SDDS_dataset->parameter = (
void **)calloc(
sizeof(*SDDS_dataset->parameter), layout->n_parameters))) {
95 SDDS_SetError(
"Unable to start page--memory allocation failure (SDDS_StartPage)");
98 for (i = 0; i < layout->n_parameters; i++) {
99 if (!(SDDS_dataset->parameter[i] = (
void *)calloc(
SDDS_type_size[layout->parameter_definition[i].type - 1], 1))) {
100 SDDS_SetError(
"Unable to start page--memory allocation failure (SDDS_StartPage)");
105 if (layout->n_arrays) {
106 if (!(SDDS_dataset->array = (
SDDS_ARRAY *)calloc(
sizeof(*SDDS_dataset->array), layout->n_arrays))) {
107 SDDS_SetError(
"Unable to start page--memory allocation failure (SDDS_StartPage)");
111 if (layout->n_columns) {
112 if (!(SDDS_dataset->data = (
void **)calloc(
sizeof(*SDDS_dataset->data), layout->n_columns))) {
113 SDDS_SetError(
"Unable to start page--memory allocation failure (SDDS_StartPage)");
116 SDDS_dataset->row_flag = NULL;
117 if (expected_n_rows) {
118 if (!(SDDS_dataset->row_flag = (int32_t *)
SDDS_Malloc(
sizeof(int32_t) * expected_n_rows))) {
119 SDDS_SetError(
"Unable to start page--memory allocation failure (SDDS_StartPage)");
122 for (i = 0; i < layout->n_columns; i++) {
123 if (!(SDDS_dataset->data[i] = (
void *)calloc(expected_n_rows,
SDDS_type_size[layout->column_definition[i].type - 1]))) {
124 SDDS_SetError(
"Unable to start page--memory allocation failure (SDDS_StartPage)");
129 SDDS_dataset->n_rows_allocated = expected_n_rows;
130 if (!(SDDS_dataset->column_flag = (int32_t *)
SDDS_Realloc(SDDS_dataset->column_flag,
sizeof(int32_t) * layout->n_columns)) ||
131 !(SDDS_dataset->column_order = (int32_t *)
SDDS_Realloc(SDDS_dataset->column_order,
sizeof(int32_t) * layout->n_columns))) {
132 SDDS_SetError(
"Unable to start page--memory allocation failure (SDDS_StartPage)");
136 }
else if (SDDS_dataset->n_rows_allocated >= expected_n_rows && layout->n_columns) {
137 for (i = 0; i < layout->n_columns; i++) {
138 if (SDDS_dataset->data[i] && layout->column_definition[i].type ==
SDDS_STRING)
141 }
else if (SDDS_dataset->n_rows_allocated < expected_n_rows && layout->n_columns) {
142 if (!SDDS_dataset->data) {
143 if (!(SDDS_dataset->column_flag = (int32_t *)
SDDS_Realloc(SDDS_dataset->column_flag,
sizeof(int32_t) * layout->n_columns)) ||
144 !(SDDS_dataset->column_order = (int32_t *)
SDDS_Realloc(SDDS_dataset->column_order,
sizeof(int32_t) * layout->n_columns)) ||
145 !(SDDS_dataset->data = (
void **)calloc(layout->n_columns,
sizeof(*SDDS_dataset->data)))) {
146 SDDS_SetError(
"Unable to start page--memory allocation failure (SDDS_StartPage)");
150 for (i = 0; i < layout->n_columns; i++) {
152 if (SDDS_dataset->data[i] && layout->column_definition[i].type ==
SDDS_STRING)
154 if (!(SDDS_dataset->data[i] = (
void *)
SDDS_Realloc(SDDS_dataset->data[i], expected_n_rows * size))) {
155 SDDS_SetError(
"Unable to start page--memory allocation failure (SDDS_StartPage)");
158 SDDS_ZeroMemory((
char *)SDDS_dataset->data[i] + size * SDDS_dataset->n_rows_allocated, size * (expected_n_rows - SDDS_dataset->n_rows_allocated));
160 if (!(SDDS_dataset->row_flag = (int32_t *)
SDDS_Realloc(SDDS_dataset->row_flag,
sizeof(int32_t) * expected_n_rows))) {
161 SDDS_SetError(
"Unable to start page--memory allocation failure (SDDS_StartPage)");
164 SDDS_dataset->n_rows_allocated = expected_n_rows;
166 if (SDDS_dataset->n_rows_allocated && layout->n_columns && !
SDDS_SetMemory(SDDS_dataset->row_flag, SDDS_dataset->n_rows_allocated,
SDDS_LONG, (int32_t)1, (int32_t)0)) {
167 SDDS_SetError(
"Unable to start page--memory initialization failure (SDDS_StartPage)");
170 if (layout->n_columns && (!
SDDS_SetMemory(SDDS_dataset->column_flag, layout->n_columns,
SDDS_LONG, (int32_t)1, (int32_t)0) ||
172 SDDS_SetError(
"Unable to start page--memory initialization failure (SDDS_StartPage)");
175 SDDS_dataset->n_of_interest = layout->n_columns;
176 SDDS_dataset->page_number++;
177 SDDS_dataset->page_started = 1;
178 SDDS_dataset->n_rows = 0;
201 layout = &SDDS_dataset->layout;
203 if (layout->n_columns && ((SDDS_dataset->column_flag && !
SDDS_SetMemory(SDDS_dataset->column_flag, layout->n_columns,
SDDS_LONG, (int32_t)1, (int32_t)0)) ||
204 ((SDDS_dataset->column_order && !
SDDS_SetMemory(SDDS_dataset->column_order, layout->n_columns,
SDDS_LONG, (int32_t)0, (int32_t)1))))) {
205 SDDS_SetError(
"Unable to start page--memory initialization failure (SDDS_ClearPage)");
209 if (SDDS_dataset->data) {
210 for (i = 0; i < layout->n_columns; i++) {
212 if (SDDS_dataset->data[i])
213 SDDS_ZeroMemory(SDDS_dataset->data[i], size * SDDS_dataset->n_rows_allocated);
216 if (SDDS_dataset->parameter) {
217 for (i = 0; i < layout->n_parameters; i++) {
222 for (i = 0; i < layout->n_arrays; i++) {
224 if (SDDS_dataset->array && SDDS_dataset->array[i].data && SDDS_dataset->array[i].elements)
225 SDDS_ZeroMemory(SDDS_dataset->array[i].data, size * SDDS_dataset->array[i].elements);
250 layout = &SDDS_dataset->layout;
251 if (!SDDS_dataset->data && !(SDDS_dataset->data = (
void **)calloc(layout->n_columns,
sizeof(*SDDS_dataset->data)))) {
252 SDDS_SetError(
"Unable to start page--memory allocation failure (SDDS_ShortenTable)");
257 for (i = 0; i < layout->n_columns; i++) {
259 if (SDDS_dataset->data[i])
260 free(SDDS_dataset->data[i]);
261 if (!(SDDS_dataset->data[i] = (
void *)calloc(rows, size))) {
262 SDDS_SetError(
"Unable to shorten page--memory allocation failure (SDDS_ShortenTable)");
266 if (SDDS_dataset->row_flag)
267 free(SDDS_dataset->row_flag);
268 if (!(SDDS_dataset->row_flag = (int32_t *)malloc(rows *
sizeof(int32_t)))) {
269 SDDS_SetError(
"Unable to shorten page--memory allocation failure (SDDS_ShortenTable)");
272 SDDS_dataset->n_rows_allocated = rows;
278 SDDS_dataset->n_rows = 0;
280 if (!
SDDS_SetMemory(SDDS_dataset->row_flag, SDDS_dataset->n_rows_allocated,
SDDS_LONG, (int32_t)1, (int32_t)0) ||
281 !
SDDS_SetMemory(SDDS_dataset->column_flag, SDDS_dataset->layout.n_columns,
SDDS_LONG, (int32_t)1, (int32_t)0) ||
282 !
SDDS_SetMemory(SDDS_dataset->column_order, SDDS_dataset->layout.n_columns,
SDDS_LONG, (int32_t)0, (int32_t)1)) {
283 SDDS_SetError(
"Unable to shorten page--memory initialization failure (SDDS_ShortenTable)");
308 layout = &SDDS_dataset->layout;
310 fprintf(stderr,
"table size being increased from %" PRId64
" to %" PRId64
" rows\n", SDDS_dataset->n_rows_allocated, SDDS_dataset->n_rows_allocated + n_additional_rows);
312 if (!SDDS_dataset->data && !(SDDS_dataset->data = (
void **)calloc(layout->n_columns,
sizeof(*SDDS_dataset->data)))) {
313 SDDS_SetError(
"Unable to start page--memory allocation failure1 (SDDS_LengthenTable)");
316 if (n_additional_rows < 0)
317 n_additional_rows = 0;
318 for (i = 0; i < layout->n_columns; i++) {
320 if (!(SDDS_dataset->data[i] = (
void *)
SDDS_Realloc(SDDS_dataset->data[i], (SDDS_dataset->n_rows_allocated + n_additional_rows) * size))) {
321 SDDS_SetError(
"Unable to lengthen page--memory allocation failure2 (SDDS_LengthenTable)");
324 SDDS_ZeroMemory((
char *)SDDS_dataset->data[i] + size * SDDS_dataset->n_rows_allocated, size * n_additional_rows);
326 if (!(SDDS_dataset->row_flag = (int32_t *)
SDDS_Realloc(SDDS_dataset->row_flag, (SDDS_dataset->n_rows_allocated + n_additional_rows) *
sizeof(int32_t)))) {
327 SDDS_SetError(
"Unable to lengthen page--memory allocation failure3 (SDDS_LengthenTable)");
330 SDDS_dataset->n_rows_allocated += n_additional_rows;
332 if (!
SDDS_SetMemory(SDDS_dataset->row_flag, SDDS_dataset->n_rows_allocated,
SDDS_LONG, (int32_t)1, (int32_t)0) ||
333 !
SDDS_SetMemory(SDDS_dataset->column_flag, SDDS_dataset->layout.n_columns,
SDDS_LONG, (int32_t)1, (int32_t)0) ||
334 !
SDDS_SetMemory(SDDS_dataset->column_order, SDDS_dataset->layout.n_columns,
SDDS_LONG, (int32_t)0, (int32_t)1)) {
335 SDDS_SetError(
"Unable to lengthen page--memory initialization failure4 (SDDS_LengthenTable)");
377 int32_t index, retval;
380 char s[SDDS_MAXLINE];
384 if (!(mode & SDDS_SET_BY_INDEX || mode & SDDS_SET_BY_NAME) || !(mode & SDDS_PASS_BY_VALUE || mode & SDDS_PASS_BY_REFERENCE)) {
385 SDDS_SetError(
"Unable to set parameter values--unknown mode (SDDS_SetParameters)");
389 va_start(argptr, mode);
390 layout = &SDDS_dataset->layout;
395 if (mode & SDDS_SET_BY_INDEX) {
396 if ((index = va_arg(argptr, int32_t)) == -1) {
400 if (index < 0 || index >= layout->n_parameters) {
401 SDDS_SetError(
"Unable to set parameter values--index out of range (SDDS_SetParameters)");
406 if ((name = va_arg(argptr,
char *)) == NULL) {
411 sprintf(s,
"Unable to set parameter values--name %s not recognized (SDDS_SetParameters)", name);
417 switch (layout->parameter_definition[index].type) {
419 if (mode & SDDS_PASS_BY_VALUE)
420 *((
short *)SDDS_dataset->parameter[index]) = (short)va_arg(argptr,
int);
422 *((
short *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
short *));
425 if (mode & SDDS_PASS_BY_VALUE)
426 *((
unsigned short *)SDDS_dataset->parameter[index]) = (
unsigned short)va_arg(argptr,
unsigned int);
428 *((
unsigned short *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
unsigned short *));
431 if (mode & SDDS_PASS_BY_VALUE)
432 *((int32_t *)SDDS_dataset->parameter[index]) = (int32_t)va_arg(argptr, int32_t);
434 *((int32_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr, int32_t *));
437 if (mode & SDDS_PASS_BY_VALUE)
438 *((uint32_t *)SDDS_dataset->parameter[index]) = (uint32_t)va_arg(argptr, uint32_t);
440 *((uint32_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr, uint32_t *));
443 if (mode & SDDS_PASS_BY_VALUE)
444 *((int64_t *)SDDS_dataset->parameter[index]) = (int64_t)va_arg(argptr, int64_t);
446 *((int64_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr, int64_t *));
449 if (mode & SDDS_PASS_BY_VALUE)
450 *((uint64_t *)SDDS_dataset->parameter[index]) = (uint64_t)va_arg(argptr, uint64_t);
452 *((uint64_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr, uint64_t *));
455 if (mode & SDDS_PASS_BY_VALUE)
456 *((
float *)SDDS_dataset->parameter[index]) = (float)va_arg(argptr,
double);
458 *((
float *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
float *));
461 if (mode & SDDS_PASS_BY_VALUE)
462 *((
double *)SDDS_dataset->parameter[index]) = va_arg(argptr,
double);
464 *((
double *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
double *));
467 if (mode & SDDS_PASS_BY_VALUE)
468 *((
long double *)SDDS_dataset->parameter[index]) = va_arg(argptr,
long double);
470 *((
long double *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
long double *));
473 if (*(
char **)SDDS_dataset->parameter[index])
474 free(*(
char **)SDDS_dataset->parameter[index]);
475 if (mode & SDDS_PASS_BY_VALUE) {
476 if (!
SDDS_CopyString((
char **)SDDS_dataset->parameter[index], va_arg(argptr,
char *))) {
477 SDDS_SetError(
"Unable to set string parameter value--allocation failure (SDDS_SetParameters)");
481 if (!
SDDS_CopyString((
char **)SDDS_dataset->parameter[index], *(va_arg(argptr,
char **)))) {
482 SDDS_SetError(
"Unable to set string parameter value--allocation failure (SDDS_SetParameters)");
488 if (mode & SDDS_PASS_BY_VALUE)
489 *((
char *)SDDS_dataset->parameter[index]) = (char)va_arg(argptr,
int);
491 *((
char *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
char *));
494 SDDS_SetError(
"Unknown data type encountered (SDDS_SetParameters)");
497 }
while (retval == -1);
544 char s[SDDS_MAXLINE];
548 if (!(mode & SDDS_SET_BY_INDEX || mode & SDDS_SET_BY_NAME) || !(mode & SDDS_PASS_BY_VALUE || mode & SDDS_PASS_BY_REFERENCE)) {
549 SDDS_SetError(
"Unable to set parameter values--unknown mode (SDDS_SetParameters)");
553 va_start(argptr, mode);
554 layout = &SDDS_dataset->layout;
557 if (mode & SDDS_SET_BY_INDEX) {
558 if ((index = va_arg(argptr, int32_t)) == -1) {
559 SDDS_SetError(
"Unable to set parameter values--index is null (SDDS_SetParameter)");
563 if (index < 0 || index >= layout->n_parameters) {
564 SDDS_SetError(
"Unable to set parameter values--index out of range (SDDS_SetParameter)");
569 if ((name = va_arg(argptr,
char *)) == NULL) {
570 SDDS_SetError(
"Unable to set parameter values--name is null (SDDS_SetParameter)");
575 sprintf(s,
"Unable to set parameter values--name %s not recognized (SDDS_SetParameter)", name);
581 switch (layout->parameter_definition[index].type) {
583 if (mode & SDDS_PASS_BY_VALUE)
584 *((
short *)SDDS_dataset->parameter[index]) = (short)va_arg(argptr,
int);
586 *((
short *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
short *));
589 if (mode & SDDS_PASS_BY_VALUE)
590 *((
unsigned short *)SDDS_dataset->parameter[index]) = (
unsigned short)va_arg(argptr,
unsigned int);
592 *((
unsigned short *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
unsigned short *));
595 if (mode & SDDS_PASS_BY_VALUE)
596 *((int32_t *)SDDS_dataset->parameter[index]) = (int32_t)va_arg(argptr, int32_t);
598 *((int32_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr, int32_t *));
601 if (mode & SDDS_PASS_BY_VALUE)
602 *((uint32_t *)SDDS_dataset->parameter[index]) = (uint32_t)va_arg(argptr, uint32_t);
604 *((uint32_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr, uint32_t *));
607 if (mode & SDDS_PASS_BY_VALUE)
608 *((int64_t *)SDDS_dataset->parameter[index]) = (int64_t)va_arg(argptr, int64_t);
610 *((int64_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr, int64_t *));
613 if (mode & SDDS_PASS_BY_VALUE)
614 *((uint64_t *)SDDS_dataset->parameter[index]) = (uint64_t)va_arg(argptr, uint64_t);
616 *((uint64_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr, uint64_t *));
619 if (mode & SDDS_PASS_BY_VALUE)
620 *((
float *)SDDS_dataset->parameter[index]) = (float)va_arg(argptr,
double);
622 *((
float *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
float *));
625 if (mode & SDDS_PASS_BY_VALUE)
626 *((
double *)SDDS_dataset->parameter[index]) = va_arg(argptr,
double);
628 *((
double *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
double *));
631 if (mode & SDDS_PASS_BY_VALUE)
632 *((
long double *)SDDS_dataset->parameter[index]) = va_arg(argptr,
long double);
634 *((
long double *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
long double *));
637 if (*(
char **)SDDS_dataset->parameter[index])
638 free(*(
char **)SDDS_dataset->parameter[index]);
639 if (mode & SDDS_PASS_BY_VALUE) {
640 if (!
SDDS_CopyString((
char **)SDDS_dataset->parameter[index], va_arg(argptr,
char *))) {
641 SDDS_SetError(
"Unable to set string parameter value--allocation failure (SDDS_SetParameters)");
646 if (!
SDDS_CopyString((
char **)SDDS_dataset->parameter[index], *(va_arg(argptr,
char **)))) {
647 SDDS_SetError(
"Unable to set string parameter value--allocation failure (SDDS_SetParameters)");
654 if (mode & SDDS_PASS_BY_VALUE)
655 *((
char *)SDDS_dataset->parameter[index]) = (char)va_arg(argptr,
int);
657 *((
char *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
char *));
660 SDDS_SetError(
"Unknown data type encountered (SDDS_SetParameters)");
705 int32_t index, retval;
708 char s[SDDS_MAXLINE];
712 if (!(mode & SDDS_SET_BY_INDEX || mode & SDDS_SET_BY_NAME) || !(mode & SDDS_PASS_BY_VALUE || mode & SDDS_PASS_BY_REFERENCE)) {
713 SDDS_SetError(
"Unable to set parameter values--unknown mode (SDDS_SetParametersFromDoubles)");
717 va_start(argptr, mode);
718 layout = &SDDS_dataset->layout;
723 if (mode & SDDS_SET_BY_INDEX) {
724 if ((index = va_arg(argptr, int32_t)) == -1) {
728 if (index < 0 || index >= layout->n_parameters) {
729 sprintf(s,
"Unable to set parameter values--index %" PRId32
" out of range [%d, %" PRId32
"] (SDDS_SetParametersFromDoubles)", index, 0, layout->n_parameters);
735 if ((name = va_arg(argptr,
char *)) == NULL) {
740 sprintf(s,
"Unable to set parameter values--name %s not recognized (SDDS_SetParametersFromDoubles)", name);
746 switch (layout->parameter_definition[index].type) {
748 if (mode & SDDS_PASS_BY_VALUE)
749 *((
short *)SDDS_dataset->parameter[index]) = va_arg(argptr,
double);
751 *((
short *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
double *));
754 if (mode & SDDS_PASS_BY_VALUE)
755 *((
unsigned short *)SDDS_dataset->parameter[index]) = va_arg(argptr,
double);
757 *((
unsigned short *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
double *));
760 if (mode & SDDS_PASS_BY_VALUE)
761 *((int32_t *)SDDS_dataset->parameter[index]) = va_arg(argptr,
double);
763 *((int32_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
double *));
766 if (mode & SDDS_PASS_BY_VALUE)
767 *((uint32_t *)SDDS_dataset->parameter[index]) = va_arg(argptr,
double);
769 *((uint32_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
double *));
772 if (mode & SDDS_PASS_BY_VALUE)
773 *((int64_t *)SDDS_dataset->parameter[index]) = va_arg(argptr,
double);
775 *((int64_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
double *));
778 if (mode & SDDS_PASS_BY_VALUE)
779 *((uint64_t *)SDDS_dataset->parameter[index]) = va_arg(argptr,
double);
781 *((uint64_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
double *));
784 if (mode & SDDS_PASS_BY_VALUE)
785 *((
float *)SDDS_dataset->parameter[index]) = (float)va_arg(argptr,
double);
787 *((
float *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
double *));
790 if (mode & SDDS_PASS_BY_VALUE)
791 *((
double *)SDDS_dataset->parameter[index]) = va_arg(argptr,
double);
793 *((
double *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
double *));
797 SDDS_SetError(
"Nonnumeric data type encountered (SDDS_SetParametersFromDoubles)");
801 SDDS_SetError(
"Unknown data type encountered (SDDS_SetParametersFromDoubles)");
804 }
while (retval == -1);
846 int32_t index, retval;
849 char s[SDDS_MAXLINE];
853 if (!(mode & SDDS_SET_BY_INDEX || mode & SDDS_SET_BY_NAME) || !(mode & SDDS_PASS_BY_VALUE || mode & SDDS_PASS_BY_REFERENCE)) {
854 SDDS_SetError(
"Unable to set parameter values--unknown mode (SDDS_SetParametersFromLongDoubles)");
858 va_start(argptr, mode);
859 layout = &SDDS_dataset->layout;
864 if (mode & SDDS_SET_BY_INDEX) {
865 if ((index = va_arg(argptr, int32_t)) == -1) {
869 if (index < 0 || index >= layout->n_parameters) {
870 sprintf(s,
"Unable to set parameter values--index %" PRId32
" out of range [%d, %" PRId32
"] (SDDS_SetParametersFromLongDoubles)", index, 0, layout->n_parameters);
876 if ((name = va_arg(argptr,
char *)) == NULL) {
881 sprintf(s,
"Unable to set parameter values--name %s not recognized (SDDS_SetParametersFromLongDoubles)", name);
887 switch (layout->parameter_definition[index].type) {
889 if (mode & SDDS_PASS_BY_VALUE)
890 *((
short *)SDDS_dataset->parameter[index]) = va_arg(argptr,
long double);
892 *((
short *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
long double *));
895 if (mode & SDDS_PASS_BY_VALUE)
896 *((
unsigned short *)SDDS_dataset->parameter[index]) = va_arg(argptr,
long double);
898 *((
unsigned short *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
long double *));
901 if (mode & SDDS_PASS_BY_VALUE)
902 *((int32_t *)SDDS_dataset->parameter[index]) = va_arg(argptr,
long double);
904 *((int32_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
long double *));
907 if (mode & SDDS_PASS_BY_VALUE)
908 *((uint32_t *)SDDS_dataset->parameter[index]) = va_arg(argptr,
long double);
910 *((uint32_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
long double *));
913 if (mode & SDDS_PASS_BY_VALUE)
914 *((int64_t *)SDDS_dataset->parameter[index]) = va_arg(argptr,
long double);
916 *((int64_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
long double *));
919 if (mode & SDDS_PASS_BY_VALUE)
920 *((uint64_t *)SDDS_dataset->parameter[index]) = va_arg(argptr,
long double);
922 *((uint64_t *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
long double *));
925 if (mode & SDDS_PASS_BY_VALUE)
926 *((
float *)SDDS_dataset->parameter[index]) = (float)va_arg(argptr,
long double);
928 *((
float *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
long double *));
931 if (mode & SDDS_PASS_BY_VALUE)
932 *((
double *)SDDS_dataset->parameter[index]) = va_arg(argptr,
long double);
934 *((
double *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
long double *));
937 if (mode & SDDS_PASS_BY_VALUE)
938 *((
long double *)SDDS_dataset->parameter[index]) = va_arg(argptr,
long double);
940 *((
long double *)SDDS_dataset->parameter[index]) = *(va_arg(argptr,
long double *));
944 SDDS_SetError(
"Nonnumeric data type encountered (SDDS_SetParametersFromLongDoubles)");
948 SDDS_SetError(
"Unknown data type encountered (SDDS_SetParametersFromLongDoubles)");
951 }
while (retval == -1);
1004 if (!(mode & SDDS_SET_BY_INDEX || mode & SDDS_SET_BY_NAME) || !(mode & SDDS_PASS_BY_VALUE || mode & SDDS_PASS_BY_REFERENCE)) {
1005 SDDS_SetError(
"Unable to set column values--unknown mode (SDDS_SetRowValues)");
1010 row -= SDDS_dataset->first_row_in_mem;
1011 if (row >= SDDS_dataset->n_rows_allocated) {
1012 sprintf(buffer,
"Unable to set column values--row number (%" PRId64
") exceeds exceeds allocated memory (%" PRId64
") (SDDS_SetRowValues)", row, SDDS_dataset->n_rows_allocated);
1016 if (row > SDDS_dataset->n_rows - 1)
1017 SDDS_dataset->n_rows = row + 1;
1019 va_start(argptr, row);
1020 layout = &SDDS_dataset->layout;
1025 fprintf(stderr,
"setting row %" PRId64
" (mem slot %" PRId64
")\n", row + SDDS_dataset->first_row_in_mem, row);
1028 if (mode & SDDS_SET_BY_INDEX) {
1029 if ((index = va_arg(argptr, int32_t)) == -1) {
1033 if (index < 0 || index >= layout->n_columns) {
1034 SDDS_SetError(
"Unable to set column values--index out of range (SDDS_SetRowValues)");
1039 fprintf(stderr,
"Setting values for column #%" PRId32
"\n", index);
1042 if ((name = va_arg(argptr,
char *)) == NULL) {
1047 fprintf(stderr,
"Setting values for column %s\n", name);
1050 SDDS_SetError(
"Unable to set column values--name not recognized (SDDS_SetRowValues)");
1055 switch (layout->column_definition[index].type) {
1057 if (mode & SDDS_PASS_BY_VALUE)
1058 *(((
short *)SDDS_dataset->data[index]) + row) = (short)va_arg(argptr,
int);
1060 *(((
short *)SDDS_dataset->data[index]) + row) = *(va_arg(argptr,
short *));
1063 if (mode & SDDS_PASS_BY_VALUE)
1064 *(((
unsigned short *)SDDS_dataset->data[index]) + row) = (
unsigned short)va_arg(argptr,
unsigned int);
1066 *(((
unsigned short *)SDDS_dataset->data[index]) + row) = *(va_arg(argptr,
unsigned short *));
1069 if (mode & SDDS_PASS_BY_VALUE)
1070 *(((int32_t *)SDDS_dataset->data[index]) + row) = va_arg(argptr, int32_t);
1072 *(((int32_t *)SDDS_dataset->data[index]) + row) = *(va_arg(argptr, int32_t *));
1075 if (mode & SDDS_PASS_BY_VALUE)
1076 *(((uint32_t *)SDDS_dataset->data[index]) + row) = va_arg(argptr, uint32_t);
1078 *(((uint32_t *)SDDS_dataset->data[index]) + row) = *(va_arg(argptr, uint32_t *));
1081 if (mode & SDDS_PASS_BY_VALUE)
1082 *(((int64_t *)SDDS_dataset->data[index]) + row) = va_arg(argptr, int64_t);
1084 *(((int64_t *)SDDS_dataset->data[index]) + row) = *(va_arg(argptr, int64_t *));
1087 if (mode & SDDS_PASS_BY_VALUE)
1088 *(((uint64_t *)SDDS_dataset->data[index]) + row) = va_arg(argptr, uint64_t);
1090 *(((uint64_t *)SDDS_dataset->data[index]) + row) = *(va_arg(argptr, uint64_t *));
1093 if (mode & SDDS_PASS_BY_VALUE)
1094 *(((
float *)SDDS_dataset->data[index]) + row) = (float)va_arg(argptr,
double);
1096 *(((
float *)SDDS_dataset->data[index]) + row) = *(va_arg(argptr,
float *));
1099 if (mode & SDDS_PASS_BY_VALUE)
1100 *(((
double *)SDDS_dataset->data[index]) + row) = va_arg(argptr,
double);
1102 *(((
double *)SDDS_dataset->data[index]) + row) = *(va_arg(argptr,
double *));
1105 if (mode & SDDS_PASS_BY_VALUE)
1106 *(((
long double *)SDDS_dataset->data[index]) + row) = va_arg(argptr,
long double);
1108 *(((
long double *)SDDS_dataset->data[index]) + row) = *(va_arg(argptr,
long double *));
1111 if (((
char **)SDDS_dataset->data[index])[row]) {
1112 free(((
char **)SDDS_dataset->data[index])[row]);
1113 ((
char **)SDDS_dataset->data[index])[row] = NULL;
1115 if (mode & SDDS_PASS_BY_VALUE) {
1116 if (!
SDDS_CopyString((
char **)SDDS_dataset->data[index] + row, va_arg(argptr,
char *))) {
1117 SDDS_SetError(
"Unable to set string column value--allocation failure (SDDS_SetRowValues)");
1121 if (!
SDDS_CopyString((
char **)SDDS_dataset->data[index] + row, *(va_arg(argptr,
char **)))) {
1122 SDDS_SetError(
"Unable to set string column value--allocation failure (SDDS_SetRowValues)");
1128 if (mode & SDDS_PASS_BY_VALUE)
1129 *(((
char *)SDDS_dataset->data[index]) + row) = (char)va_arg(argptr,
int);
1131 *(((
char *)SDDS_dataset->data[index]) + row) = *(va_arg(argptr,
char *));
1134 SDDS_SetError(
"Unknown data type encountered (SDDS_SetRowValues");
1138 }
while (retval == -1);
1165 int32_t index, retval, i, size;
1166 int32_t *counter = NULL;
1173 if (!(mode & SDDS_POINTER_ARRAY) && !(mode & SDDS_CONTIGUOUS_DATA)) {
1174 SDDS_SetError(
"Unable to set array--invalid mode (SDDS_SetArrayVararg)");
1178 SDDS_SetError(
"Unable to set array--unknown array name given (SDDS_SetArrayVararg)");
1181 if (!SDDS_dataset->array) {
1182 SDDS_SetError(
"Unable to set array--internal array pointer is NULL (SDDS_SetArrayVararg)");
1186 layout = &SDDS_dataset->layout;
1187 array = SDDS_dataset->array + index;
1188 if (!layout->array_definition) {
1189 SDDS_SetError(
"Unable to set array--internal array definition pointer is NULL (SDDS_SetArrayVararg)");
1192 array->definition = layout->array_definition + index;
1193 if (!array->dimension && !(array->dimension = (int32_t *)
SDDS_Malloc(
sizeof(*array->dimension) * array->definition->dimensions))) {
1194 SDDS_SetError(
"Unable to set array--allocation failure (SDDS_SetArrayVararg)");
1198 va_start(argptr, data_pointer);
1203 array->elements = 1;
1205 if ((array->dimension[index] = va_arg(argptr, int32_t)) < 0) {
1206 SDDS_SetError(
"Unable to set array--negative dimension given (SDDS_SetArrayVararg)");
1210 array->elements *= array->dimension[index];
1211 }
while (retval == 1 && ++index < array->definition->dimensions);
1216 if (!array->elements)
1218 if (!data_pointer) {
1219 SDDS_SetError(
"Unable to set array--data pointer is NULL (SDDS_SetArrayVararg)");
1224 if (!(array->data =
SDDS_Realloc(array->data, size * array->elements))) {
1225 SDDS_SetError(
"Unable to set array--allocation failure (SDDS_SetArrayVararg");
1230 if (array->definition->dimensions == 1 || mode & SDDS_CONTIGUOUS_DATA) {
1232 memcpy(array->data, data_pointer, size * array->elements);
1234 SDDS_SetError(
"Unable to set array--string copy failure (SDDS_SetArrayVararg");
1240 if (!(counter =
SDDS_Realloc(counter,
sizeof(*counter) * (array->elements - 1)))) {
1241 SDDS_SetError(
"Unable to set array--allocation failure (SDDS_SetArrayVararg");
1248 for (i = 0; i < array->definition->dimensions - 1; i++)
1249 ptr = ((
void **)ptr)[counter[i]];
1251 memcpy((
char *)array->data + size * index, ptr, size * array->dimension[i]);
1253 SDDS_SetError(
"Unable to set array--string copy failure (SDDS_SetArrayVararg");
1256 index += array->dimension[i];
1257 }
while (
SDDS_AdvanceCounter(counter, array->dimension, array->definition->dimensions - 1) != -1);
1285 int32_t index, i, size;
1286 int32_t *counter = NULL;
1293 if (!(mode & SDDS_POINTER_ARRAY) && !(mode & SDDS_CONTIGUOUS_DATA)) {
1294 SDDS_SetError(
"Unable to set array--invalid mode (SDDS_SetArray)");
1298 SDDS_SetError(
"Unable to set array--unknown array name given (SDDS_SetArray)");
1303 SDDS_SetError(
"Unable to set array--dimension pointer is NULL (SDDS_SetArray)");
1306 if (!SDDS_dataset->array) {
1307 SDDS_SetError(
"Unable to set array--internal array pointer is NULL (SDDS_SetArray)");
1311 layout = &SDDS_dataset->layout;
1312 array = SDDS_dataset->array + index;
1313 if (!layout->array_definition) {
1314 SDDS_SetError(
"Unable to set array--internal array definition pointer is NULL (SDDS_SetArray)");
1317 array->definition = layout->array_definition + index;
1318 if (!array->dimension && !(array->dimension = (int32_t *)
SDDS_Malloc(
sizeof(*array->dimension) * array->definition->dimensions))) {
1319 SDDS_SetError(
"Unable to set array--allocation failure (SDDS_SetArray)");
1322 array->elements = 1;
1323 for (i = 0; i < array->definition->dimensions; i++) {
1324 if ((array->dimension[i] = dimension[i]) < 0) {
1325 SDDS_SetError(
"Unable to set array--negative dimension specified (SDDS_SetArray)");
1328 array->elements *= dimension[i];
1329 if (array->elements && !data_pointer) {
1330 SDDS_SetError(
"Unable to set array--data pointer is NULL (SDDS_SetArray)");
1334 if (!array->elements)
1338 if (!(array->data =
SDDS_Realloc(array->data, size * array->elements))) {
1339 SDDS_SetError(
"Unable to set array--allocation failure (SDDS_SetArray)");
1344 if (array->definition->dimensions == 1 || mode & SDDS_CONTIGUOUS_DATA) {
1346 memcpy(array->data, data_pointer, size * array->elements);
1348 SDDS_SetError(
"Unable to set array--string copy failure (SDDS_SetArrayVararg");
1354 if (!(counter =
SDDS_Realloc(counter,
sizeof(*counter) * (array->elements - 1)))) {
1355 SDDS_SetError(
"Unable to set array--allocation failure (SDDS_SetArray)");
1362 for (i = 0; i < array->definition->dimensions - 1; i++)
1363 ptr = ((
void **)ptr)[counter[i]];
1365 memcpy((
char *)array->data + size * index, ptr, size * array->dimension[i]);
1367 SDDS_SetError(
"Unable to set array--string copy failure (SDDS_SetArray)");
1370 index += array->dimension[i];
1371 }
while (
SDDS_AdvanceCounter(counter, array->dimension, array->definition->dimensions - 1) != -1);
1400 int32_t index, retval, size, startIndex = 0;
1406 if (!(mode & SDDS_POINTER_ARRAY) && !(mode & SDDS_CONTIGUOUS_DATA)) {
1407 SDDS_SetError(
"Unable to set array--invalid mode (SDDS_AppendToArrayVararg)");
1411 SDDS_SetError(
"Unable to set array--unknown array name given (SDDS_AppendToArrayVararg)");
1414 if (!data_pointer) {
1415 SDDS_SetError(
"Unable to set array--data pointer is NULL (SDDS_AppendToArrayVararg)");
1418 if (!SDDS_dataset->array) {
1419 SDDS_SetError(
"Unable to set array--internal array pointer is NULL (SDDS_AppendToArrayVararg)");
1423 layout = &SDDS_dataset->layout;
1424 array = SDDS_dataset->array + index;
1425 if (!layout->array_definition) {
1426 SDDS_SetError(
"Unable to set array--internal array definition pointer is NULL (SDDS_AppendToArrayVararg)");
1429 array->definition = layout->array_definition + index;
1430 if (!array->dimension && !(array->dimension = (int32_t *)
SDDS_Malloc(
sizeof(*array->dimension) * array->definition->dimensions))) {
1431 SDDS_SetError(
"Unable to set array--allocation failure (SDDS_SetArrayVararg)");
1434 if (!(array->definition->dimensions == 1 || mode & SDDS_CONTIGUOUS_DATA)) {
1435 SDDS_SetError(
"Unable to set array--append operation requires contiguous data (SDDS_AppendToArrayVararg)");
1439 va_start(argptr, elements);
1444 array->elements = 1;
1446 if ((array->dimension[index] = va_arg(argptr, int32_t)) < 0) {
1447 SDDS_SetError(
"Unable to set array--negative dimension given (SDDS_AppendToArrayVararg)");
1451 array->elements *= array->dimension[index];
1452 }
while (retval == 1 && ++index < array->definition->dimensions);
1457 if (!array->elements)
1461 if (!(array->data =
SDDS_Realloc(array->data, size * array->elements))) {
1462 SDDS_SetError(
"Unable to set array--allocation failure (SDDS_AppendToArrayVararg)");
1466 startIndex = array->elements - elements;
1469 if (array->definition->dimensions == 1 || mode & SDDS_CONTIGUOUS_DATA) {
1471 memcpy((
char *)array->data + size * startIndex, data_pointer, size * elements);
1473 SDDS_SetError(
"Unable to set array--string copy failure (SDDS_AppendToArrayVararg)");
1500 for (i = n_indices - 1; i >= 0; i--)
1501 if (counter[i] != (max_count[i] - 1))
1506 for (i = n_indices - 1; i >= 0; i--) {
1507 if (counter[i] < (max_count[i] - 1)) {
1551 if (!(mode & SDDS_SET_BY_INDEX || mode & SDDS_SET_BY_NAME)) {
1552 SDDS_SetError(
"Unable to set column values--unknown mode (SDDS_SetColumn)");
1555 if (rows > SDDS_dataset->n_rows_allocated) {
1556 SDDS_SetError(
"Unable to set column values--number of rows exceeds allocated memory (SDDS_SetColumn)");
1561 if (SDDS_dataset->n_rows != 0 && SDDS_dataset->n_rows != rows) {
1562 SDDS_SetError(
"Number of rows in new column unequal to number in other columns (SDDS_SetColumn)");
1565 SDDS_dataset->n_rows = rows;
1566 layout = &SDDS_dataset->layout;
1569 va_start(argptr, rows);
1570 if (mode & SDDS_SET_BY_INDEX) {
1571 index = va_arg(argptr, int32_t);
1572 if (index < 0 || index >= layout->n_columns) {
1573 SDDS_SetError(
"Unable to set column values--index out of range (SDDS_SetColumn)");
1577 name = va_arg(argptr,
char *);
1589 if (layout->column_definition[index].type ==
SDDS_STRING) {
1590 if (SDDS_dataset->data[index]) {
1593 for (i = 0; i < rows; i++) {
1594 ptr = *((
char **)SDDS_dataset->data[index] + i);
1597 *((
char **)SDDS_dataset->data[index] + i) = NULL;
1601 SDDS_SetError(
"Unable to set column--error copying string data (SDDS_SetColumn)");
1605 memcpy(SDDS_dataset->data[index], data, rows *
SDDS_type_size[layout->column_definition[index].type - 1]);
1651 int32_t index, retval, type, size;
1657 if (!(mode & SDDS_SET_BY_INDEX || mode & SDDS_SET_BY_NAME)) {
1658 SDDS_SetError(
"Unable to set column values--unknown mode (SDDS_SetColumnFromDoubles)");
1661 if (rows > SDDS_dataset->n_rows_allocated) {
1662 SDDS_SetError(
"Unable to set column values--number of rows exceeds allocated memory (SDDS_SetColumnFromDoubles)");
1667 if (SDDS_dataset->n_rows != 0 && SDDS_dataset->n_rows != rows) {
1668 SDDS_SetError(
"Number of rows in new column unequal to number in other columns (SDDS_SetColumnFromDoubles)");
1671 SDDS_dataset->n_rows = rows;
1672 layout = &SDDS_dataset->layout;
1675 va_start(argptr, rows);
1676 if (mode & SDDS_SET_BY_INDEX) {
1677 index = va_arg(argptr, int32_t);
1678 if (index < 0 || index >= layout->n_columns) {
1679 SDDS_SetError(
"Unable to set column values--index out of range (SDDS_SetColumnFromDoubles)");
1683 name = va_arg(argptr,
char *);
1685 SDDS_SetError(
"Unable to set column values--name not recognized (SDDS_SetColumnFromDoubles)");
1693 type = layout->column_definition[index].type;
1697 if (SDDS_dataset->data[index]) {
1700 for (i = 0; i < rows; i++) {
1701 ptr = *((
char **)SDDS_dataset->data[index] + i);
1704 *((
char **)SDDS_dataset->data[index] + i) = NULL;
1707 stringArray = (
char **)malloc(
sizeof(
char *) * rows);
1708 for (i = 0; i < rows; i++) {
1709 stringArray[i] = (
char *)malloc(
sizeof(
char) * 40);
1710 sprintf(stringArray[i],
"%.15lg", data[i]);
1713 SDDS_SetError(
"Unable to set column--error copying string data (SDDS_SetColumnFromDoubles)");
1716 for (i = 0; i < rows; i++) {
1717 free(stringArray[i]);
1722 SDDS_SetError(
"Unable to set column--source type is nonnumeric (SDDS_SetColumnFromDoubles)");
1726 size =
SDDS_type_size[layout->column_definition[index].type - 1];
1729 memcpy((
char *)SDDS_dataset->data[index], (
char *)data, rows * size);
1733 for (i = 0; i < rows; i++)
1735 SDDS_SetError(
"Unable to set column--cast error (SDDS_SetColumnFromDoubles)");
1784 int32_t index, retval, type, size;
1790 if (!(mode & SDDS_SET_BY_INDEX || mode & SDDS_SET_BY_NAME)) {
1791 SDDS_SetError(
"Unable to set column values--unknown mode (SDDS_SetColumnFromLongDoubles)");
1794 if (rows > SDDS_dataset->n_rows_allocated) {
1795 SDDS_SetError(
"Unable to set column values--number of rows exceeds allocated memory (SDDS_SetColumnFromLongDoubles)");
1800 if (SDDS_dataset->n_rows != 0 && SDDS_dataset->n_rows != rows) {
1801 SDDS_SetError(
"Number of rows in new column unequal to number in other columns (SDDS_SetColumnFromLongDoubles)");
1804 SDDS_dataset->n_rows = rows;
1805 layout = &SDDS_dataset->layout;
1808 va_start(argptr, rows);
1809 if (mode & SDDS_SET_BY_INDEX) {
1810 index = va_arg(argptr, int32_t);
1811 if (index < 0 || index >= layout->n_columns) {
1812 SDDS_SetError(
"Unable to set column values--index out of range (SDDS_SetColumnFromLongDoubles)");
1816 name = va_arg(argptr,
char *);
1818 SDDS_SetError(
"Unable to set column values--name not recognized (SDDS_SetColumnFromLongDoubles)");
1826 type = layout->column_definition[index].type;
1830 if (SDDS_dataset->data[index]) {
1833 for (i = 0; i < rows; i++) {
1834 ptr = *((
char **)SDDS_dataset->data[index] + i);
1837 *((
char **)SDDS_dataset->data[index] + i) = NULL;
1840 stringArray = (
char **)malloc(
sizeof(
char *) * rows);
1841 for (i = 0; i < rows; i++) {
1842 stringArray[i] = (
char *)malloc(
sizeof(
char) * 40);
1843 if (LDBL_DIG == 18) {
1844 sprintf(stringArray[i],
"%.18Lg", data[i]);
1846 sprintf(stringArray[i],
"%.15Lg", data[i]);
1850 SDDS_SetError(
"Unable to set column--error copying string data (SDDS_SetColumnFromLongDoubles)");
1853 for (i = 0; i < rows; i++) {
1854 free(stringArray[i]);
1859 SDDS_SetError(
"Unable to set column--source type is nonnumeric (SDDS_SetColumnFromLongDoubles)");
1863 size =
SDDS_type_size[layout->column_definition[index].type - 1];
1866 memcpy((
char *)SDDS_dataset->data[index], (
char *)data, rows * size);
1870 for (i = 0; i < rows; i++)
1872 SDDS_SetError(
"Unable to set column--cast error (SDDS_SetColumnFromLongDoubles)");
1921 int32_t index, retval, type, size;
1927 if (!(mode & SDDS_SET_BY_INDEX || mode & SDDS_SET_BY_NAME)) {
1928 SDDS_SetError(
"Unable to set column values--unknown mode (SDDS_SetColumnFromFloats)");
1931 if (rows > SDDS_dataset->n_rows_allocated) {
1932 SDDS_SetError(
"Unable to set column values--number of rows exceeds allocated memory (SDDS_SetColumnFromFloats)");
1937 if (SDDS_dataset->n_rows != 0 && SDDS_dataset->n_rows != rows) {
1938 SDDS_SetError(
"Number of rows in new column unequal to number in other columns (SDDS_SetColumnFromFloats)");
1941 SDDS_dataset->n_rows = rows;
1942 layout = &SDDS_dataset->layout;
1945 va_start(argptr, rows);
1946 if (mode & SDDS_SET_BY_INDEX) {
1947 index = va_arg(argptr, int32_t);
1948 if (index < 0 || index >= layout->n_columns) {
1949 SDDS_SetError(
"Unable to set column values--index out of range (SDDS_SetColumnFromFloats)");
1953 name = va_arg(argptr,
char *);
1955 SDDS_SetError(
"Unable to set column values--name not recognized (SDDS_SetColumnFromFloats)");
1963 type = layout->column_definition[index].type;
1967 if (SDDS_dataset->data[index]) {
1970 for (i = 0; i < rows; i++) {
1971 ptr = *((
char **)SDDS_dataset->data[index] + i);
1974 *((
char **)SDDS_dataset->data[index] + i) = NULL;
1977 stringArray = (
char **)malloc(
sizeof(
char *) * rows);
1978 for (i = 0; i < rows; i++) {
1979 stringArray[i] = (
char *)malloc(
sizeof(
char) * 40);
1980 sprintf(stringArray[i],
"%.8g", data[i]);
1983 SDDS_SetError(
"Unable to set column--error copying string data (SDDS_SetColumnFromFloats)");
1986 for (i = 0; i < rows; i++) {
1987 free(stringArray[i]);
1992 SDDS_SetError(
"Unable to set column--source type is nonnumeric (SDDS_SetColumnFromFloats)");
1996 size =
SDDS_type_size[layout->column_definition[index].type - 1];
1999 memcpy((
char *)SDDS_dataset->data[index], (
char *)data, rows * size);
2003 for (i = 0; i < rows; i++)
2005 SDDS_SetError(
"Unable to set column--cast error (SDDS_SetColumnFromFloats)");
2054 int32_t index, retval, type, size;
2060 if (!(mode & SDDS_SET_BY_INDEX || mode & SDDS_SET_BY_NAME)) {
2061 SDDS_SetError(
"Unable to set column values--unknown mode (SDDS_SetColumnFromLongs)");
2064 if (rows > SDDS_dataset->n_rows_allocated) {
2065 SDDS_SetError(
"Unable to set column values--number of rows exceeds allocated memory (SDDS_SetColumnFromLongs)");
2070 if (SDDS_dataset->n_rows != 0 && SDDS_dataset->n_rows != rows) {
2071 SDDS_SetError(
"Number of rows in new column unequal to number in other columns (SDDS_SetColumnFromLongs)");
2074 SDDS_dataset->n_rows = rows;
2075 layout = &SDDS_dataset->layout;
2078 va_start(argptr, rows);
2079 if (mode & SDDS_SET_BY_INDEX) {
2080 index = va_arg(argptr, int32_t);
2081 if (index < 0 || index >= layout->n_columns) {
2082 SDDS_SetError(
"Unable to set column values--index out of range (SDDS_SetColumnFromLongs)");
2086 name = va_arg(argptr,
char *);
2088 SDDS_SetError(
"Unable to set column values--name not recognized (SDDS_SetColumnFromLongs)");
2096 type = layout->column_definition[index].type;
2100 if (SDDS_dataset->data[index]) {
2103 for (i = 0; i < rows; i++) {
2104 ptr = *((
char **)SDDS_dataset->data[index] + i);
2107 *((
char **)SDDS_dataset->data[index] + i) = NULL;
2110 stringArray = (
char **)malloc(
sizeof(
char *) * rows);
2111 for (i = 0; i < rows; i++) {
2112 stringArray[i] = (
char *)malloc(
sizeof(
char) * 40);
2113 sprintf(stringArray[i],
"%" PRId32, data[i]);
2116 SDDS_SetError(
"Unable to set column--error copying string data (SDDS_SetColumnFromLongs)");
2119 for (i = 0; i < rows; i++) {
2120 free(stringArray[i]);
2125 SDDS_SetError(
"Unable to set column--source type is nonnumeric (SDDS_SetColumnFromLongs)");
2129 size =
SDDS_type_size[layout->column_definition[index].type - 1];
2132 memcpy((
char *)SDDS_dataset->data[index], (
char *)data, rows * size);
2136 for (i = 0; i < rows; i++)
2138 SDDS_SetError(
"Unable to set column--cast error (SDDS_SetColumnFromLongs)");
SDDS (Self Describing Data Set) Data Types Definitions and Function Prototypes.
int32_t SDDS_RestoreLayout(SDDS_DATASET *SDDS_dataset)
int32_t SDDS_type_size[SDDS_NUM_TYPES]
Array of sizes for each supported data type.
int32_t SDDS_LengthenTable(SDDS_DATASET *SDDS_dataset, int64_t n_additional_rows)
int32_t SDDS_AppendToArrayVararg(SDDS_DATASET *SDDS_dataset, char *array_name, int32_t mode, void *data_pointer, int32_t elements,...)
Appends data to an existing array variable in the SDDS dataset using variable arguments for dimension...
int32_t SDDS_AllocateColumnFlags(SDDS_DATASET *SDDS_target)
int32_t SDDS_SetRowValues(SDDS_DATASET *SDDS_dataset, int32_t mode, int64_t row,...)
int32_t SDDS_StartPage(SDDS_DATASET *SDDS_dataset, int64_t expected_n_rows)
int32_t SDDS_SetArrayVararg(SDDS_DATASET *SDDS_dataset, char *array_name, int32_t mode, void *data_pointer,...)
Sets the values of an array variable in the SDDS dataset using variable arguments for dimensions.
int32_t SDDS_SetColumnFromFloats(SDDS_DATASET *SDDS_dataset, int32_t mode, float *data, int64_t rows,...)
Sets the values for a single data column using single-precision floating-point numbers.
int32_t SDDS_SetParameter(SDDS_DATASET *SDDS_dataset, int32_t mode,...)
int32_t SDDS_SetParametersFromDoubles(SDDS_DATASET *SDDS_dataset, int32_t mode,...)
int32_t SDDS_SetParameters(SDDS_DATASET *SDDS_dataset, int32_t mode,...)
int32_t SDDS_ClearPage(SDDS_DATASET *SDDS_dataset)
int32_t SDDS_SetColumnFromLongDoubles(SDDS_DATASET *SDDS_dataset, int32_t mode, long double *data, int64_t rows,...)
Sets the values for a single data column using long double-precision floating-point numbers.
int32_t SDDS_SetColumnFromDoubles(SDDS_DATASET *SDDS_dataset, int32_t mode, double *data, int64_t rows,...)
Sets the values for a single data column using double-precision floating-point numbers.
int32_t SDDS_SetColumn(SDDS_DATASET *SDDS_dataset, int32_t mode, void *data, int64_t rows,...)
Sets the values for one data column in the current data table of an SDDS dataset.
int32_t SDDS_ShortenTable(SDDS_DATASET *SDDS_dataset, int64_t rows)
int32_t SDDS_SetParametersFromLongDoubles(SDDS_DATASET *SDDS_dataset, int32_t mode,...)
int32_t SDDS_SetArray(SDDS_DATASET *SDDS_dataset, char *array_name, int32_t mode, void *data_pointer, int32_t *dimension)
Sets the values of an array variable in the SDDS dataset using specified dimensions.
int32_t SDDS_SetColumnFromLongs(SDDS_DATASET *SDDS_dataset, int32_t mode, int32_t *data, int64_t rows,...)
Sets the values for a single data column using long integer numbers.
int32_t SDDS_AdvanceCounter(int32_t *counter, int32_t *max_count, int32_t n_indices)
Advances a multi-dimensional counter based on maximum counts for each dimension.
Internal definitions and function declarations for SDDS with LZMA support.
int32_t SDDS_FreeStringArray(char **string, int64_t strings)
Frees an array of strings by deallocating each individual string.
void SDDS_SetError0(char *error_text)
Internal function to record an error message in the SDDS error stack.
void SDDS_SetError(char *error_text)
Records an error message in the SDDS error stack.
int32_t SDDS_ZeroMemory(void *mem, int64_t n_bytes)
Sets a block of memory to zero.
int32_t SDDS_GetArrayIndex(SDDS_DATASET *SDDS_dataset, char *name)
Retrieves the index of a named array in the SDDS dataset.
int32_t SDDS_GetParameterIndex(SDDS_DATASET *SDDS_dataset, char *name)
Retrieves the index of a named parameter in the SDDS dataset.
int32_t SDDS_GetColumnIndex(SDDS_DATASET *SDDS_dataset, char *name)
Retrieves the index of a named column in the SDDS dataset.
void * SDDS_CastValue(void *data, int64_t index, int32_t data_type, int32_t desired_type, void *memory)
Casts a value from one SDDS data type to another.
int32_t SDDS_SetMemory(void *mem, int64_t n_elements, int32_t data_type,...)
Initializes a memory block with a sequence of values based on a specified data type.
int32_t SDDS_CheckDataset(SDDS_DATASET *SDDS_dataset, const char *caller)
Validates the SDDS dataset pointer.
int32_t SDDS_CopyStringArray(char **target, char **source, int64_t n_strings)
Copies an array of strings from source to target.
void * SDDS_Malloc(size_t size)
Allocates memory of a specified size.
int32_t SDDS_CopyString(char **target, const char *source)
Copies a source string to a target string with memory allocation.
int32_t SDDS_CheckTabularData(SDDS_DATASET *SDDS_dataset, const char *caller)
Validates the consistency of tabular data within an SDDS dataset.
void * SDDS_Realloc(void *old_ptr, size_t new_size)
Reallocates memory to a new size.
#define SDDS_ULONG
Identifier for the unsigned 32-bit integer data type.
#define SDDS_FLOAT
Identifier for the float data type.
#define SDDS_STRING
Identifier for the string data type.
#define SDDS_ULONG64
Identifier for the unsigned 64-bit integer data type.
#define SDDS_LONG
Identifier for the signed 32-bit integer data type.
#define SDDS_SHORT
Identifier for the signed short integer data type.
#define SDDS_CHARACTER
Identifier for the character data type.
#define SDDS_USHORT
Identifier for the unsigned short integer data type.
#define SDDS_DOUBLE
Identifier for the double data type.
#define SDDS_NUMERIC_TYPE(type)
Checks if the given type identifier corresponds to any numeric type.
#define SDDS_LONGDOUBLE
Identifier for the long double data type.
#define SDDS_LONG64
Identifier for the signed 64-bit integer data type.