Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/stdlib.hfa

    rd6b03b7 r2026bb6  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 23 14:14:59 2019
    13 // Update Count     : 373
     12// Last Modified On : Wed Apr 24 17:35:43 2019
     13// Update Count     : 352
    1414//
    1515
     
    1717
    1818#include "bits/defs.hfa"
    19 #include "bits/align.hfa"
    2019
    2120#include <stdlib.h>                                                                             // *alloc, strto*, ato*
    22 
    2321extern "C" {
    2422        void * memalign( size_t align, size_t size );           // malloc.h
     
    4139
    4240        T * malloc( void ) {
    43                 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)malloc( (size_t)sizeof(T) ); // C malloc
    44                 else return (T *)memalign( _Alignof(T), sizeof(T) );
     41                return (T *)(void *)malloc( (size_t)sizeof(T) ); // C malloc
    4542        } // malloc
    4643
    4744        T * calloc( size_t dim ) {
    48                 if ( _Alignof(T) <= libAlign() )return (T *)(void *)calloc( dim, sizeof(T) ); // C calloc
    49                 else return (T *)cmemalign( _Alignof(T), dim, sizeof(T) );
     45                return (T *)(void *)calloc( dim, sizeof(T) );   // C calloc
    5046        } // calloc
    5147
    5248        T * realloc( T * ptr, size_t size ) {
    53                 if ( unlikely( ptr == 0 ) ) return malloc();
    5449                return (T *)(void *)realloc( (void *)ptr, size );
    5550        } // realloc
     
    7166
    7267        T * alloc( void ) {
    73                 return malloc();
     68                return (T *)(void *)malloc( (size_t)sizeof(T) ); // C malloc
    7469        } // alloc
    7570
    7671        T * alloc( char fill ) {
    77                 T * ptr;
    78                 if ( _Alignof(T) <= libAlign() ) ptr = (T *)(void *)malloc( (size_t)sizeof(T) ); // C malloc
    79                 else ptr = (T *)memalign( _Alignof(T), sizeof(T) );
     72                T * ptr = (T *)(void *)malloc( (size_t)sizeof(T) );     // C malloc
    8073                return (T *)memset( ptr, (int)fill, sizeof(T) ); // initialize with fill value
    8174        } // alloc
    8275
    8376        T * alloc( size_t dim ) {
    84                 if ( _Alignof(T) <= libAlign() ) return (T *)(void *)malloc( dim * (size_t)sizeof(T) ); // C malloc
    85                 else return (T *)memalign( _Alignof(T), dim * sizeof(T) );
     77                return (T *)(void *)malloc( dim * (size_t)sizeof(T) ); // C malloc
    8678        } // alloc
    8779
    8880        T * alloc( size_t dim, char fill ) {
    89                 return (T *)memset( (T *)alloc( dim ), (int)fill, dim * sizeof(T) ); // initialize with fill value
     81                T * ptr = (T *)(void *)malloc( dim * (size_t)sizeof(T) ); // C calloc
     82                return (T *)memset( ptr, (int)fill, dim * sizeof(T) ); // initialize with fill value
    9083        } // alloc
    9184
    9285        T * alloc( T ptr[], size_t dim ) {
    93                 return realloc( ptr, dim * sizeof(T) );
    94         } // alloc
    95 } // distribution
     86                return (T *)(void *)realloc( (void *)ptr, dim * (size_t)sizeof(T) ); // C realloc
     87        } // alloc
     88} // distribution
     89
     90
     91forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim, char fill );
    9692
    9793
     
    111107
    112108        T * align_alloc( size_t align, size_t dim, char fill ) {
     109                T * ptr;
    113110                if ( fill == '\0' ) {
    114                         return (T *)cmemalign( align, dim, sizeof(T) );
     111                        ptr = (T *)cmemalign( align, dim, sizeof(T) );
    115112                } else {
    116                         return (T *)memset( (T *)memalign( align, dim * sizeof(T) ), (int)fill, dim * sizeof(T) );
     113                        ptr = (T *)memalign( align, dim * sizeof(T) );
     114                        return (T *)memset( ptr, (int)fill, dim * sizeof(T) );
    117115                } // if
    118         } // align_alloc
    119 } // distribution
    120 
    121 forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim, char fill );
     116                return ptr;
     117        } // align_alloc
     118} // distribution
    122119
    123120
Note: See TracChangeset for help on using the changeset viewer.