Example #1
0
char *aa_rx_errstr( struct aa_mem_region *reg,
                          int e )
{
    size_t n = 0;
    const char *strs[sizeof(e) * 8 + 1];
    strs[0] = "OK";;
    strs[1] = NULL;

    for( size_t i = 0; i < sizeof(errstrs) / sizeof(*errstrs); i ++ ) {
        if( e & (1<<i) ) {
            strs[n] = errstrs[i];
            n++;
            strs[n] = NULL;
        }
    }

    if( 0 == n ) { n++; }

    /* TODO: compute exact size */

    char *buf = (char*)aa_mem_region_alloc(reg, 256);
    *buf = '\0';
    for( size_t i = 0; i < n; i ++ ) {
        strcat(buf, strs[i]);
        if(strs[i+1]) {
            strcat(buf, ":");
        }
    }

    return buf;
}
Example #2
0
size_t aa_io_d_parse( const char *str, struct aa_mem_region *reg, double **X, char **lendptr )
{
    char *ptr = (char*)str; // promise not to change str

    size_t i = 0;
    for(; ; i ++ ) {
        if( NULL == ptr || AA_IO_ISCOMMENT(*ptr) ) break;

        errno = 0;
        char *endptr;

        double x = strtod(ptr, &endptr);
        if( ptr == endptr ) break;

        *X = (double*)aa_mem_region_tmprealloc(reg, (1+i)*sizeof(double));
        (*X)[i] = x;

        endptr = aa_io_skipblank(endptr);

        ptr = endptr;
    }
    void *a_ptr = aa_mem_region_alloc(reg, i*sizeof(double));
    assert( 0 == i || a_ptr == *X );

    if( lendptr ) *lendptr = ptr;

    return i;
}
Example #3
0
File: mem.c Project: kingdwd/amino
/*-- Cons --*/
aa_mem_cons_t *aa_mem_cons_cpy( aa_mem_region_t *reg, void *p, size_t n, aa_mem_cons_t *next  ) {
    aa_mem_cons_t *node = (aa_mem_cons_t*) aa_mem_region_alloc( reg, sizeof(aa_mem_cons_t) + n );
    node->data = node+1;
    node->next = next;
    memcpy( node->data, p, n );
    return node;
}
Example #4
0
File: mem.c Project: kingdwd/amino
void *aa_mem_pool_alloc( aa_mem_pool_t *pool ) {
    if( pool->top ) {
        // allocate from freed pool
        void *p = pool->top;
        pool->top = *((void**)p);
        return p;
    } else {
        // allocate from region
        return aa_mem_region_alloc( &pool->region, pool->size );
    }
}
Example #5
0
File: mem.c Project: kingdwd/amino
char* aa_mem_region_vprintf(aa_mem_region_t *reg, const char *fmt, va_list ap ) {
    int r;
    do {
        va_list ap1;
        va_copy(ap1, ap);
        // r is one less than needed buffer size, (doesn't count '\0')
        r = vsnprintf((char*)aa_mem_region_ptr(reg), aa_mem_region_freesize(reg),
                      fmt, ap1);
        va_end(ap1);
    }while( (r >= (int)aa_mem_region_freesize(reg) ) &&
            aa_mem_region_tmpalloc( reg, (size_t)r + 1) );
    return (char*)aa_mem_region_alloc(reg,(size_t)r + 1);
}
Example #6
0
char *aa_io_getline( FILE *fin, struct aa_mem_region *reg )
{
    size_t n = 0;
    do {
        int i = fgetc(fin);
        if( '\n' == i || EOF == i ) {
            char * str = (char*)aa_mem_region_alloc( reg, n+1 );
            str[n] = '\0';
            return str;
        }
        n++;
        char *ptr = (char*)aa_mem_region_tmprealloc(reg, n);
        ptr[n-1] = (char)i;
    } while(1);
}
Example #7
0
File: mem.c Project: kingdwd/amino
void *aa_mem_region_local_alloc(size_t size) {
    return aa_mem_region_alloc( aa_mem_region_local_get(), size );
}
Example #8
0
File: mem.c Project: kingdwd/amino
AA_API void *aa_mem_region_dup( aa_mem_region_t *region, const void *p, size_t size ) {
    void *n = aa_mem_region_alloc(region, size);
    memcpy( n, p, size );
    return n;
}
Example #9
0
File: mem.c Project: golems/amino
void *aa_mem_region_zalloc( aa_mem_region_t *region, size_t size )
{
    void *p = aa_mem_region_alloc(region,size);
    memset(p, 0, size );
    return p;
}