#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>

void is_type_hvector(MPI_Datatype datatype)
{
 int nints, nadds, ntypes, combiner, *ints;
 MPI_Aint *adds;
 MPI_Datatype *types;

 MPI_Type_get_envelope(datatype, &nints, &nadds, &ntypes,
 	  &combiner);
 
 if (combiner != MPI_COMBINER_HVECTOR)
  printf("not type_hvector\n");
 else {
  printf("is type_hvector\n");
  ints = (int *) malloc(nints*sizeof(int));
  adds = (MPI_Aint *) malloc(nadds*sizeof(MPI_Aint));
  types = (MPI_Datatype *) malloc(ntypes*sizeof(MPI_Datatype));

  MPI_Type_get_contents(datatype, nints, nadds, ntypes, 
            ints, adds, types);
  printf("count = %d, blocklength = %d, stride = %ld\n", 
         ints[0], ints[1], adds[0]);
  free(ints);
  free(adds);
  free(types);
 }
}