/** * \ingroup python_interface_edgeseq * \brief Copies an edge sequence object * \return the copied PyObject */ igraphmodule_EdgeSeqObject* igraphmodule_EdgeSeq_copy(igraphmodule_EdgeSeqObject* o) { igraphmodule_EdgeSeqObject *copy; copy=(igraphmodule_EdgeSeqObject*)PyType_GenericNew(Py_TYPE(o), 0, 0); if (copy == NULL) return NULL; if (igraph_es_type(&o->es) == IGRAPH_ES_VECTOR) { igraph_vector_t v; if (igraph_vector_copy(&v, o->es.data.vecptr)) { igraphmodule_handle_igraph_error(); return 0; } if (igraph_es_vector_copy(©->es, &v)) { igraphmodule_handle_igraph_error(); igraph_vector_destroy(&v); return 0; } igraph_vector_destroy(&v); } else { copy->es = o->es; } copy->gref = o->gref; if (o->gref) Py_INCREF(o->gref); RC_ALLOC("EdgeSeq(copy)", copy); return copy; }
int rc_lboard_size(const char* memaddr) { rc_lboard_t* self; rc_parse_state_t parse; rc_init_parse_state(&parse, 0, 0, 0); self = RC_ALLOC(rc_lboard_t, &parse); rc_parse_lboard_internal(self, memaddr, &parse); rc_destroy_parse_state(&parse); return parse.offset; }
/** * \ingroup python_interface_edge * \brief Allocates a new Python edge object * \param gref weak reference of the \c igraph.Graph being referenced by the edge * \param idx the index of the edge * * \warning \c igraph references its edges by indices, so if * you delete some edges from the graph, the edge indices will * change. Since the \c igraph.Edge objects do not follow these * changes, your existing edge objects will point to elsewhere * (or they might even get invalidated). */ PyObject* igraphmodule_Edge_New(igraphmodule_GraphObject *gref, igraph_integer_t idx) { igraphmodule_EdgeObject* self; self=PyObject_New(igraphmodule_EdgeObject, &igraphmodule_EdgeType); if (self) { RC_ALLOC("Edge", self); Py_INCREF(gref); self->gref=gref; self->idx=idx; } return (PyObject*)self; }
/** * \ingroup python_interface_vertex * \brief Allocates a new Python vertex object * \param gref the \c igraph.Graph being referenced by the vertex * \param idx the index of the vertex * * \warning \c igraph references its vertices by indices, so if * you delete some vertices from the graph, the vertex indices will * change. Since the \c igraph.Vertex objects do not follow these * changes, your existing vertex objects will point to elsewhere * (or they might even get invalidated). */ PyObject* igraphmodule_Vertex_New(igraphmodule_GraphObject *gref, long idx) { igraphmodule_VertexObject* self; self=PyObject_New(igraphmodule_VertexObject, &igraphmodule_VertexType); if (self) { RC_ALLOC("Vertex", self); Py_INCREF(gref); self->gref=gref; self->idx=idx; } return (PyObject*)self; }
rc_lboard_t* rc_parse_lboard(void* buffer, const char* memaddr, lua_State* L, int funcs_ndx) { rc_lboard_t* self; rc_parse_state_t parse; rc_init_parse_state(&parse, buffer, L, funcs_ndx); self = RC_ALLOC(rc_lboard_t, &parse); rc_init_parse_state_memrefs(&parse, &self->memrefs); rc_parse_lboard_internal(self, memaddr, &parse); rc_destroy_parse_state(&parse); return parse.offset >= 0 ? self : 0; }
/** * \ingroup python_interface_edgeseq * \brief Allocate a new edge sequence object for a given graph * \param g the graph object being referenced * \return the allocated PyObject */ PyObject* igraphmodule_EdgeSeq_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds) { igraphmodule_EdgeSeqObject* o; o=(igraphmodule_EdgeSeqObject*)PyType_GenericNew(subtype, args, kwds); if (o == NULL) return NULL; igraph_es_all(&o->es, IGRAPH_EDGEORDER_ID); o->gref=0; o->weakreflist=0; RC_ALLOC("EdgeSeq", o); return (PyObject*)o; }
/** * \ingroup python_interface_vertexseq * \brief Allocate a new vertex sequence object for a given graph * \return the allocated PyObject */ PyObject* igraphmodule_VertexSeq_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds) { igraphmodule_VertexSeqObject *o; o=(igraphmodule_VertexSeqObject*)PyType_GenericNew(subtype, args, kwds); if (o == NULL) return NULL; igraph_vs_all(&o->vs); o->gref=0; o->weakreflist=0; RC_ALLOC("VertexSeq", o); return (PyObject*)o; }
rc_condset_t* rc_parse_condset(int* ret, void* buffer, rc_scratch_t* scratch, const char** memaddr, lua_State* L, int funcs_ndx) { rc_condset_t* self; rc_condition_t** next; int in_pause; self = RC_ALLOC(rc_condset_t, buffer, ret, scratch); self->has_pause = 0; next = &self->conditions; for (;;) { *next = rc_parse_condition(ret, buffer, scratch, memaddr, L, funcs_ndx); if (*ret < 0) { return 0; } self->has_pause |= (*next)->type == RC_CONDITION_PAUSE_IF; next = &(*next)->next; if (**memaddr != '_') { break; } (*memaddr)++; } *next = 0; if (buffer != 0) { in_pause = 0; rc_update_condition_pause(self->conditions, &in_pause); } return self; }
void rc_parse_lboard_internal(rc_lboard_t* self, const char* memaddr, rc_parse_state_t* parse) { int found; self->progress = 0; found = 0; for (;;) { if ((memaddr[0] == 's' || memaddr[0] == 'S') && (memaddr[1] == 't' || memaddr[1] == 'T') && (memaddr[2] == 'a' || memaddr[2] == 'A') && memaddr[3] == ':') { if ((found & RC_LBOARD_START) != 0) { parse->offset = RC_DUPLICATED_START; return; } found |= RC_LBOARD_START; memaddr += 4; rc_parse_trigger_internal(&self->start, &memaddr, parse); self->start.memrefs = 0; if (parse->offset < 0) { return; } } else if ((memaddr[0] == 'c' || memaddr[0] == 'C') && (memaddr[1] == 'a' || memaddr[1] == 'A') && (memaddr[2] == 'n' || memaddr[2] == 'N') && memaddr[3] == ':') { if ((found & RC_LBOARD_CANCEL) != 0) { parse->offset = RC_DUPLICATED_CANCEL; return; } found |= RC_LBOARD_CANCEL; memaddr += 4; rc_parse_trigger_internal(&self->cancel, &memaddr, parse); self->cancel.memrefs = 0; if (parse->offset < 0) { return; } } else if ((memaddr[0] == 's' || memaddr[0] == 'S') && (memaddr[1] == 'u' || memaddr[1] == 'U') && (memaddr[2] == 'b' || memaddr[2] == 'B') && memaddr[3] == ':') { if ((found & RC_LBOARD_SUBMIT) != 0) { parse->offset = RC_DUPLICATED_SUBMIT; return; } found |= RC_LBOARD_SUBMIT; memaddr += 4; rc_parse_trigger_internal(&self->submit, &memaddr, parse); self->submit.memrefs = 0; if (parse->offset < 0) { return; } } else if ((memaddr[0] == 'v' || memaddr[0] == 'V') && (memaddr[1] == 'a' || memaddr[1] == 'A') && (memaddr[2] == 'l' || memaddr[2] == 'L') && memaddr[3] == ':') { if ((found & RC_LBOARD_VALUE) != 0) { parse->offset = RC_DUPLICATED_VALUE; return; } found |= RC_LBOARD_VALUE; memaddr += 4; rc_parse_value_internal(&self->value, &memaddr, parse); self->value.memrefs = 0; if (parse->offset < 0) { return; } } else if ((memaddr[0] == 'p' || memaddr[0] == 'P') && (memaddr[1] == 'r' || memaddr[1] == 'R') && (memaddr[2] == 'o' || memaddr[2] == 'O') && memaddr[3] == ':') { if ((found & RC_LBOARD_PROGRESS) != 0) { parse->offset = RC_DUPLICATED_PROGRESS; return; } found |= RC_LBOARD_PROGRESS; memaddr += 4; self->progress = RC_ALLOC(rc_value_t, parse); rc_parse_value_internal(self->progress, &memaddr, parse); self->progress->memrefs = 0; if (parse->offset < 0) { return; } } else { parse->offset = RC_INVALID_LBOARD_FIELD; return; } if (memaddr[0] != ':' || memaddr[1] != ':') { break; } memaddr += 2; } if ((found & RC_LBOARD_COMPLETE) != RC_LBOARD_COMPLETE) { if ((found & RC_LBOARD_START) == 0) { parse->offset = RC_MISSING_START; } else if ((found & RC_LBOARD_CANCEL) == 0) { parse->offset = RC_MISSING_CANCEL; } else if ((found & RC_LBOARD_SUBMIT) == 0) { parse->offset = RC_MISSING_SUBMIT; } else if ((found & RC_LBOARD_VALUE) == 0) { parse->offset = RC_MISSING_VALUE; } return; } self->started = self->submitted = 0; }