All pastes #226543 Raw Edit

Unnamed

public text v1 · immutable
#226543 ·published 2006-10-28 16:36 UTC
rendered paste body
#!/usr/bin/env /home/paco/hacking/cint/runme 
-lgsl -lgslcblas -lm

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <stdarg.h>
#include <gsl/gsl_sf_bessel.h>

typedef struct structslice {
	int d;
	int *s;
} ss;
 
typedef struct structarray {
	int d;
	int *s;
	double *b;
} sa;

ss csn(int dim, ...)
{
    ss p;
    p.d =dim;
    p.s=  (int *) malloc(2*dim*sizeof(int)); 
    va_list ap;
    va_start(ap,dim);
    int lcv;
    for (lcv=0;lcv<(2*dim);lcv=lcv+2){
    	p.s[lcv]= va_arg(ap,int);
    	p.s[lcv+1]= va_arg(ap,int);
    }    
    va_end(ap);
    return p;
}

sa can(int dim, ...)  
{
    sa p;
    p.d =dim;
    p.s=  (int *) malloc(dim*sizeof(int)); 
    va_list ap;
    va_start(ap,dim);
    int lcv;
    int totnum=1;
    for (lcv=0;lcv<dim;lcv++){
    	p.s[lcv]= va_arg(ap,int);
	totnum*=p.s[lcv];
    }    
    va_end(ap);
    p.b=  (double *) malloc(totnum*sizeof(double)); 
    int lcv2;
    for (lcv2=0;lcv2<totnum;lcv2++)
    	p.b[lcv2]= (double) lcv2;
    return p;
}

void pab(int *elptr,int lev,int *p, sa a){
	if (lev>0){
		printf("[");
	for (p[lev-1]=0;p[lev-1]<a.s[lev-1];p[lev-1]++)
		pab(elptr,lev-1,p,a);
		printf("]\n");
	}
	else {
		printf("%5.8f ",a.b[*elptr]);
		(*elptr)++;
	}
}

void pa (sa a){
	printf("Dimensions: %d\n",a.d);
	printf("Shape: ");
	int lcv;
	for (lcv=0;lcv<a.d;lcv++){
	    printf("%d ",a.s[lcv]);
	}
	printf("\n");
	int *p= (int *)malloc(a.d*sizeof(int));
	int elptr=0;
	pab(&elptr,a.d,p,a);
}

void ps (ss a){
	printf("Dimensions: %d\n",a.d);
	printf("Slice: ");
	int lcv;
	for (lcv=0;lcv<(2*a.d);lcv=lcv+2){
	    printf("[%d ",a.s[lcv]);
	    printf("%d] ",a.s[lcv+1]);
	}
	printf("\n");
}

// Create Array by Reading a file
sa car(char *s);

sa dau(sa a,double (*uop)(double)){
	sa p;
	p.d=a.d;
        p.s=  (int *) malloc(a.d*sizeof(int));
	int lcv,lcv2,totnum=1;
	for (lcv=0;lcv<a.d;lcv++){
		p.s[lcv]=a.s[lcv];
		totnum*=a.s[lcv];
	}
	p.b=  (double *) malloc(totnum*sizeof(double));
	for (lcv2=0;lcv2<totnum;lcv2++)
		p.b[lcv2]=(*uop)(a.b[lcv2]);
	return p;
}

int main(int argc, char* argv[]) {
  sa a[10];
  ss blah2=csn(3,0,10,0,5,0,6);
  ps(blah2);
  a[1]=can(1,10);
  pa(a[1]);
//  a[2]=dunary(a[1],cos);
  a[2]=dau(a[1],gsl_sf_bessel_J0);
//  printf("%d\n",a[1].s[2]);
  pa(a[2]);
  printf("Hellow, World\n");
  printf("%g\n",sin(10));
}