/** * \brief * Calls a user defined call back function to "push" some statistics * about the database. * * This operation calls a user defined function, of that of an * \a a_apiInfoDataAction type, to pass back an instance of * \a a_apiInfoData. Upon returning from the user defined function, * this instance will be destroyed. * * \param context * This file's context. It must have been created by \a a_apiInit. If * context is NULL, this operation will fail. * * \param action * Pointer to a user defined function that will be called. If * \a action is NULL, this operation will fail. * * \param actionArg * Pointer to a user defined context that will be passed along with * the call to the user defined function. May be NULL. * * \return * Boolean value specifying this operation's success (1) or failure * (0). If the user defined function returns 0, this function will * return 0 as well. * * \see * a_apiInfoDataAction a_apiInfoData */ int a_apiPushMeInfoData( a_apiContext context, a_apiInfoDataAction action, void *actionArg) { int result; if (context) { a_apiInfoData infoData = a_memAlloc(sizeof(struct a_apiInfoData_s)); if (infoData) { infoData->shmName = a_memStrdup(a_shmGetShmName(context->shmContext)); infoData->dbName = a_memStrdup(a_bseGetBaseName(context->bseContext)); infoData->shmAddress = (long)a_shmGetShmAddress(context->shmContext); infoData->shmSize = 0; infoData->bseAddress = (long)a_bseGetBaseAddr(context->bseContext); infoData->mmSize = a_bseGetStateProperty(context->bseContext, A_BSE_STATE_SIZE); infoData->mmUsed = a_bseGetStateProperty(context->bseContext, A_BSE_STATE_USED); infoData->mmMaxUsed = a_bseGetStateProperty(context->bseContext, A_BSE_STATE_MAXUSED); infoData->mmFails = a_bseGetStateProperty(context->bseContext, A_BSE_STATE_FAILS); infoData->mmGarbage = a_bseGetStateProperty(context->bseContext, A_BSE_STATE_GARBAGE); infoData->mmCount = a_bseGetStateProperty(context->bseContext, A_BSE_STATE_COUNT); infoData->clssObjs = a_lstCount(context->list, L_CLSS); infoData->baseObjs = a_lstCount(context->list, L_BASE); infoData->metaObjs = a_lstCount(context->list, L_META); infoData->dataObjs = a_lstCount(context->list, L_DATA); infoData->undfObjs = a_lstCount(context->list, L_UNDF); infoData->dataSize = a_anlTotalDataSize(context->anlContext); result = (action)(infoData, actionArg); a_memFree(infoData->shmName); a_memFree(infoData->dbName); a_memFree(infoData); } else { result = 0; } } else { result = 0; } return result; }
/** * \brief * Returns the total number of objects in a list. * * This operation returns the total number of objects in a list. * * \param list * The list from which the number of objects is requested. If \a list * is NULL, this operation will fail. * * \return * The number of objects counted in \a list, of specified type, or -1 * if the operation fails. * * \see * a_lstCount */ a_counter a_lstCountAll( a_lstList list) { a_counter result; assert(list); if (list) { int i; a_counter subResult; result = 0; for (i = 0; (i < L_COUNT) && (0 <= result); i++) { subResult = a_lstCount(list, i); if (0 <= subResult) { result += subResult; } else { result = -1; } } } else { result = -1; } return result; }