return self;
}
-void
+P2trEdge*
p2tr_edge_ref (P2trEdge *self)
{
++self->refcount;
+ return self;
}
void
p2tr_edge_get_mesh (P2trEdge *self)
{
if (self->end != NULL)
- return self->end->mesh;
+ return p2tr_point_get_mesh (self->end);
else
return NULL;
}
P2trPoint *end,
gboolean constrained);
-void p2tr_edge_ref (P2trEdge *self);
+P2trEdge* p2tr_edge_ref (P2trEdge *self);
void p2tr_edge_unref (P2trEdge *self);
gdouble p2tr_edge_angle_between (P2trEdge *e1,
P2trEdge *e2);
-#endif
\ No newline at end of file
+#endif
p2tr_mesh_free (self);
}
-void
+P2trMesh*
p2tr_mesh_ref (P2trMesh *self)
{
++self->refcount;
+ return self;
}
P2trTriangle*
p2tr_hash_set_iter_init (&iter, self->triangles);
while (p2tr_hash_set_iter_next (&iter, (gpointer*)&result))
if (p2tr_triangle_contains_point2 (result, pt, u, v) != P2TR_INTRIANGLE_OUT)
- return result;
+ return p2tr_triangle_ref (result);
return NULL;
}
p2tr_hash_set_free (checked_tris);
g_queue_clear (&to_check);
+ if (result != NULL)
+ p2tr_triangle_ref (result);
+
return result;
}
void p2tr_mesh_unref (P2trMesh *mesh);
-void p2tr_mesh_ref (P2trMesh *mesh);
+P2trMesh* p2tr_mesh_ref (P2trMesh *mesh);
P2trTriangle* p2tr_mesh_find_point (P2trMesh *self,
const P2trVector2 *pt);
if (result == NULL)
p2tr_exception_programmatic ("Tried to get an edge that doesn't exist!");
else
- return result;
+ return p2tr_edge_ref (result);
}
void
P2trEdge *e)
{
GList *node;
+ P2trEdge *result;
if (P2TR_EDGE_START(e) != self)
p2tr_exception_programmatic ("Not an edge of this point!");
p2tr_exception_programmatic ("Could not find the CCW sibling edge"
"because the edge is not present in the outgoing-edges list!");
- return (P2trEdge*) g_list_cyclic_next (self->outgoing_edges, node);
+ result = (P2trEdge*) g_list_cyclic_next (self->outgoing_edges, node);
+ return p2tr_edge_ref (result);
}
P2trEdge*
P2trEdge *e)
{
GList *node;
+ P2trEdge *result;
if (P2TR_EDGE_START(e) != self)
p2tr_exception_programmatic ("Not an edge of this point!");
p2tr_exception_programmatic ("Could not find the CW sibling edge"
"because the edge is not present in the outgoing-edges list!");
- return (P2trEdge*) g_list_cyclic_prev (self->outgoing_edges, node);
+ result = (P2trEdge*) g_list_cyclic_prev (self->outgoing_edges, node);
+ return p2tr_edge_ref (result);
}
gboolean
return FALSE;
}
-void
+/**
+ * Increase the reference count of the given input point
+ * @param self - The point to ref
+ * @return The point given
+ */
+P2trPoint*
p2tr_point_ref (P2trPoint *self)
{
++self->refcount;
+ return self;
}
void
P2trMesh*
p2tr_point_get_mesh (P2trPoint *self)
{
- return self->mesh;
-}
\ No newline at end of file
+ if (self->mesh)
+ return p2tr_mesh_ref (self->mesh);
+ else
+ return NULL;
+}
P2trPoint* p2tr_point_new2 (gdouble x, gdouble y);
-void p2tr_point_ref (P2trPoint *self);
+P2trPoint* p2tr_point_ref (P2trPoint *self);
void p2tr_point_unref (P2trPoint *self);
P2trMesh* p2tr_point_get_mesh (P2trPoint *self);
-#endif
\ No newline at end of file
+#endif
return self;
}
-void
+P2trTriangle*
p2tr_triangle_ref (P2trTriangle *self)
{
++self->refcount;
+ return self;
}
void
P2trEdge *e)
{
if (self->edges[0] == e || self->edges[0]->mirror == e)
- return self->edges[1]->end;
+ return p2tr_point_ref (self->edges[1]->end);
if (self->edges[1] == e || self->edges[1]->mirror == e)
- return self->edges[2]->end;
+ return p2tr_point_ref (self->edges[2]->end);
if (self->edges[2] == e || self->edges[2]->mirror == e)
- return self->edges[0]->end;
+ return p2tr_point_ref (self->edges[0]->end);
p2tr_exception_programmatic ("The edge is not in the triangle!");
}
P2trPoint *p)
{
if (self->edges[0]->end == p)
- return self->edges[2];
+ return p2tr_edge_ref (self->edges[2]);
if (self->edges[1]->end == p)
- return self->edges[0];
+ return p2tr_edge_ref (self->edges[0]);
if (self->edges[2]->end == p)
- return self->edges[1];
+ return p2tr_edge_ref (self->edges[1]);
p2tr_exception_programmatic ("The point is not in the triangle!");
}
P2trEdge *BC,
P2trEdge *CA);
-void p2tr_triangle_ref (P2trTriangle *self);
+P2trTriangle* p2tr_triangle_ref (P2trTriangle *self);
void p2tr_triangle_unref (P2trTriangle *self);