diff status.cpp @ 498:342822c2d49a

Merge api-inversion branch (-r656:771, but I don't expect to return to that branch) into the trunk. I expect there to be minor performance regressions (e.g. in the SOAP server index cacheing, which I have forcibly removed) and minor unplugged memory leaks (e.g. in audioDB::query(), where I don't free up the datum). I hope that these leaks and performance regressions can be plugged in short order. I also expect that some (but maybe not all) of the issues currently addressed in the memory-leaks branch are superseded or fixed by this merge. There remains much work to be done; go forth and do it.
author mas01cr
date Sat, 10 Jan 2009 16:47:57 +0000
parents
children cc2b97d020b1
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/status.cpp	Sat Jan 10 16:47:57 2009 +0000
@@ -0,0 +1,48 @@
+#include "audioDB.h"
+extern "C" {
+#include "audioDB_API.h"
+#include "audioDB-internals.h"
+}
+
+int audiodb_status(adb_t *adb, adb_status_t *status) {
+  /* FIXME: it would be nice to be able to test for "is this database
+     pointer valid", but at the moment we punt that to memory
+     discipline.  */
+
+  unsigned dudCount = 0;
+  unsigned nullCount = 0;
+
+  for(unsigned k = 0; k < adb->header->numFiles; k++) {
+    /* FIXME: this bare "16" here reveals a problem (or maybe two).
+     * 16 here means the default value of the sequenceLength parameter
+     * initializer (both in C++ and corresponding to the "-l" or
+     * "--sequencelength" command-line argument).
+     *
+     * The problem is that the API as currently designed provides no
+     * way to pass that information in to this routine; there's no
+     * input parameter; nor is there in the SOAP version of this
+     * query.  However, there /is/ a way to pass that information on
+     * the command-line -- though that codepath is completely
+     * untested.  I can see that it might be useful to provide this
+     * information, but at present it's probably completely unused, so
+     * the compromise for now is to hardwire the 16.
+     */ 
+    if((*adb->track_lengths)[k] < 16) {
+      dudCount++; 
+      if(!(*adb->track_lengths)[k]) {
+	nullCount++; 
+      } 
+    }
+  }
+
+  status->numFiles = adb->header->numFiles;
+  status->dim = adb->header->dim;
+  status->length = adb->header->length;
+  status->dudCount = dudCount;
+  status->nullCount = nullCount;
+  status->flags = adb->header->flags;
+  status->data_region_size = adb->header->timesTableOffset - adb->header->dataOffset;
+
+  return 0;
+}
+