js-stream-sas7bdat 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/binding.gyp +58 -0
  2. package/package.json +4 -2
  3. package/src/binding/ReadStat/LICENSE +19 -0
  4. package/src/binding/ReadStat/README.md +483 -0
  5. package/src/binding/ReadStat/src/CKHashTable.c +309 -0
  6. package/src/binding/ReadStat/src/CKHashTable.h +37 -0
  7. package/src/binding/ReadStat/src/readstat.h +627 -0
  8. package/src/binding/ReadStat/src/readstat_bits.c +69 -0
  9. package/src/binding/ReadStat/src/readstat_bits.h +20 -0
  10. package/src/binding/ReadStat/src/readstat_convert.c +36 -0
  11. package/src/binding/ReadStat/src/readstat_convert.h +2 -0
  12. package/src/binding/ReadStat/src/readstat_error.c +126 -0
  13. package/src/binding/ReadStat/src/readstat_iconv.h +15 -0
  14. package/src/binding/ReadStat/src/readstat_io_unistd.c +147 -0
  15. package/src/binding/ReadStat/src/readstat_io_unistd.h +11 -0
  16. package/src/binding/ReadStat/src/readstat_malloc.c +34 -0
  17. package/src/binding/ReadStat/src/readstat_malloc.h +4 -0
  18. package/src/binding/ReadStat/src/readstat_metadata.c +53 -0
  19. package/src/binding/ReadStat/src/readstat_parser.c +121 -0
  20. package/src/binding/ReadStat/src/readstat_strings.h +6 -0
  21. package/src/binding/ReadStat/src/readstat_value.c +178 -0
  22. package/src/binding/ReadStat/src/readstat_variable.c +123 -0
  23. package/src/binding/ReadStat/src/readstat_writer.c +677 -0
  24. package/src/binding/ReadStat/src/readstat_writer.h +21 -0
  25. package/src/binding/ReadStat/src/sas/ieee.c +420 -0
  26. package/src/binding/ReadStat/src/sas/ieee.h +6 -0
  27. package/src/binding/ReadStat/src/sas/readstat_sas.c +528 -0
  28. package/src/binding/ReadStat/src/sas/readstat_sas.h +131 -0
  29. package/src/binding/ReadStat/src/sas/readstat_sas7bcat_read.c +515 -0
  30. package/src/binding/ReadStat/src/sas/readstat_sas7bcat_write.c +218 -0
  31. package/src/binding/ReadStat/src/sas/readstat_sas7bdat_read.c +1304 -0
  32. package/src/binding/ReadStat/src/sas/readstat_sas7bdat_write.c +812 -0
  33. package/src/binding/ReadStat/src/sas/readstat_sas_rle.c +286 -0
  34. package/src/binding/ReadStat/src/sas/readstat_sas_rle.h +8 -0
  35. package/src/binding/ReadStat/src/sas/readstat_xport.c +28 -0
  36. package/src/binding/ReadStat/src/sas/readstat_xport.h +47 -0
  37. package/src/binding/ReadStat/src/sas/readstat_xport_parse_format.c +265 -0
  38. package/src/binding/ReadStat/src/sas/readstat_xport_parse_format.h +4 -0
  39. package/src/binding/ReadStat/src/sas/readstat_xport_parse_format.rl +68 -0
  40. package/src/binding/ReadStat/src/sas/readstat_xport_read.c +777 -0
  41. package/src/binding/ReadStat/src/sas/readstat_xport_write.c +561 -0
  42. package/src/binding/readstat_binding.cc +393 -0
@@ -0,0 +1,178 @@
1
+
2
+ #include "readstat.h"
3
+
4
+ readstat_type_class_t readstat_type_class(readstat_type_t type) {
5
+ if (type == READSTAT_TYPE_STRING || type == READSTAT_TYPE_STRING_REF)
6
+ return READSTAT_TYPE_CLASS_STRING;
7
+
8
+ return READSTAT_TYPE_CLASS_NUMERIC;
9
+ }
10
+
11
+ readstat_type_t readstat_value_type(readstat_value_t value) {
12
+ return value.type;
13
+ }
14
+
15
+ readstat_type_class_t readstat_value_type_class(readstat_value_t value) {
16
+ return readstat_type_class(value.type);
17
+ }
18
+
19
+ char readstat_value_tag(readstat_value_t value) {
20
+ return value.tag;
21
+ }
22
+
23
+ int readstat_value_is_missing(readstat_value_t value, readstat_variable_t *variable) {
24
+ if (value.is_system_missing || value.is_tagged_missing)
25
+ return 1;
26
+
27
+ if (variable)
28
+ return readstat_value_is_defined_missing(value, variable);
29
+
30
+ return 0;
31
+ }
32
+
33
+ int readstat_value_is_system_missing(readstat_value_t value) {
34
+ return (value.is_system_missing);
35
+ }
36
+
37
+ int readstat_value_is_tagged_missing(readstat_value_t value) {
38
+ return (value.is_tagged_missing);
39
+ }
40
+
41
+ static int readstat_double_is_defined_missing(double fp_value, readstat_variable_t *variable) {
42
+ int count = readstat_variable_get_missing_ranges_count(variable);
43
+ int i;
44
+ for (i=0; i<count; i++) {
45
+ double lo = readstat_double_value(readstat_variable_get_missing_range_lo(variable, i));
46
+ double hi = readstat_double_value(readstat_variable_get_missing_range_hi(variable, i));
47
+ if (fp_value >= lo && fp_value <= hi) {
48
+ return 1;
49
+ }
50
+ }
51
+ return 0;
52
+ }
53
+
54
+ static int readstat_string_is_defined_missing(const char *string, readstat_variable_t *variable) {
55
+ if (string == NULL)
56
+ return 0;
57
+
58
+ int count = readstat_variable_get_missing_ranges_count(variable);
59
+ int i;
60
+ for (i=0; i<count; i++) {
61
+ const char *lo = readstat_string_value(readstat_variable_get_missing_range_lo(variable, i));
62
+ const char *hi = readstat_string_value(readstat_variable_get_missing_range_hi(variable, i));
63
+ if (lo && hi && strcmp(string, lo) >= 0 && strcmp(string, hi) <= 0) {
64
+ return 1;
65
+ }
66
+ }
67
+ return 0;
68
+ }
69
+
70
+ int readstat_value_is_defined_missing(readstat_value_t value, readstat_variable_t *variable) {
71
+ if (readstat_value_type_class(value) != readstat_variable_get_type_class(variable))
72
+ return 0;
73
+
74
+ if (readstat_value_type_class(value) == READSTAT_TYPE_CLASS_STRING)
75
+ return readstat_string_is_defined_missing(readstat_string_value(value), variable);
76
+
77
+ if (readstat_value_type_class(value) == READSTAT_TYPE_CLASS_NUMERIC)
78
+ return readstat_double_is_defined_missing(readstat_double_value(value), variable);
79
+
80
+ return 0;
81
+ }
82
+
83
+ char readstat_int8_value(readstat_value_t value) {
84
+ if (readstat_value_is_system_missing(value))
85
+ return 0;
86
+
87
+ if (value.type == READSTAT_TYPE_DOUBLE)
88
+ return (char)value.v.double_value;
89
+ if (value.type == READSTAT_TYPE_FLOAT)
90
+ return (char)value.v.float_value;
91
+ if (value.type == READSTAT_TYPE_INT32)
92
+ return (char)value.v.i32_value;
93
+ if (value.type == READSTAT_TYPE_INT16)
94
+ return (char)value.v.i16_value;
95
+ if (value.type == READSTAT_TYPE_INT8)
96
+ return value.v.i8_value;
97
+
98
+ return 0;
99
+ }
100
+
101
+ int16_t readstat_int16_value(readstat_value_t value) {
102
+ if (readstat_value_is_system_missing(value))
103
+ return 0;
104
+
105
+ if (value.type == READSTAT_TYPE_DOUBLE)
106
+ return (int16_t)value.v.double_value;
107
+ if (value.type == READSTAT_TYPE_FLOAT)
108
+ return (int16_t)value.v.float_value;
109
+ if (value.type == READSTAT_TYPE_INT32)
110
+ return (int16_t)value.v.i32_value;
111
+ if (value.type == READSTAT_TYPE_INT16)
112
+ return value.v.i16_value;
113
+ if (value.type == READSTAT_TYPE_INT8)
114
+ return value.v.i8_value;
115
+
116
+ return 0;
117
+ }
118
+
119
+ int32_t readstat_int32_value(readstat_value_t value) {
120
+ if (readstat_value_is_system_missing(value))
121
+ return 0;
122
+
123
+ if (value.type == READSTAT_TYPE_DOUBLE)
124
+ return (int32_t)value.v.double_value;
125
+ if (value.type == READSTAT_TYPE_FLOAT)
126
+ return (int32_t)value.v.float_value;
127
+ if (value.type == READSTAT_TYPE_INT32)
128
+ return value.v.i32_value;
129
+ if (value.type == READSTAT_TYPE_INT16)
130
+ return value.v.i16_value;
131
+ if (value.type == READSTAT_TYPE_INT8)
132
+ return value.v.i8_value;
133
+
134
+ return 0;
135
+ }
136
+
137
+ float readstat_float_value(readstat_value_t value) {
138
+ if (readstat_value_is_system_missing(value))
139
+ return NAN;
140
+
141
+ if (value.type == READSTAT_TYPE_DOUBLE)
142
+ return (float)value.v.double_value;
143
+ if (value.type == READSTAT_TYPE_FLOAT)
144
+ return value.v.float_value;
145
+ if (value.type == READSTAT_TYPE_INT32)
146
+ return value.v.i32_value;
147
+ if (value.type == READSTAT_TYPE_INT16)
148
+ return value.v.i16_value;
149
+ if (value.type == READSTAT_TYPE_INT8)
150
+ return value.v.i8_value;
151
+
152
+ return value.v.float_value;
153
+ }
154
+
155
+ double readstat_double_value(readstat_value_t value) {
156
+ if (readstat_value_is_system_missing(value))
157
+ return NAN;
158
+
159
+ if (value.type == READSTAT_TYPE_DOUBLE)
160
+ return value.v.double_value;
161
+ if (value.type == READSTAT_TYPE_FLOAT)
162
+ return value.v.float_value;
163
+ if (value.type == READSTAT_TYPE_INT32)
164
+ return value.v.i32_value;
165
+ if (value.type == READSTAT_TYPE_INT16)
166
+ return value.v.i16_value;
167
+ if (value.type == READSTAT_TYPE_INT8)
168
+ return value.v.i8_value;
169
+
170
+ return NAN;
171
+ }
172
+
173
+ const char *readstat_string_value(readstat_value_t value) {
174
+ if (readstat_value_type(value) == READSTAT_TYPE_STRING)
175
+ return value.v.string_value;
176
+
177
+ return NULL;
178
+ }
@@ -0,0 +1,123 @@
1
+
2
+ #include <stdlib.h>
3
+ #include "readstat.h"
4
+
5
+ static readstat_value_t make_blank_value(void);
6
+ static readstat_value_t make_double_value(double dval);
7
+
8
+ static readstat_value_t make_blank_value(void) {
9
+ readstat_value_t value = { .is_system_missing = 1, .v = { .double_value = NAN }, .type = READSTAT_TYPE_DOUBLE };
10
+ return value;
11
+ }
12
+
13
+ static readstat_value_t make_double_value(double dval) {
14
+ readstat_value_t value = { .v = { .double_value = dval }, .type = READSTAT_TYPE_DOUBLE };
15
+ return value;
16
+ }
17
+
18
+ static readstat_value_t make_string_value(const char *string) {
19
+ readstat_value_t value = { .v = { .string_value = string }, .type = READSTAT_TYPE_STRING };
20
+ return value;
21
+ }
22
+
23
+ const char *readstat_variable_get_name(const readstat_variable_t *variable) {
24
+ if (variable->name[0])
25
+ return variable->name;
26
+
27
+ return NULL;
28
+ }
29
+
30
+ const char *readstat_variable_get_label(const readstat_variable_t *variable) {
31
+ if (variable->label[0])
32
+ return variable->label;
33
+
34
+ return NULL;
35
+ }
36
+
37
+ const char *readstat_variable_get_format(const readstat_variable_t *variable) {
38
+ if (variable->format[0])
39
+ return variable->format;
40
+
41
+ return NULL;
42
+ }
43
+
44
+ readstat_type_t readstat_variable_get_type(const readstat_variable_t *variable) {
45
+ return variable->type;
46
+ }
47
+
48
+ readstat_type_class_t readstat_variable_get_type_class(const readstat_variable_t *variable) {
49
+ return readstat_type_class(variable->type);
50
+ }
51
+
52
+ int readstat_variable_get_index(const readstat_variable_t *variable) {
53
+ return variable->index;
54
+ }
55
+
56
+ int readstat_variable_get_index_after_skipping(const readstat_variable_t *variable) {
57
+ return variable->index_after_skipping;
58
+ }
59
+
60
+ size_t readstat_variable_get_storage_width(const readstat_variable_t *variable) {
61
+ return variable->storage_width;
62
+ }
63
+
64
+ readstat_measure_t readstat_variable_get_measure(const readstat_variable_t *variable) {
65
+ return variable->measure;
66
+ }
67
+
68
+ readstat_alignment_t readstat_variable_get_alignment(const readstat_variable_t *variable) {
69
+ return variable->alignment;
70
+ }
71
+
72
+ int readstat_variable_get_display_width(const readstat_variable_t *variable) {
73
+ return variable->display_width;
74
+ }
75
+
76
+ int readstat_variable_get_missing_ranges_count(const readstat_variable_t *variable) {
77
+ return variable->missingness.missing_ranges_count;
78
+ }
79
+
80
+ readstat_value_t readstat_variable_get_missing_range_lo(const readstat_variable_t *variable, int i) {
81
+ if (i < variable->missingness.missing_ranges_count &&
82
+ 2*i+1 < sizeof(variable->missingness.missing_ranges)/sizeof(variable->missingness.missing_ranges[0])) {
83
+ return variable->missingness.missing_ranges[2*i];
84
+ }
85
+
86
+ return make_blank_value();
87
+ }
88
+
89
+ readstat_value_t readstat_variable_get_missing_range_hi(const readstat_variable_t *variable, int i) {
90
+ if (i < variable->missingness.missing_ranges_count &&
91
+ 2*i+1 < sizeof(variable->missingness.missing_ranges)/sizeof(variable->missingness.missing_ranges[0])) {
92
+ return variable->missingness.missing_ranges[2*i+1];
93
+ }
94
+
95
+ return make_blank_value();
96
+ }
97
+
98
+ static readstat_error_t readstat_variable_add_missing_value_range(readstat_variable_t *variable, readstat_value_t lo, readstat_value_t hi) {
99
+ int i = readstat_variable_get_missing_ranges_count(variable);
100
+ if (2*i < sizeof(variable->missingness.missing_ranges)/sizeof(variable->missingness.missing_ranges[0])) {
101
+ variable->missingness.missing_ranges[2*i] = lo;
102
+ variable->missingness.missing_ranges[2*i+1] = hi;
103
+ variable->missingness.missing_ranges_count++;
104
+ return READSTAT_OK;
105
+ }
106
+ return READSTAT_ERROR_TOO_MANY_MISSING_VALUE_DEFINITIONS;
107
+ }
108
+
109
+ readstat_error_t readstat_variable_add_missing_double_range(readstat_variable_t *variable, double lo, double hi) {
110
+ return readstat_variable_add_missing_value_range(variable, make_double_value(lo), make_double_value(hi));
111
+ }
112
+
113
+ readstat_error_t readstat_variable_add_missing_double_value(readstat_variable_t *variable, double value) {
114
+ return readstat_variable_add_missing_value_range(variable, make_double_value(value), make_double_value(value));
115
+ }
116
+
117
+ readstat_error_t readstat_variable_add_missing_string_range(readstat_variable_t *variable, const char *lo, const char *hi) {
118
+ return readstat_variable_add_missing_value_range(variable, make_string_value(lo), make_string_value(hi));
119
+ }
120
+
121
+ readstat_error_t readstat_variable_add_missing_string_value(readstat_variable_t *variable, const char *value) {
122
+ return readstat_variable_add_missing_value_range(variable, make_string_value(value), make_string_value(value));
123
+ }