10 if (!lmmc_std_real_is_finite(lhs) || !lmmc_std_real_is_finite(rhs)) {
13 *out = lhs == rhs ? 1 : 0;
20 if (!lmmc_std_real_is_finite(value)) {
23 *out = lmmc_std_real_hash_bits(value);
29 return set && (set->
size == 0 || set->
data);
36 if (!lmmc_std_real_array_is_finite(set->
data, set->
size)) {
46 for (
size_t i = 0; i < set->
size; ++i) {
47 if (lmmc_std_num_set_key(set->
data[i]) == key) {
return 1; }
61 if (!lmmc_safe_mul_size(capacity,
sizeof(
lmmc_real_t), &bytes)) {
74 if (!set || !lmmc_std_real_is_finite(value)) {
77 if (lmmc_std_num_set_contains_value(set, value)) {
return LMMC_STATUS_OK; }
79 set->
data[set->
size++] = lmmc_std_num_set_key(value);
89 if (!lmmc_std_real_array_is_finite(values, count)) {
92 status = lmmc_std_num_set_alloc(count, out);
94 for (
size_t i = 0; i < count; ++i) {
95 status = lmmc_std_num_set_append_unique(out, values[i]);
121 if (!lmmc_std_real_is_finite(value)) {
124 status = lmmc_std_num_set_require_finite(set);
126 *out = lmmc_std_num_set_contains_value(set, value);
136 status = lmmc_std_num_set_require_finite(lhs);
138 status = lmmc_std_num_set_require_finite(rhs);
140 for (
size_t i = 0; i < lhs->
size; ++i) {
141 if (!lmmc_std_num_set_contains_value(rhs, lhs->
data[i])) {
157 if (!out || (
const void*)out == (
const void*)lhs ||
158 (
const void*)out == (
const void*)rhs || !capacity) {
161 status = lmmc_std_num_set_require_finite(lhs);
163 status = lmmc_std_num_set_require_finite(rhs);
165 if (lhs->
size > ((
size_t)-1) - rhs->
size) {
169 return lmmc_std_num_set_alloc(*capacity, out);
177 lmmc_status_t status = lmmc_std_num_set_binary_alloc(lhs, rhs, out,
181 for (
size_t i = 0; i < lhs->
size; ++i) {
182 status = lmmc_std_num_set_append_unique(out, lhs->
data[i]);
187 for (
size_t i = 0; i < rhs->
size; ++i) {
188 status = lmmc_std_num_set_append_unique(out, rhs->
data[i]);
204 lmmc_status_t status = lmmc_std_num_set_binary_alloc(lhs, rhs, out,
208 for (
size_t i = 0; i < lhs->
size; ++i) {
209 if (lmmc_std_num_set_contains_value(rhs, lhs->
data[i])) {
210 status = lmmc_std_num_set_append_unique(out, lhs->
data[i]);
225 lmmc_status_t status = lmmc_std_num_set_binary_alloc(lhs, rhs, out,
229 for (
size_t i = 0; i < lhs->
size; ++i) {
230 if (!lmmc_std_num_set_contains_value(rhs, lhs->
data[i])) {
231 status = lmmc_std_num_set_append_unique(out, lhs->
data[i]);
247 lmmc_status_t status = lmmc_std_num_set_binary_alloc(lhs, rhs, out,
251 for (
size_t i = 0; i < lhs->
size; ++i) {
252 if (!lmmc_std_num_set_contains_value(rhs, lhs->
data[i])) {
253 status = lmmc_std_num_set_append_unique(out, lhs->
data[i]);
259 for (
size_t i = 0; i < rhs->
size; ++i) {
260 if (!lmmc_std_num_set_contains_value(lhs, rhs->
data[i])) {
261 status = lmmc_std_num_set_append_unique(out, rhs->
data[i]);
double lmmc_real_t
Public and internal LMMC real type.
void * lmmc_memory_alloc(size_t size)
void lmmc_memory_free(void *pointer)
Private recoverable allocator for persistent LMMC ownership.
lmmc_status_t
LMMC 库统一返回的状态码.
@ LMMC_STATUS_NUMERICAL_FAILURE
@ LMMC_STATUS_ALLOCATION_FAILED
@ LMMC_STATUS_INVALID_ARGUMENT
lmmc_status_t lmmc_std_num_set_symmetric_difference(const lmmc_std_num_set_t *lhs, const lmmc_std_num_set_t *rhs, lmmc_std_num_set_t *out)
lmmc_status_t lmmc_std_num_set_make(const lmmc_real_t *values, size_t count, lmmc_std_num_set_t *out)
构造去重的有限数值集合。
lmmc_status_t lmmc_std_num_hash(lmmc_real_t value, uint64_t *out)
为 LSR 规范的表键计算有限数值哈希。
lmmc_status_t lmmc_std_num_set_difference(const lmmc_std_num_set_t *lhs, const lmmc_std_num_set_t *rhs, lmmc_std_num_set_t *out)
lmmc_status_t lmmc_std_num_set_contains(const lmmc_std_num_set_t *set, lmmc_real_t value, int *out)
lmmc_status_t lmmc_std_num_equal(lmmc_real_t lhs, lmmc_real_t rhs, int *out)
按 LSR 规范的结构键语义比较有限数值。
lmmc_status_t lmmc_std_num_set_subset(const lmmc_std_num_set_t *lhs, const lmmc_std_num_set_t *rhs, int *out)
void lmmc_std_num_set_destroy(lmmc_std_num_set_t *set)
lmmc_status_t lmmc_std_num_set_intersection(const lmmc_std_num_set_t *lhs, const lmmc_std_num_set_t *rhs, lmmc_std_num_set_t *out)
lmmc_status_t lmmc_std_num_set_union(const lmmc_std_num_set_t *lhs, const lmmc_std_num_set_t *rhs, lmmc_std_num_set_t *out)