Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/user/user.tex

    re10537a9 rd92ff4a  
    11%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -*- Mode: Latex -*- %%%%%%%%%%%%%%%%%%%%%%%%%%%%
    2 %%
     2%% 
    33%% Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
    44%%
    55%% The contents of this file are covered under the licence agreement in the
    66%% file "LICENCE" distributed with Cforall.
    7 %%
    8 %% user.tex --
    9 %%
     7%% 
     8%% user.tex -- 
     9%% 
    1010%% Author           : Peter A. Buhr
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Mon Jul  9 10:49:52 2018
    14 %% Update Count     : 3361
     13%% Last Modified On : Thu Jul 26 17:29:05 2018
     14%% Update Count     : 3366
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    7272
    7373% Names used in the document.
    74 \newcommand{\Version}{\input{build/version}}
     74\newcommand{\Version}{\input{../../version}}
    7575\newcommand{\Textbf}[2][red]{{\color{#1}{\textbf{#2}}}}
    7676\newcommand{\Emph}[2][red]{{\color{#1}\textbf{\emph{#2}}}}
     
    430430#endif
    431431\end{cfa}
    432 which conditionally includes the correct header file, if the program is compiled using \Indexc{gcc} or \Indexc{cfa}.
     432which conditionally includes the correct header file, if the program is compiled using \Indexc{gcc} or \Indexc{cfa}. 
    433433
    434434
     
    14471447\end{cfa}
    14481448Algol68 infers the following dereferencing ©*p2 = *p1 + x©, because adding the arbitrary integer value in ©x© to the address of ©p1© and storing the resulting address into ©p2© is an unlikely operation.
    1449 Unfortunately, automatic dereferencing does not work in all cases, and so some mechanism is necessary to fix incorrect choices.
     1449Unfortunately, automatic dereferencing does not work in all cases, and so some mechanism is necessary to fix incorrect choices. 
    14501450
    14511451Rather than inferring dereference, most programming languages pick one implicit dereferencing semantics, and the programmer explicitly indicates the other to resolve address-duality.
     
    22822282        struct T t;
    22832283} s;
    2284 
     2284       
    22852285
    22862286
     
    23542354}
    23552355\end{cfa}
    2356 because
     2356because 
    23572357
    23582358Currently, there are no \Index{lambda} expressions, \ie unnamed routines because routine names are very important to properly select the correct routine.
     
    33943394        sout | sepDisable | 1 | 2 | 3 | endl;           // globally turn off implicit separator
    33953395        sout | sepEnable | 1 | 2 | 3 | endl;            // globally turn on implicit separator
    3396 
     3396       
    33973397        sout | 1 | sepOff | 2 | 3 | endl;                       // locally turn on implicit separator
    33983398        sout | sepDisable | 1 | sepOn | 2 | 3 | endl; // globally turn off implicit separator
     
    59675967void * memalign( size_t align, size_t size );§\indexc{memalign}§
    59685968int posix_memalign( void ** ptr, size_t align, size_t size );§\indexc{posix_memalign}§
    5969 }
    5970 
    5971 // §\CFA§ safe equivalents, i.e., implicit size specification
    5972 forall( dtype T | sized(T) ) T * malloc( void );
    5973 forall( dtype T | sized(T) ) T * calloc( size_t dim );
    5974 forall( dtype T | sized(T) ) T * realloc( T * ptr, size_t size );
    5975 forall( dtype T | sized(T) ) T * memalign( size_t align );
    5976 forall( dtype T | sized(T) ) T * aligned_alloc( size_t align );
    5977 forall( dtype T | sized(T) ) int posix_memalign( T ** ptr, size_t align );
    5978 
    5979 // §\CFA§ safe general allocation, fill, resize, array
    5980 forall( dtype T | sized(T) ) T * alloc( void );§\indexc{alloc}§
    5981 forall( dtype T | sized(T) ) T * alloc( char fill );
    5982 forall( dtype T | sized(T) ) T * alloc( size_t dim );
    5983 forall( dtype T | sized(T) ) T * alloc( size_t dim, char fill );
    5984 forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim );
    5985 forall( dtype T | sized(T) ) T * alloc( T ptr[], size_t dim, char fill );
    5986 
    5987 // §\CFA§ safe general allocation, align, fill, array
    5988 forall( dtype T | sized(T) ) T * align_alloc( size_t align );
    5989 forall( dtype T | sized(T) ) T * align_alloc( size_t align, char fill );
    5990 forall( dtype T | sized(T) ) T * align_alloc( size_t align, size_t dim );
    5991 forall( dtype T | sized(T) ) T * align_alloc( size_t align, size_t dim, char fill );
    59925969
    59935970// C unsafe initialization/copy
    5994 extern "C" {
    59955971void * memset( void * dest, int c, size_t size );
    59965972void * memcpy( void * dest, const void * src, size_t size );
    59975973}
    59985974
     5975forall( dtype T | sized(T) ) {
     5976// §\CFA§ safe equivalents, i.e., implicit size specification
     5977        T * malloc( void );
     5978        T * calloc( size_t dim );
     5979        T * realloc( T * ptr, size_t size );
     5980        T * memalign( size_t align );
     5981        T * aligned_alloc( size_t align );
     5982        int posix_memalign( T ** ptr, size_t align );
     5983
     5984// §\CFA§ safe general allocation, fill, resize, array
     5985        T * alloc( void );§\indexc{alloc}§
     5986        T * alloc( char fill );
     5987        T * alloc( size_t dim );
     5988        T * alloc( size_t dim, char fill );
     5989        T * alloc( T ptr[], size_t dim );
     5990        T * alloc( T ptr[], size_t dim, char fill );
     5991
     5992// §\CFA§ safe general allocation, align, fill, array
     5993        T * align_alloc( size_t align );
     5994        T * align_alloc( size_t align, char fill );
     5995        T * align_alloc( size_t align, size_t dim );
     5996        T * align_alloc( size_t align, size_t dim, char fill );
     5997
    59995998// §\CFA§ safe initialization/copy, i.e., implicit size specification
    6000 forall( dtype T | sized(T) ) T * memset( T * dest, char c );§\indexc{memset}§
    6001 forall( dtype T | sized(T) ) T * memcpy( T * dest, const T * src );§\indexc{memcpy}§
     5999        T * memset( T * dest, char c );§\indexc{memset}§
     6000        T * memcpy( T * dest, const T * src );§\indexc{memcpy}§
    60026001
    60036002// §\CFA§ safe initialization/copy array
    6004 forall( dtype T | sized(T) ) T * memset( T dest[], size_t dim, char c );
    6005 forall( dtype T | sized(T) ) T * memcpy( T dest[], const T src[], size_t dim );
     6003        T * amemset( T dest[], char c, size_t dim );
     6004        T * amemcpy( T dest[], const T src[], size_t dim );
     6005}
    60066006
    60076007// §\CFA§ allocation/deallocation and constructor/destructor
     
    60636063forall( otype T | { int ?<?( T, T ); } )
    60646064void qsort( const T * arr, size_t dim );§\indexc{qsort}§
     6065
     6066forall( otype E | { int ?<?( E, E ); } ) {
     6067        E * bsearch( E key, const E * vals, size_t dim );§\indexc{bsearch}§     §\C{// location}§
     6068        size_t bsearch( E key, const E * vals, size_t dim );§\C{// position}§
     6069        E * bsearchl( E key, const E * vals, size_t dim );§\indexc{bsearchl}§
     6070        size_t bsearchl( E key, const E * vals, size_t dim );
     6071        E * bsearchu( E key, const E * vals, size_t dim );§\indexc{bsearchu}§
     6072        size_t bsearchu( E key, const E * vals, size_t dim );
     6073}
     6074
     6075forall( otype K, otype E | { int ?<?( K, K ); K getKey( const E & ); } ) {
     6076        E * bsearch( K key, const E * vals, size_t dim );
     6077        size_t bsearch( K key, const E * vals, size_t dim );
     6078        E * bsearchl( K key, const E * vals, size_t dim );
     6079        size_t bsearchl( K key, const E * vals, size_t dim );
     6080        E * bsearchu( K key, const E * vals, size_t dim );
     6081        size_t bsearchu( K key, const E * vals, size_t dim );
     6082}
     6083
     6084forall( otype E | { int ?<?( E, E ); } ) {
     6085        void qsort( E * vals, size_t dim );§\indexc{qsort}§
     6086}
    60656087\end{cfa}
    60666088
Note: See TracChangeset for help on using the changeset viewer.