igraph_integer_t d(igraph_t *graph, igraph_integer_t v) { igraph_vector_t res; igraph_vs_t vs; igraph_vector_init(&res, 1); igraph_vs_1(&vs, v); igraph_degree(graph, &res, vs, IGRAPH_ALL, IGRAPH_LOOPS); igraph_integer_t d_v = VECTOR(res)[0]; igraph_vs_destroy(&vs); igraph_vector_destroy(&res); return d_v; }
/* * Converts a Java VertexSet to an igraph_vs_t * @return: zero if everything went fine, 1 if a null pointer was passed */ int Java_net_sf_igraph_VertexSet_to_igraph_vs(JNIEnv *env, jobject jobj, igraph_vs_t *result) { jint typeHint; jobject idArray; if (jobj == 0) { IGRAPH_CHECK(igraph_vs_all(result)); return IGRAPH_SUCCESS; } typeHint = (*env)->CallIntMethod(env, jobj, net_sf_igraph_VertexSet_getTypeHint_mid); if (typeHint != 1 && typeHint != 2) { IGRAPH_CHECK(igraph_vs_all(result)); return IGRAPH_SUCCESS; } idArray = (*env)->CallObjectMethod(env, jobj, net_sf_igraph_VertexSet_getIdArray_mid); if ((*env)->ExceptionCheck(env)) { return IGRAPH_EINVAL; } if (typeHint == 1) { /* Single vertex */ jlong id[1]; (*env)->GetLongArrayRegion(env, idArray, 0, 1, id); IGRAPH_CHECK(igraph_vs_1(result, (igraph_integer_t)id[0])); } else if (typeHint == 2) { /* List of vertices */ jlong* ids; igraph_vector_t vec; long i, n; ids = (*env)->GetLongArrayElements(env, idArray, 0); n = (*env)->GetArrayLength(env, idArray); IGRAPH_VECTOR_INIT_FINALLY(&vec, n); for (i = 0; i < n; i++) VECTOR(vec)[i] = ids[i]; IGRAPH_CHECK(igraph_vs_vector_copy(result, &vec)); igraph_vector_destroy(&vec); IGRAPH_FINALLY_CLEAN(1); (*env)->ReleaseLongArrayElements(env, idArray, ids, JNI_ABORT); } (*env)->DeleteLocalRef(env, idArray); return IGRAPH_SUCCESS; }
/** * \ingroup python_interface_vertexseq * \brief Initialize a new vertex sequence object for a given graph * \return the initialized PyObject */ int igraphmodule_VertexSeq_init(igraphmodule_VertexSeqObject *self, PyObject *args, PyObject *kwds) { static char *kwlist[] = { "graph", "vertices", NULL }; PyObject *g, *vsobj=Py_None; igraph_vs_t vs; if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|O", kwlist, &igraphmodule_GraphType, &g, &vsobj)) return -1; if (vsobj == Py_None) { /* If vs is None, we are selecting all the vertices */ igraph_vs_all(&vs); } else if (PyInt_Check(vsobj)) { /* We selected a single vertex */ long int idx = PyInt_AsLong(vsobj); if (idx < 0 || idx >= igraph_vcount(&((igraphmodule_GraphObject*)g)->g)) { PyErr_SetString(PyExc_ValueError, "vertex index out of range"); return -1; } igraph_vs_1(&vs, (igraph_integer_t)idx); } else { igraph_vector_t v; igraph_integer_t n = igraph_vcount(&((igraphmodule_GraphObject*)g)->g); if (igraphmodule_PyObject_to_vector_t(vsobj, &v, 1)) return -1; if (!igraph_vector_isininterval(&v, 0, n-1)) { igraph_vector_destroy(&v); PyErr_SetString(PyExc_ValueError, "vertex index out of range"); return -1; } if (igraph_vs_vector_copy(&vs, &v)) { igraphmodule_handle_igraph_error(); igraph_vector_destroy(&v); return -1; } igraph_vector_destroy(&v); } self->vs = vs; Py_INCREF(g); self->gref = (igraphmodule_GraphObject*)g; return 0; }