projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
pivot table procedure conceptually works
[pspp]
/
src
/
libpspp
/
tower.c
diff --git
a/src/libpspp/tower.c
b/src/libpspp/tower.c
index e8d253d086731c61dd539962cbc79f9c2b3b0750..bdaaffbca3460c02caa59a6d00e29edc2b17fcd7 100644
(file)
--- a/
src/libpspp/tower.c
+++ b/
src/libpspp/tower.c
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 2007 Free Software Foundation, Inc.
+ Copyright (C) 2007
, 2009, 2011
Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-16,12
+16,13
@@
#include <config.h>
#include <config.h>
-#include
<libpspp/tower.h>
+#include
"libpspp/tower.h"
#include <limits.h>
#include <limits.h>
-#include <libpspp/assertion.h>
-#include <libpspp/compiler.h>
+#include "libpspp/assertion.h"
+#include "libpspp/cast.h"
+#include "libpspp/compiler.h"
static struct tower_node *abt_to_tower_node (const struct abt_node *);
static struct tower_node *first_node (const struct tower *);
static struct tower_node *abt_to_tower_node (const struct abt_node *);
static struct tower_node *first_node (const struct tower *);
@@
-32,10
+33,7
@@
static struct tower_node *prev_node (const struct tower *,
const struct tower_node *);
static unsigned long int get_subtree_size (const struct abt_node *);
static unsigned long int get_subtree_count (const struct abt_node *);
const struct tower_node *);
static unsigned long int get_subtree_size (const struct abt_node *);
static unsigned long int get_subtree_count (const struct abt_node *);
-static void reaugment_tower_node (struct abt_node *,
- const struct abt_node *,
- const struct abt_node *,
- const void *aux);
+static void reaugment_tower_node (struct abt_node *, const void *aux);
/* Returns the height of the bottom of the given tower NODE.
/* Returns the height of the bottom of the given tower NODE.
@@
-184,7
+182,7
@@
tower_lookup (const struct tower *t_,
unsigned long height,
unsigned long *node_start)
{
unsigned long height,
unsigned long *node_start)
{
- struct tower *t =
(struct tower *) t_
;
+ struct tower *t =
CONST_CAST (struct tower *, t_)
;
struct abt_node *p;
assert (height < tower_height (t));
struct abt_node *p;
assert (height < tower_height (t));
@@
-237,7
+235,7
@@
tower_lookup (const struct tower *t_,
struct tower_node *
tower_get (const struct tower *t_, unsigned long int index)
{
struct tower_node *
tower_get (const struct tower *t_, unsigned long int index)
{
- struct tower *t =
(struct tower *) t_
;
+ struct tower *t =
CONST_CAST (struct tower *, t_)
;
struct abt_node *p;
assert (index < tower_count (t));
struct abt_node *p;
assert (index < tower_count (t));
@@
-350,27
+348,26
@@
get_subtree_count (const struct abt_node *p)
return p != NULL ? abt_to_tower_node (p)->subtree_count : 0;
}
return p != NULL ? abt_to_tower_node (p)->subtree_count : 0;
}
-/* Recalculates the subtree_size of NODE based on
its LEFT and
-
RIGHT children's subtree_sizes
. */
+/* Recalculates the subtree_size of NODE based on
the subtree_sizes of its
+
children
. */
static void
static void
-reaugment_tower_node (struct abt_node *node_,
- const struct abt_node *left,
- const struct abt_node *right,
- const void *aux UNUSED)
+reaugment_tower_node (struct abt_node *node_, const void *aux UNUSED)
{
struct tower_node *node = abt_to_tower_node (node_);
node->subtree_size = node->size;
node->subtree_count = 1;
{
struct tower_node *node = abt_to_tower_node (node_);
node->subtree_size = node->size;
node->subtree_count = 1;
- if (left != NULL)
+
+ if (node->abt_node.down[0] != NULL)
{
{
- struct tower_node *left
_node = abt_to_tower_node (left
);
- node->subtree_size += left
_node
->subtree_size;
- node->subtree_count += left
_node->subtree_count;
+ struct tower_node *left
= abt_to_tower_node (node->abt_node.down[0]
);
+ node->subtree_size += left->subtree_size;
+ node->subtree_count += left
->subtree_count;
}
}
- if (right != NULL)
+
+ if (node->abt_node.down[1] != NULL)
{
{
- struct tower_node *right
_node = abt_to_tower_node (right
);
- node->subtree_size += right
_node
->subtree_size;
- node->subtree_count += right
_node->subtree_count;
+ struct tower_node *right
= abt_to_tower_node (node->abt_node.down[1]
);
+ node->subtree_size += right->subtree_size;
+ node->subtree_count += right
->subtree_count;
}
}
}
}