Revision: 65509
http://sourceforge.net/p/brlcad/code/65509
Author: ejno
Date: 2015-07-01 14:13:59 +0000 (Wed, 01 Jul 2015)
Log Message:
-----------
original code used a C99 flexible array member; temporarily replace with struct
hack for testing
Modified Paths:
--------------
brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/mmbinsort.c
Modified:
brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/mmbinsort.c
===================================================================
--- brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/mmbinsort.c
2015-07-01 13:57:04 UTC (rev 65508)
+++ brlcad/trunk/src/librt/primitives/bot/gct_decimation/auxiliary/mmbinsort.c
2015-07-01 14:13:59 UTC (rev 65509)
@@ -43,6 +43,7 @@
#include "mmbinsort.h"
+
#if defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) &&
!defined(__clang__)
# pragma GCC diagnostic ignored "-Wunused-function"
#endif
@@ -50,6 +51,7 @@
# pragma clang diagnostic ignored "-Wunused-function"
#endif
+
/*
#define MM_BINSORT_INSERTION_SORT
*/
@@ -74,6 +76,7 @@
typedef struct {
mmbsf groupbase, groupmax, bucketrange;
int bucketmax;
+ mmBinSortBucket bucket[1];
} mmBinSortGroup;
@@ -94,6 +97,7 @@
mmBlockHead bucketblock;
mmBlockHead groupblock;
+ /* Top-level group, *MUST* be at end of struct due to bucket[] zero-length
array */
mmBinSortGroup root;
} mmBinSortHead;
@@ -142,7 +146,7 @@
group->groupmax = rootmax;
group->bucketrange = (rootmax - rootmin) / (double)rootbucketcount;
group->bucketmax = rootbucketcount - 1;
- bucket = (mmBinSortBucket *)(group + 1);
+ bucket = group->bucket;
for (bucketindex = 0 ; bucketindex < rootbucketcount ; bucketindex++) {
bucket->flags = 0;
@@ -204,7 +208,7 @@
group->bucketrange = range / (mmbsf)bsort->groupbucketcount;
group->bucketmax = bsort->groupbucketcount - 1;
- bucket = (mmBinSortBucket *)(group + 1);
+ bucket = group->bucket;
for (bucketindex = 0 ; bucketindex < bsort->groupbucketcount ;
bucketindex++) {
bucket->flags = 0;
@@ -228,7 +232,7 @@
if (value > bucket->max)
bucket->max = value;
- bucket = (mmBinSortBucket *)(group + 1) + bucketindex;
+ bucket = &group->bucket[ bucketindex ];
bucket->itemcount++;
mmListAdd(bucket->last, item, bsort->itemlistoffset);
bucket->last = &((mmListNode *)ADDRESS(item,
bsort->itemlistoffset))->next;
@@ -296,7 +300,7 @@
itemcount = 0;
- for (bucketindex = 0, bucket = (mmBinSortBucket *)(group + 1) ;
bucketindex < bsort->groupbucketcount ; bucketindex++, bucket++) {
+ for (bucketindex = 0, bucket = group->bucket ; bucketindex <
bsort->groupbucketcount ; bucketindex++, bucket++) {
if (bucket->flags & MM_BINSORT_BUCKET_FLAGS_SUBGROUP)
mmBinSortCollapseGroup(bsort, bucket);
@@ -332,7 +336,7 @@
for (depth = 0 ; ; group = (mmBinSortGroup *)bucket->p, depth++) {
bucketindex = mmBinSortBucketIndex(group, value);
- bucket = (mmBinSortBucket *)(group + 1) + bucketindex;
+ bucket = &group->bucket[ bucketindex ];
bucket->itemcount++;
if (bucket->flags & MM_BINSORT_BUCKET_FLAGS_SUBGROUP)
@@ -391,7 +395,7 @@
for (; ; group = (mmBinSortGroup *)bucket->p) {
bucketindex = mmBinSortBucketIndex(group, value);
- bucket = (mmBinSortBucket *)(group + 1) + bucketindex;
+ bucket = &group->bucket[ bucketindex ];
bucket->itemcount--;
if (bucket->flags & MM_BINSORT_BUCKET_FLAGS_SUBGROUP) {
@@ -427,7 +431,7 @@
mmBinSortBucket *bucket;
bsort = (mmBinSortHead *)binsort;
- bucket = (mmBinSortBucket *)(bsort + 1) + bucketindex;
+ bucket = &bsort->root.bucket[ bucketindex ];
*itemcount = bucket->itemcount;
return bucket->p;
@@ -440,7 +444,7 @@
mmBinSortBucket *bucket;
group = (mmBinSortGroup *)binsortgroup;
- bucket = (mmBinSortBucket *)(group + 1) + bucketindex;
+ bucket = &group->bucket[ bucketindex ];
*itemcount = bucket->itemcount;
return bucket->p;
@@ -470,7 +474,7 @@
printf( " Failmax %f ; Base %f ; Range %f ; Index %f\n", failmax,
group->groupbase, group->bucketrange, mmbsfceil( failmax - group->groupbase ) /
group->bucketrange );
printf( " Top bucket : %d\n", topbucket );
*/
- bucket = (mmBinSortBucket *)(group + 1);
+ bucket = group->bucket;
for (bucketindex = 0 ; bucketindex <= topbucket ; bucketindex++, bucket++)
{
/*
@@ -512,7 +516,7 @@
/*
printf( "TopBucket : %d / %d\n", topbucket, bsort->root.bucketmax );
*/
- bucket = (mmBinSortBucket *)(bsort + 1);
+ bucket = bsort->root.bucket;
for (bucketindex = 0 ; bucketindex <= topbucket ; bucketindex++, bucket++)
{
/*
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits