static term_t convert_val(val_converter_t *convert, value_t v) { value_table_t *vtbl; value_kind_t kind; int32_t c; term_t t; vtbl = convert->vtbl; kind = object_kind(vtbl, v); switch (kind) { case BOOLEAN_VALUE: // skip the cache for Boolean values t = convert_bool(vtbl, v); break; case RATIONAL_VALUE: t = convert_cached_term(convert, v); if (t < 0) { t = convert_rational(convert->terms, vtbl, v); convert_cache_map(convert, v, t); } break; case BITVECTOR_VALUE: t = convert_cached_term(convert, v); if (t < 0) { t = convert_bitvector(convert->terms, vtbl, v); convert_cache_map(convert, v, t); } break; case TUPLE_VALUE: t = convert_cached_term(convert, v); if (t < 0) { t = convert_tuple(convert, vtbl_tuple(vtbl, v)); convert_cache_map(convert, v, t); } break; case UNINTERPRETED_VALUE: t = convert_cached_term(convert, v); if (t < 0) { t = convert_unint(convert->terms, vtbl, v); convert_cache_map(convert, v, t); } break; default: c = get_convert_code(kind); assert(c < 0); longjmp(convert->env, c); break; } return t; }
static PyObject* bzpy_mark(PyObject *self, PyObject *args, PyObject *kwargs) { CBZView *view = cbzsv->m_pView; LONGLONG off = LONGLONG_MIN; PyObject *mark = Py_None; static /*const*/ char *kws[] = {"offset", "mark", NULL/*redundant sentinel*/}; if(!PyArg_ParseTupleAndKeywords(args, kwargs, "|LO", kws, &off, &mark)) return NULL; if(off == LONGLONG_MIN) { off = view->m_dwCaret; } CBZDoc *doc = view->GetDocument(); convert_minus_index(off, doc->GetDocSize()); if(mark == Py_None) { // get return convert_bool(doc->CheckMark(off)); } else { // set BOOL target; if(PyObject_IsTrue(mark)) { target = TRUE; } else { target = FALSE; } BOOL org = doc->CheckMark(off); if(org != target) { doc->SetMark(off); // toggle. auto_invalidate(self); } return convert_bool(org); // おまけ; valかPy_Noneもあり } }
/* * Attempt to convert a primitive value v * - return an error code if v is not primitive */ term_t convert_simple_value(term_table_t *terms, value_table_t *vtbl, value_t v) { term_t t; switch (object_kind(vtbl, v)) { case UNKNOWN_VALUE: t = CONVERT_UNKNOWN_VALUE; break; case BOOLEAN_VALUE: t = convert_bool(vtbl, v); break; case RATIONAL_VALUE: t = convert_rational(terms, vtbl, v); break; case BITVECTOR_VALUE: t = convert_bitvector(terms, vtbl, v); break; case TUPLE_VALUE: t = CONVERT_NOT_PRIMITIVE; break; case UNINTERPRETED_VALUE: t = convert_unint(terms, vtbl, v); break; case FUNCTION_VALUE: case UPDATE_VALUE: t = CONVERT_FUNCTION; break; case MAP_VALUE: t = CONVERT_FAILED; break; default: t = CONVERT_INTERNAL_ERROR; assert(false); break; } return t; }
static PyObject* bzpy_autoinvalidate(PyObject *self, PyObject *args) { PyObject *newai = Py_None; if(!PyArg_ParseTuple(args, "|O", &newai)) return NULL; PyObject *ai; ai = convert_bool(get_auto_invalidate(self)); if(newai == Py_None) { // get } else { // set set_auto_invalidate(self, PyObject_IsTrue(newai)); } return ai; }
static PyObject* bzpy_togglemark(PyObject *self, PyObject *args) { CBZView *view = cbzsv->m_pView; LONGLONG off = LONGLONG_MIN; if(!PyArg_ParseTuple(args, "|L", &off)) return NULL; if(off == LONGLONG_MIN) { off = view->m_dwCaret; } CBZDoc *doc = view->GetDocument(); convert_minus_index(off, doc->GetDocSize()); // set BOOL org = doc->CheckMark(off); doc->SetMark(off); // toggle. auto_invalidate(self); return convert_bool(org); // おまけ; valかPy_Noneもあり }
static PyObject* bzpy_filemapping(PyObject *self, PyObject *args) { if(!PyArg_ParseTuple(args, "")) return NULL; return convert_bool(cbzsv->m_pView->GetDocument()->IsFileMapping()); }
IMPLEMENT_HCONVERT_QVARIANT(bool) { return QVariant(convert_bool(val,hr)); }