Added the interface specification for windowing.
There is no change in the implementation. The nWindows parameter
is currently ignored.
diff --git a/median.c b/median.c
index e47bb61..a2062a4 100644
--- a/median.c
+++ b/median.c
@@ -23,7 +23,7 @@
size_t occupancy; // Number of occupants for this buffer.
unsigned char data[0]; // Start of the data block, cast as unsigned char.
median_data_t
- median_data[0]; // The data for this buffer cast as median_data_t.
+ median_data[0]; // The data for this buffer cast as median_data_t.
};
// ----------------------------------------------------------------------------
@@ -318,7 +318,9 @@
// ----------------------------------------------------------------------------
// Suggest the size of the buffer needed for a fixed epsilon and maxN.
// ----------------------------------------------------------------------------
-median_error_t median_suggest_buffer_size(double epsilon, size_t maxN,
+median_error_t median_suggest_buffer_size(double epsilon,
+ size_t maxN,
+ size_t nWindows,
size_t *suggested_size) {
// First check for sane parameters.
@@ -374,14 +376,14 @@
// Initialize an allocated buffer.
// ----------------------------------------------------------------------------
median_error_t median_init_buffer(void *buffer, size_t buffer_size,
- double epsilon, size_t maxN,
+ double epsilon, size_t maxN, size_t nWindows,
median_buffer_t *initialized_buffer) {
// Initialize.
size_t expectedSize = 0;
median_error_t error = MEDIAN_OK;
// First run median_suggest_buffer_size
- if ((error = median_suggest_buffer_size(epsilon, maxN, &expectedSize)) !=
+ if ((error = median_suggest_buffer_size(epsilon, maxN, nWindows, &expectedSize)) !=
MEDIAN_OK)
return error;
// Ensure that the buffer is large enough.
diff --git a/median.h b/median.h
index d4a83a2..0b1ceba 100644
--- a/median.h
+++ b/median.h
@@ -55,15 +55,23 @@
// The default size of the largest possible dataset.
static const size_t MEDIAN_MAX_N_DEFAULT = 1024 * 1024 * 1024; // 1G.
+static const size_t N_WINDOWS_DEFAULT = 1;
+
// This routine returns a suggested size for a buffer to hold all the
// state needed for a median calculation. Here epsilon is the permissible error.
// maxN is the largest dataset that we anticipate. If maxN is set to
// MEDIAN_MAX_N_UNKNOWN (or zero), then we assume MEDIAN_MAX_N_DEFAULT to be the
-// value of maxN. The value return parameter is conventionally the last one. In
+// value of maxN.
+// nWindows is the number of concurrently active windows. The default value
+// for nWindows is 1 (aka N_WINDOWS_DEFAULT). If no windowing is desired,
+// N_WINDOWS_DEFAULT should be used.
+// The value return parameter is conventionally the last one. In
// this case, it contains the suggested_size of the buffer, assuming that the
// return value is MEDIAN_ERROR_OK. In all reasonable calls, the returned value
// will be MEDIAN_ERROR_OK.
-median_error_t median_suggest_buffer_size(double epsilon, size_t maxN,
+median_error_t median_suggest_buffer_size(double epsilon,
+ size_t maxN,
+ size_t nWindows,
size_t *suggested_size);
// Suggest a size of the buffer for scratch space. This is needed
// so that the buffer is not corrupted by the output and merge steps.
@@ -89,7 +97,7 @@
// is initialized. In all reasonable calls, the returned value will be
// MEDIAN_ERROR_OK.
median_error_t median_init_buffer(void *buffer, size_t buffer_size,
- double epsilon, size_t maxN,
+ double epsilon, size_t maxN, size_t nWindows,
median_buffer_t *initialized_buffer);
// This frees up any internal resource consumed with the buffer, including
// mutex locks and other provisioned resources.
diff --git a/median.main.c b/median.main.c
index 15cbb36..1aca550 100644
--- a/median.main.c
+++ b/median.main.c
@@ -15,11 +15,11 @@
// Allocate the buffer of the required size. And then
// initialize it (median_init_buffer).
- assert(median_suggest_buffer_size(.001, TEST_SIZE, &n) == MEDIAN_OK);
+ assert(median_suggest_buffer_size(.001, TEST_SIZE, N_WINDOWS_DEFAULT, &n) == MEDIAN_OK);
void* b = malloc(n);
assert(b);
median_buffer_t buf;
- assert(median_init_buffer(b, n, .001, TEST_SIZE, &buf) == MEDIAN_OK);
+ assert(median_init_buffer(b, n, .001, TEST_SIZE, N_WINDOWS_DEFAULT, &buf) == MEDIAN_OK);
// Initialize the spare buffer.
assert(median_suggest_scratch_buffer_size(buf, &n) == MEDIAN_OK);