add some functions to convert input char to dimension and tensor
This commit is contained in:
@@ -143,7 +143,14 @@ void split_dim_part(dimension *root, dimension **part_1, dimension **part_2, siz
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void increment_dim_var(dimension *d){
|
||||
if(endian){
|
||||
(d->perm[0])++;
|
||||
}
|
||||
else{
|
||||
(d->perm[d->size - 1])++;
|
||||
}
|
||||
}
|
||||
|
||||
void add_dimension(dimension **d, dimension *d0, dimension *d1) {
|
||||
(*d) = create_dim(d0->size + d1->size);
|
||||
@@ -170,9 +177,11 @@ void min_dimension(dimension **d, dimension *d0, dimension *d1) {
|
||||
|
||||
void printDebug_dimension(dimension *d,char *msg){
|
||||
|
||||
printf("(%s)->size = %ld | (%s)->rank = %ld \n",msg,d->size,msg,d->rank);
|
||||
printf("(%s)->size = %ld | (%s)->rank = %ld \n[",msg,d->size,msg,d->rank);
|
||||
for(size_t i=0; i<d->size; ++i)
|
||||
printf("[%ld: %ld] |", i,d->perm[i]);
|
||||
printf(" %ld,", d->perm[i]);
|
||||
printf("] \n");
|
||||
//printf("[%ld: %ld] |", i,d->perm[i]);
|
||||
/* if(endian)
|
||||
printf("\nendian (true): the bigest index varies first, e.g: [x0,x1,x2,...,xn] xn is the bigest index\n");
|
||||
else
|
||||
@@ -287,3 +296,46 @@ size_t* CoordFromLin(size_t line, dimension *dim){
|
||||
return ret;
|
||||
}
|
||||
|
||||
void append_in_list_perm(list_perm_in_dim **list_p, size_t perm){
|
||||
list_perm_in_dim *lis=malloc(sizeof(list_perm_in_dim));
|
||||
lis->perm=perm;
|
||||
lis->next=NULL;
|
||||
if(*list_p == NULL){
|
||||
lis->index=0;
|
||||
*list_p = lis;
|
||||
}
|
||||
else{
|
||||
list_perm_in_dim *tmp =*list_p;
|
||||
while(tmp->next) tmp=tmp->next;
|
||||
lis->index = tmp->index +1;
|
||||
tmp->next=lis;
|
||||
}
|
||||
}
|
||||
|
||||
dimension * create_dim_from_list_perm( list_perm_in_dim *l_p){
|
||||
|
||||
if(l_p){
|
||||
list_perm_in_dim *tmp =l_p;
|
||||
while(tmp->next) tmp=tmp->next;
|
||||
dimension *dim=create_dim(tmp->index + 1);
|
||||
(dim)->size = tmp->index + 1;
|
||||
tmp=l_p;
|
||||
while(tmp){
|
||||
(dim)->perm[tmp->index]=tmp->perm;
|
||||
tmp=tmp->next;
|
||||
}
|
||||
updateRankDim(dim);
|
||||
return dim;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void free_list_perm_in_dim(list_perm_in_dim *l_p){
|
||||
list_perm_in_dim *tmp=l_p, *ttmp;
|
||||
while(tmp){
|
||||
ttmp = tmp;
|
||||
tmp = ttmp->next;
|
||||
free(ttmp);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -47,6 +47,20 @@ size_t LineFromCoord(size_t *coo, dimension *dim);
|
||||
size_t* CoordFromLin(size_t line, dimension *dim);
|
||||
void vCoordFromLin(size_t *ret, size_t line, dimension *dim );
|
||||
|
||||
void increment_dim_var(dimension *d);
|
||||
|
||||
struct list_perm_in_dim{
|
||||
size_t index;
|
||||
size_t perm;
|
||||
struct list_perm_in_dim *next;
|
||||
};
|
||||
|
||||
typedef struct list_perm_in_dim list_perm_in_dim;
|
||||
|
||||
void append_in_list_perm(list_perm_in_dim **list_p, size_t perm);
|
||||
dimension * create_dim_from_list_perm( list_perm_in_dim *l_p);
|
||||
|
||||
void free_list_perm_in_dim(list_perm_in_dim *l_p);
|
||||
|
||||
#endif /* __DIMENSION_T__H__ */
|
||||
//int compare_dimension(dimension *d1, dimension *d2);
|
||||
|
||||
@@ -179,6 +179,44 @@ TEST(sprint_dim){
|
||||
free(dimSTR);
|
||||
}
|
||||
|
||||
TEST(incrment_dim){
|
||||
endian=false;
|
||||
dimension *D=create_dim(4);
|
||||
D->perm[0]=2;
|
||||
D->perm[1]=3;
|
||||
D->perm[2]=5;
|
||||
D->perm[3]=6;
|
||||
|
||||
updateRankDim(D);
|
||||
|
||||
char *dimSTR =NULL;
|
||||
size_t nb=sprint_dimension(&dimSTR, D);
|
||||
|
||||
LOG(" nb char : %ld\n, dim print:\n%s\n",nb, dimSTR);
|
||||
|
||||
increment_dim_var(D);
|
||||
|
||||
nb=sprint_dimension(&dimSTR, D);
|
||||
|
||||
LOG(" nb char : %ld\n, dim print increment:\n%s\n",nb, dimSTR);
|
||||
|
||||
free_dimension(D);
|
||||
free(dimSTR);
|
||||
}
|
||||
|
||||
|
||||
TEST(list_perm_in_dim){
|
||||
list_perm_in_dim *l_p=NULL;
|
||||
|
||||
for(size_t i=1;i<5; ++i){
|
||||
append_in_list_perm(&l_p, i);
|
||||
}
|
||||
|
||||
dimension *dim=create_dim_from_list_perm(l_p);
|
||||
|
||||
printDebug_dimension(dim, "from l_p");
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv){
|
||||
|
||||
|
||||
Reference in New Issue
Block a user