Example #1
0
/**
 * Initialize vector.
 *
 * @param options   combination of initialization options.
 *
 * @return qvector_t container pointer.
 * @retval errno will be set in error condition.
 *  - ENOMEM    : Memory allocation failure.
 *
 * @code
 *  // allocate memory
 *  qvector_t *vector = qvector(QVECTOR_THREADSAFE);
 *  vector->free(vector);
 * @endcode
 *
 * @note
 *   Available options:
 *   - QVECTOR_THREADSAFE - make it thread-safe.
 */
qvector_t *qvector(int options) {
    qvector_t *vector = (qvector_t *) calloc(1, sizeof(qvector_t));
    if (vector == NULL) {
        errno = ENOMEM;
        return NULL;
    }

    vector->list = qlist(options);
    if (vector->list == NULL) {
        free(vector);
        errno = ENOMEM;
        return NULL;
    }

    // methods
    vector->add = add;
    vector->addstr = addstr;
    vector->addstrf = addstrf;

    vector->toarray = toarray;
    vector->tostring = tostring;

    vector->size = size;
    vector->datasize = datasize;
    vector->clear = clear;
    vector->debug = debug;
    vector->free = free_;

    return vector;
}
Example #2
0
/**
 * String Tokenizer
 *
 * @param str           source string
 * @param delimiters    string that specifies a set of delimiters that may
 *                      surround the token being extracted
 *
 * @return qlist container pointer otherwise returns NULL.
 *
 * @code
 *   qlist_t *tokens = qstr_tokenizer("a:b:c", ":");
 *   char *str;
 *   while((str = tokens->popFirst(tokens, NULL)) != NULL) {
 *     printf("%s\n", str);
 *   }
 *   tokens->free(tokens);
 * @endcode
 */
qlist_t *qstrtokenizer(const char *str, const char *delimiters)
{
    qlist_t *list = qlist();
    if (list == NULL) return NULL;

    int i;
    char *dupstr = strdup(str);
    char *token;
    int offset = 0;
    for (i = 1, token = qstrtok(dupstr, delimiters, NULL, &offset);
         token != NULL;
         token = qstrtok(dupstr, delimiters, NULL, &offset), i++) {
        list->addlast(list, token, strlen(token) + 1);
    }
    free(dupstr);

    return list;
}
Example #3
0
/**
 * Create a new stack container
 *
 * @param options   combination of initialization options.
 *
 * @return a pointer of malloced qstack_t container, otherwise returns NULL.
 * @retval errno will be set in error condition.
 *  - ENOMEM    : Memory allocation failure.
 *
 * @code
 *   qstack_t *stack = qstack(QSTACK_THREADSAFE);
 * @endcode
 *
 * @note
 *   Available options:
 *   - QSTACK_THREADSAFE - make it thread-safe.
 */
qstack_t *qstack(int options) {
    qstack_t *stack = (qstack_t *) malloc(sizeof(qstack_t));
    if (stack == NULL) {
        errno = ENOMEM;
        return NULL;
    }

    memset((void *) stack, 0, sizeof(qstack_t));
    stack->list = qlist(options);
    if (stack->list == NULL) {
        free(stack);
        return NULL;
    }

    // methods
    stack->setsize = qstack_setsize;

    stack->push = qstack_push;
    stack->pushstr = qstack_pushstr;
    stack->pushint = qstack_pushint;

    stack->pop = qstack_pop;
    stack->popstr = qstack_popstr;
    stack->popint = qstack_popint;
    stack->popat = qstack_popat;

    stack->get = qstack_get;
    stack->getstr = qstack_getstr;
    stack->getint = qstack_getint;
    stack->getat = qstack_getat;

    stack->size = qstack_size;
    stack->clear = qstack_clear;
    stack->debug = qstack_debug;
    stack->free = qstack_free;

    return stack;
}
Example #4
0
/**
 * Create a server object.
 */
ad_server_t *ad_server_new(void) {
    if (initialized) {
        initialized = true;
        //evthread_use_pthreads();
    }

    ad_server_t *server = NEW_OBJECT(ad_server_t);
    if (server == NULL) {
        return NULL;
    }

    // Initialize instance.
    server->options = qhashtbl(0, 0);
    server->stats = qhashtbl(100, QHASHTBL_THREADSAFE);
    server->hooks = qlist(0);
    if (server->options == NULL || server->stats == NULL || server->hooks == NULL) {
        ad_server_free(server);
        return NULL;
    }

    DEBUG("Created a server object.");
    return server;
}