fix linking error
diff --git a/src/delaunator.cpp b/src/delaunator.cpp
index a42db06..c670efa 100644
--- a/src/delaunator.cpp
+++ b/src/delaunator.cpp
@@ -259,15 +259,14 @@
     hash_edge(e);
     m_hull[e].t = 2;
 
-    const size_t max_triangles = 2 * n - 5;
+    const long int max_triangles = 2 * n - 5;
     triangles.reserve(max_triangles * 3);
     halfedges.reserve(max_triangles * 3);
     add_triangle(i0, i1, i2, -1, -1, -1);
-
     double xp = NAN;
     double yp = NAN;
-    for (size_t k = 0; k < n; k++) {
-        const size_t i = ids[k];
+    for (long int k = 0; k < n; k++) {
+        const long int i = ids[k];
         const double x = coords[2 * i];
         const double y = coords[2 * i + 1];
         if (x == xp && y == yp) continue;
@@ -279,8 +278,8 @@
                 (x == i2x && y == i2y)
         ) continue;
 
-        const size_t start_key = hash_key(x, y);
-        size_t key = start_key;
+        const long int start_key = hash_key(x, y);
+        long int key = start_key;
         long int start = -1;
         do {
             start = m_hash[key];
@@ -299,10 +298,6 @@
                 m_hull[m_hull[e].next].x, m_hull[m_hull[e].next].y
             ) >= 0
         ) {
-            if (m_hull[e].next == -1) {
-                cout << e << endl;
-            }
-
             e = m_hull[e].next;
 
             if (e == start) {
@@ -313,7 +308,7 @@
         const bool walk_back = e == start;
 
         // add the first triangle from the point
-        size_t t = add_triangle(
+        long int t = add_triangle(
             m_hull[e].i,
             i,
             m_hull[m_hull[e].next].i,
@@ -325,11 +320,9 @@
 
         // recursively flip triangles from the point until they satisfy the Delaunay condition
         m_hull[e].t = legalize(t + 2);
-
         if (m_hull[m_hull[m_hull[e].prev].prev].t == halfedges[t + 1]) {
             m_hull[m_hull[m_hull[e].prev].prev].t = t + 2;
         }
-
         // walk forward through the hull, adding more triangles and flipping recursively
         long int q = m_hull[e].next;
         while(
@@ -348,7 +341,6 @@
             remove_node(q);
             q = m_hull[q].next;
         }
-
         if (walk_back) {
             // walk backward from the other side, adding more triangles and flipping
             q = m_hull[e].prev;
@@ -370,22 +362,21 @@
                 q = m_hull[q].prev;
             }
         }
-
         hash_edge(e);
         hash_edge(m_hull[e].prev);
     }
 
 };
 
-size_t Delaunator::remove_node(size_t node) {
+long int Delaunator::remove_node(long int node) {
     m_hull[m_hull[node].prev].next = m_hull[node].next;
     m_hull[m_hull[node].next].prev = m_hull[node].prev;
     m_hull[node].removed = true;
     return m_hull[node].prev;
 }
 
-size_t Delaunator::legalize(size_t a) {
-    size_t halfedges_size = halfedges.size();
+long int Delaunator::legalize(long int a) {
+    long int halfedges_size = halfedges.size();
     const long int b = halfedges[a];
 
     const long int a0 = a - a % 3;
@@ -422,8 +413,8 @@
     return ar;
 }
 
-size_t Delaunator::insert_node(size_t i, size_t prev) {
-    const size_t node = insert_node(i);
+long int Delaunator::insert_node(long int i, long int prev) {
+    const long int node = insert_node(i);
     m_hull[node].next = m_hull[prev].next;
     m_hull[node].prev = prev;
     m_hull[m_hull[node].next].prev = node;
@@ -431,7 +422,7 @@
     return node;
 };
 
-size_t Delaunator::insert_node(size_t i) {
+long int Delaunator::insert_node(long int i) {
     long int node = m_hull.size();
     DelaunatorPoint p = {
         .i = i,
@@ -445,7 +436,7 @@
     return node;
 }
 
-size_t Delaunator::hash_key(double x, double y) {
+long int Delaunator::hash_key(double x, double y) {
     const double dx = x - m_center_x;
     const double dy = y - m_center_y;
     // use pseudo-angle: a measure that monotonically increases
@@ -454,15 +445,15 @@
     return floor((2 + (dy < 0 ? -p : p)) / 4 * m_hash_size);
 }
 
-void Delaunator::hash_edge(size_t e){
+void Delaunator::hash_edge(long int e){
     m_hash[hash_key(m_hull[e].x, m_hull[e].y)] = e;
 }
 
-size_t Delaunator::add_triangle(
-    size_t i0, size_t i1, size_t i2,
-    size_t a, size_t b, size_t c
+long int Delaunator::add_triangle(
+    long int i0, long int i1, long int i2,
+    long int a, long int b, long int c
 ) {
-    const size_t t = triangles.size();
+    const long int t = triangles.size();
     triangles.push_back(i0);
     triangles.push_back(i1);
     triangles.push_back(i2);
@@ -472,18 +463,20 @@
     return t;
 }
 
-void Delaunator::link(size_t a, size_t b) {
-    size_t s  = halfedges.size();
+void Delaunator::link(long int a, long int b) {
+    long int s  = halfedges.size();
     if (a == s) {
-        halfedges.push_back(a);
+        halfedges.push_back(b);
     } else if (a < s) {
         halfedges[a] = b;
     } else {
         throw runtime_error("Cannot link edge");
     }
-
-    if (b > -1) {
-        if (b < halfedges.size()) {
+    if (b != -1) {
+        long int s  = halfedges.size();
+        if (b == s) {
+            halfedges.push_back(a);
+        } else if (b < s) {
             halfedges[b] = a;
         }  else {
             throw runtime_error("Cannot link edge");
diff --git a/src/delaunator.h b/src/delaunator.h
index ac0be91..9b314a0 100644
--- a/src/delaunator.h
+++ b/src/delaunator.h
@@ -5,7 +5,7 @@
 #include <memory>
 
 struct DelaunatorPoint {
-    size_t i;
+    long int i;
     double x;
     double y;
     long int t;
@@ -20,22 +20,22 @@
         std::vector<unsigned long int> triangles;
         std::vector<long int> halfedges;
         std::vector<double> coords;
-        // size_t triangles_len;
+        // long int triangles_len;
     private:
         double m_center_x;
         double m_center_y;
-        size_t m_hash_size;
+        long int m_hash_size;
         std::vector<int> m_hash;
         std::vector<DelaunatorPoint> m_hull;
-        size_t insert_node(size_t i);
-        size_t insert_node(size_t i, size_t prev);
-        size_t hash_key(double x, double y);
-        void hash_edge(size_t e);
-        size_t add_triangle(
-            size_t i0, size_t i1, size_t i2,
-            size_t a, size_t b, size_t c
+        long int insert_node(long int i);
+        long int insert_node(long int i, long int prev);
+        long int hash_key(double x, double y);
+        void hash_edge(long int e);
+        long int add_triangle(
+            long int i0, long int i1, long int i2,
+            long int a, long int b, long int c
         );
-        void link(size_t a, size_t b);
-        size_t legalize(size_t a);
-        size_t remove_node(size_t node);
+        void link(long int a, long int b);
+        long int legalize(long int a);
+        long int remove_node(long int node);
 };