Revision: 76690
          http://sourceforge.net/p/brlcad/code/76690
Author:   starseeker
Date:     2020-08-07 22:47:46 +0000 (Fri, 07 Aug 2020)
Log Message:
-----------
More work on bg_vlist functions

Modified Paths:
--------------
    brlcad/branches/bioh/include/bg/vlist.h
    brlcad/branches/bioh/src/libbg/vlist.cpp

Modified: brlcad/branches/bioh/include/bg/vlist.h
===================================================================
--- brlcad/branches/bioh/include/bg/vlist.h     2020-08-07 20:03:58 UTC (rev 
76689)
+++ brlcad/branches/bioh/include/bg/vlist.h     2020-08-07 22:47:46 UTC (rev 
76690)
@@ -119,16 +119,16 @@
  * size is set via command, it applies to the points/segments defined after 
that
  * command is introduced. */
 
-BG_EXPORT extern size_t 
+BG_EXPORT extern size_t
 bg_vlist_npts(struct bg_vlist *v);
 
 BG_EXPORT extern size_t
 bg_vlist_ncmds(struct bg_vlist *v);
 
-BG_EXPORT extern long
+BG_EXPORT extern int
 bg_vlist_append(struct bg_vlist *v, bg_vlist_cmd_t cmd, point_t *p);
 
-BG_EXPORT extern long
+BG_EXPORT extern int
 bg_vlist_insert(struct bg_vlist *v, size_t i, bg_vlist_cmd_t cmd, point_t *p);
 
 BG_EXPORT extern bg_vlist_cmd_t

Modified: brlcad/branches/bioh/src/libbg/vlist.cpp
===================================================================
--- brlcad/branches/bioh/src/libbg/vlist.cpp    2020-08-07 20:03:58 UTC (rev 
76689)
+++ brlcad/branches/bioh/src/libbg/vlist.cpp    2020-08-07 22:47:46 UTC (rev 
76690)
@@ -86,6 +86,16 @@
 void
 bg_vlist_destroy(struct bg_vlist *v)
 {
+    if (v->i->q) {
+       // If we're using a queue, all of the objects
+       // in this vlist will be available for reuse
+       for (size_t i = 0; i < v->i->v.size(); i++) {
+           vobj &nv = v->i->q->i->objs[v->i->v[i]];
+           VSET(nv.p, 0, 0, 0);
+           nv.cmd = BG_VLIST_NULL;
+           v->i->q->i->free_objs.push(v->i->v[i]);
+       }
+    }
     delete[] v->i;
     BU_PUT(v, struct bg_vlist);
 }
@@ -132,6 +142,64 @@
     return cnt;
 }
 
+int
+bg_vlist_append(struct bg_vlist *v, bg_vlist_cmd_t cmd, point_t *p)
+{
+    if (!v) {
+       return -1;
+    }
+    if (v->i->q) {
+       size_t nobj = v->i->q->i->free_objs.front();
+       v->i->q->i->free_objs.pop();
+       vobj &nv = v->i->q->i->objs[nobj];
+       nv.cmd = cmd;
+       if (p) {
+           VMOVE(nv.p, *p);
+       }
+       v->i->v.push_back(nobj);
+    } else {
+       vobj nv;
+       nv.cmd = cmd;
+       if (p) {
+           VMOVE(nv.p, *p);
+       }
+       v->i->vlocal.push_back(nv);
+       v->i->v.push_back(v->i->vlocal.size() - 1);
+    }
+
+    return 0;
+}
+
+int
+bg_vlist_insert(struct bg_vlist *v, size_t i, bg_vlist_cmd_t cmd, point_t *p)
+{
+    if (!v) {
+       return -1;
+    }
+    if (v->i->q) {
+       size_t nobj = v->i->q->i->free_objs.front();
+       v->i->q->i->free_objs.pop();
+       vobj &nv = v->i->q->i->objs[nobj];
+       nv.cmd = cmd;
+       if (p) {
+           VMOVE(nv.p, *p);
+       }
+       std::vector<size_t>::iterator v_it = v->i->v.begin()+i;
+       v->i->v.insert(v_it, nobj);
+    } else {
+       vobj nv;
+       nv.cmd = cmd;
+       if (p) {
+           VMOVE(nv.p, *p);
+       }
+       v->i->vlocal.push_back(nv);
+       std::vector<size_t>::iterator v_it = v->i->v.begin()+i;
+       v->i->v.insert(v_it, v->i->vlocal.size() - 1);
+    }
+
+    return 0;
+}
+
 bg_vlist_cmd_t
 bg_vlist_get(point_t *op, struct bg_vlist *v, size_t i)
 {
@@ -147,6 +215,27 @@
     return cv.cmd;
 }
 
+
+int
+bg_vlist_set(struct bg_vlist *v, size_t i, point_t *p, bg_vlist_cmd_t cmd)
+{
+    if (i > v->i->v.size() - 1) {
+       return -1;
+    }
+
+    // Actual node info is either in the queue or the local vector
+    vobj &cv = (v->i->q) ? v->i->q->i->objs[v->i->v[i]] : 
v->i->vlocal[v->i->v[i]];
+    if (p) {
+       VMOVE(cv.p, *p);
+    }
+    if (cmd != BG_VLIST_NULL) {
+       cv.cmd = cmd;
+    }
+
+    return 0;
+}
+
+
 size_t
 bg_vlist_find(struct bg_vlist *v, size_t start_ind, bg_vlist_cmd_t cmd, 
point_t *p)
 {

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to