コード例 #1
0
ファイル: edgeseqobject.c プロジェクト: bravery/python-igraph
/**
 * \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(&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;
}
コード例 #2
0
ファイル: lboard.c プロジェクト: Themaister/RetroArch
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;
}
コード例 #3
0
ファイル: edgeobject.c プロジェクト: CansenJIANG/igraph
/**
 * \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;
}
コード例 #4
0
/**
 * \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;
}
コード例 #5
0
ファイル: lboard.c プロジェクト: Themaister/RetroArch
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;
}
コード例 #6
0
ファイル: edgeseqobject.c プロジェクト: bravery/python-igraph
/**
 * \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;
}
コード例 #7
0
/**
 * \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;
}
コード例 #8
0
ファイル: condset.c プロジェクト: DSkywalk/RetroArch
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;
}
コード例 #9
0
ファイル: lboard.c プロジェクト: Themaister/RetroArch
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;
}