static bool emit_tagged_scalar(const node *scalar, yaml_char_t *tag, yaml_scalar_style_t style, int implicit, void *context) { trace_string("emitting scalar \"%s\"", scalar_value(scalar), node_size(scalar)); yaml_emitter_t *emitter = (yaml_emitter_t *)context; yaml_event_t event; yaml_scalar_event_initialize(&event, NULL, tag, scalar_value(scalar), (int)node_size(scalar), implicit, implicit, style); if (!yaml_emitter_emit(emitter, &event)) return false; return true; }
/* * Retrieving buffers for scalars */ int gentype_getbuffer(PyObject *self, Py_buffer *view, int flags) { _buffer_info_t *info = NULL; PyArray_Descr *descr = NULL; int elsize; if (flags & PyBUF_WRITABLE) { PyErr_SetString(PyExc_BufferError, "scalar buffer is readonly"); goto fail; } /* Fill in information */ info = _buffer_get_info(self); if (info == NULL) { goto fail; } view->ndim = info->ndim; view->shape = info->shape; view->strides = info->strides; if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT) { view->format = info->format; } else { view->format = NULL; } descr = PyArray_DescrFromScalar(self); view->buf = (void *)scalar_value(self, descr); elsize = descr->elsize; #ifndef Py_UNICODE_WIDE if (descr->type_num == NPY_UNICODE) { elsize >>= 1; }
END_TEST START_TEST (null_scalar) { reset_errno(); assert_null(scalar_value(NULL)); assert_errno(EINVAL); }
TEST(Sial,persistent_scalars) { std::string job("persistent_scalars"); double x = 3.456; double y = -0.1; { init_setup(job.c_str()); set_scalar("x", x); set_scalar("y", y); std::string tmp1 = job + "_1.siox"; const char* nm1 = tmp1.c_str(); add_sial_program(nm1); std::string tmp2 = job + "_2.siox"; const char* nm2 = tmp2.c_str(); add_sial_program(nm2); finalize_setup(); } std::stringstream output; TestControllerParallel controller(job, true, VERBOSE_TEST, "", output); controller.initSipTables(); controller.run(); if (attr->is_worker()) { ASSERT_DOUBLE_EQ(y, scalar_value("y")); ASSERT_DOUBLE_EQ(x, scalar_value("z")); ASSERT_DOUBLE_EQ(99.99, scalar_value("zz")); std::cout << "wpam:" << std::endl << *controller.wpam_ << std::endl << "%%%%%%%%%%%%" << std::endl; } //Now do the second program //get siox name from setup, load and print the sip tables controller.initSipTables(); controller.run(); if (attr->is_worker()) { ASSERT_DOUBLE_EQ(x + 1, scalar_value("x")); ASSERT_DOUBLE_EQ(y, scalar_value("y")); ASSERT_DOUBLE_EQ(6, scalar_value("e")); } }
bool mapping_iterate(const node *mapping, mapping_iterator iterator, void *context) { PRECOND_NONNULL_ELSE_FALSE(mapping, iterator); PRECOND_ELSE_FALSE(MAPPING == node_kind(mapping)); context_adapter adapter = {.iterator.mapping=iterator, .context=context}; return hashtable_iterate(mapping->content.mapping, mapping_iterator_adpater, &adapter); } bool node_equals(const node *one, const node *two) { if(one == two) { return true; } if((NULL == one && NULL != two) || (NULL != one && NULL == two)) { return false; } bool result = node_kind(one) == node_kind(two) && tag_equals(node_name(one), node_name(two)) && node_size(one) == node_size(two); if(!result) { return result; } switch(node_kind(one)) { case DOCUMENT: result &= node_equals(document_root(one), document_root(two)); break; case SCALAR: result &= scalar_equals(one, two); break; case SEQUENCE: result &= sequence_equals(one, two); break; case MAPPING: result &= mapping_equals(one, two); break; case ALIAS: result &= node_equals(alias_target(one), alias_target(two)); break; } return result; } static bool scalar_equals(const node *one, const node *two) { size_t n1 = node_size(one); size_t n2 = node_size(two); if(n1 != n2) { return false; } return memcmp(scalar_value(one), scalar_value(two), n1) == 0; }
bool scalar_boolean_is_false(const node *scalar) { return 0 == memcmp("false", scalar_value(scalar), 5); }
bool scalar_boolean_is_true(const node *scalar) { return 0 == memcmp("true", scalar_value(scalar), 4); }
static bool emit_json_raw_scalar(const Scalar *each) { return 1 == fwrite(scalar_value(each), node_size(each), 1, stdout); }
bool emit_raw_scalar(const node *each) { return fwrite(scalar_value(each), node_size(each), 1, stdout); }