Mercurial > hg > audiodb
view libtests/0026/prog1.c @ 402:58b88ab69424 api-inversion
Move the struct adb definition from the auidioDB_API.h into the
audioDB-internals.h header file, leaving only the typedef behind.
Thus a user of the API sees only an incomplete type, which cannot be
instantiated (but /pointers/ to it can); there's then less temptation to
break the abstraction barrier by using structure fields in client code.
Not only that, but we can now safely put C++ stuff in the structure.
Take advantage of this by putting a std::set<std::string> in there, to
hold all the keys currently in the database; populate this field on
audiodb_open() (and delete it on audiodb_close). This will be useful
when we come to implement variants of audiodb_insert().
author | mas01cr |
---|---|
date | Wed, 03 Dec 2008 17:40:15 +0000 |
parents | 94c18f128ce8 |
children | e072aa1611f5 342822c2d49a |
line wrap: on
line source
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sysexits.h> #include <fcntl.h> #include <dirent.h> #include <unistd.h> #include <sys/stat.h> /* * * #define NDEBUG * * */ #include <assert.h> #include "../../audioDB_API.h" #include "../test_utils_lib.h" int main(int argc, char **argv){ int returnval=0; adb_ptr mydbp={0}; // int ivals[10]; // double dvals[10]; // adbinsert myinsert={0}; // unsigned int myerr=0; char * databasename="testdb"; // adbquery myadbquery={0}; // adbqueryresult myadbqueryresult={0}; // adbquery myadbquery2={0}; // adbqueryresult myadbqueryresult2={0}; int myerror=0; /* remove old directory */ //if [ -f testdb ]; then rm -f testdb; fi clean_remove_db(databasename); /* create new db */ //${AUDIODB} -N -d testdb mydbp=audiodb_create(databasename,0,0,0); /* power flag on */ //${AUDIODB} -P -d testdb //${AUDIODB} -d testdb -P myerror=audiodb_power(mydbp); if (myerror){ returnval=-1; } //# should fail (no db given) //expect_clean_error_exit ${AUDIODB} -P /* not relevent, API wouldn't compile */ return(returnval); }