00001 #include "niml.h"
00002
00003
00004
00005
00006
00007
00008
00009
00010 typedef struct {
00011 int id ;
00012 float x,y,z ;
00013 } AGNI_nod ;
00014
00015
00016
00017 NI_element * AGNI_nod_to_NIML_col ( int num_nod, AGNI_nod *nod ) ;
00018 NI_element * AGNI_nod_to_NIML_row ( int num_nod, AGNI_nod *nod ) ;
00019 NI_element * AGNI_nod_to_NIML_rows( int num_nod, AGNI_nod *nod ) ;
00020
00021
00022
00023 int main( int argc, char *argv[] )
00024 {
00025 int ii, nn, ct, nb ;
00026 AGNI_nod *nod ;
00027 NI_element *nel1, *nel2, *nel3 ;
00028 NI_stream ns ;
00029
00030 if( argc < 2 ){ printf("Usage: nisurf n\n"); exit(0); }
00031
00032 nn = strtol(argv[1],NULL,10) ;
00033 if( nn < 1 ) exit(1) ;
00034
00035
00036
00037 nod = NI_malloc(AGNI_nod, sizeof(AGNI_nod)*nn ) ;
00038 for( ii=0 ; ii < nn ; ii++ ){
00039 nod[ii].id = ii ;
00040 nod[ii].x = 1.1*ii ;
00041 nod[ii].y = 2.2*ii ;
00042 nod[ii].z = 3.3*ii ;
00043 }
00044
00045
00046
00047 ct = NI_clock_time() ;
00048 nel1 = AGNI_nod_to_NIML_row( nn , nod ) ;
00049 fprintf(stderr,"Clock time for %d nodes by row = %d ms\n",
00050 nn,NI_clock_time()-ct) ;
00051 if( nn < 10 ){
00052 ns = NI_stream_open( "fd:1" , "w" ) ;
00053 if( ns == NULL ){ fprintf(stderr,"Can't open fd:1\n"); exit(1); }
00054 nb = NI_write_element( ns , nel1 , NI_TEXT_MODE ) ;
00055 fprintf(stderr,"num bytes=%d\n\n",nb) ;
00056 }
00057
00058
00059
00060
00061 ct = NI_clock_time() ;
00062 nel2 = AGNI_nod_to_NIML_rows( nn , nod ) ;
00063 fprintf(stderr,"Clock time for %d nodes by rows = %d ms\n",
00064 nn,NI_clock_time()-ct) ;
00065 if( nn < 10 ){
00066 nb = NI_write_element( ns , nel2 , NI_TEXT_MODE ) ;
00067 fprintf(stderr,"num bytes=%d\n\n",nb) ;
00068 }
00069
00070
00071
00072
00073 ct = NI_clock_time() ;
00074 nel3 = AGNI_nod_to_NIML_col( nn , nod ) ;
00075 fprintf(stderr,"Clock time for %d nodes by col = %d ms\n",
00076 nn,NI_clock_time()-ct) ;
00077 if( nn < 10 ){
00078 nb = NI_write_element( ns , nel3 , NI_TEXT_MODE ) ;
00079 fprintf(stderr,"num bytes=%d\n\n",nb) ;
00080 }
00081
00082
00083
00084
00085 if( nn < 5 ){
00086 NI_group *ngr = NI_new_group_element() ;
00087 NI_add_to_group( ngr , nel1 ) ;
00088 NI_add_to_group( ngr , nel2 ) ;
00089 NI_add_to_group( ngr , nel3 ) ;
00090 nb = NI_write_element( ns , ngr , NI_BASE64_MODE ) ;
00091 fprintf(stderr,"num bytes=%d\n\n",nb) ;
00092 NI_free_element(ngr) ;
00093 }
00094
00095 fprintf(stderr,"\n*** That's all folks ***\n") ;
00096 exit(0) ;
00097 }
00098
00099
00100
00101
00102
00103
00104 NI_element * AGNI_nod_to_NIML_row( int num_nod , AGNI_nod *nod )
00105 {
00106 NI_element *nel ;
00107 int ii ;
00108
00109
00110
00111 if( num_nod < 1 || nod == NULL ) return NULL ;
00112
00113
00114
00115 nel = NI_new_data_element( "surfixyz_row" , -1 ) ;
00116
00117
00118
00119 NI_define_rowmap_VA( nel ,
00120 NI_INT , offsetof(AGNI_nod,id) ,
00121 NI_FLOAT , offsetof(AGNI_nod,x) ,
00122 NI_FLOAT , offsetof(AGNI_nod,y) ,
00123 NI_FLOAT , offsetof(AGNI_nod,z) ,
00124 -1 ) ;
00125
00126
00127
00128 for( ii=0 ; ii < num_nod ; ii++ )
00129 NI_add_row( nel , nod+ii ) ;
00130
00131 return nel ;
00132 }
00133
00134
00135
00136
00137
00138
00139 NI_element * AGNI_nod_to_NIML_rows( int num_nod , AGNI_nod *nod )
00140 {
00141 NI_element *nel ;
00142 int ii ;
00143 int *ic ; float *xc,*yc,*zc ;
00144
00145
00146
00147 if( num_nod < 1 || nod == NULL ) return NULL ;
00148
00149
00150
00151 nel = NI_new_data_element( "surfixyz_rows" , -1 ) ;
00152
00153
00154
00155 NI_define_rowmap_VA( nel ,
00156 NI_INT , offsetof(AGNI_nod,id) ,
00157 NI_FLOAT , offsetof(AGNI_nod,x) ,
00158 NI_FLOAT , offsetof(AGNI_nod,y) ,
00159 NI_FLOAT , offsetof(AGNI_nod,z) , -1 ) ;
00160
00161
00162
00163 NI_add_many_rows( nel , num_nod , sizeof(AGNI_nod) , nod ) ;
00164
00165 return nel ;
00166 }
00167
00168
00169
00170
00171
00172
00173 NI_element * AGNI_nod_to_NIML_col( int num_nod , AGNI_nod *nod )
00174 {
00175 NI_element *nel ;
00176 int ii ;
00177 int *ic ; float *xc,*yc,*zc ;
00178
00179
00180
00181 if( num_nod < 1 || nod == NULL ) return NULL ;
00182
00183
00184
00185 nel = NI_new_data_element( "surfixyz_col" , num_nod ) ;
00186
00187
00188
00189 ic = (int *) malloc( sizeof(int) * num_nod ) ;
00190 xc = (float *) malloc( sizeof(float) * num_nod ) ;
00191 yc = (float *) malloc( sizeof(float) * num_nod ) ;
00192 zc = (float *) malloc( sizeof(float) * num_nod ) ;
00193
00194
00195
00196 for( ii=0 ; ii < num_nod ; ii++ ){
00197 ic[ii] = nod[ii].id ;
00198 xc[ii] = nod[ii].x ;
00199 yc[ii] = nod[ii].y ;
00200 zc[ii] = nod[ii].z ;
00201 }
00202
00203
00204
00205 NI_add_column( nel , NI_INT , ic ) ; free(ic) ;
00206 NI_add_column( nel , NI_FLOAT , xc ) ; free(xc) ;
00207 NI_add_column( nel , NI_FLOAT , yc ) ; free(yc) ;
00208 NI_add_column( nel , NI_FLOAT , zc ) ; free(zc) ;
00209
00210 return nel ;
00211 }
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221 int NIML_to_AGNI_nod( NI_element *nel , AGNI_nod **nod )
00222 {
00223 int num_nod , ii ;
00224 AGNI_nod *mynod ;
00225
00226
00227
00228 if( nel == 0 ||
00229 nel->vec_len < 1 ||
00230 nel->vec_filled < 1 ||
00231 nel->vec_num < 4 ||
00232 nel->vec_typ[0] != NI_INT ||
00233 nel->vec_typ[1] != NI_FLOAT ||
00234 nel->vec_typ[2] != NI_FLOAT ||
00235 nel->vec_typ[3] != NI_FLOAT ) return 0 ;
00236
00237
00238
00239 num_nod = nel->vec_filled ;
00240
00241
00242
00243 mynod = (AGNI_nod *) malloc( sizeof(AGNI_nod) * num_nod ) ;
00244
00245
00246
00247 NI_define_rowmap_VA( nel ,
00248 NI_INT , offsetof(AGNI_nod,id) ,
00249 NI_FLOAT , offsetof(AGNI_nod,x) ,
00250 NI_FLOAT , offsetof(AGNI_nod,y) ,
00251 NI_FLOAT , offsetof(AGNI_nod,z) ,
00252 -1 ) ;
00253
00254
00255
00256 for( ii=0 ; ii < num_nod ; ii++ )
00257 NI_get_row( nel , ii , mynod+ii ) ;
00258
00259
00260
00261 *nod = mynod ; return num_nod ;
00262 }