This source file includes following definitions.
- opal_datatype_is_monotonic
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 #include "opal_config.h"
  13 
  14 #include <stddef.h>
  15 
  16 #include "opal/constants.h"
  17 #include "opal/datatype/opal_datatype.h"
  18 #include "opal/datatype/opal_datatype_internal.h"
  19 #include "opal/datatype/opal_convertor.h"
  20 
  21 int32_t opal_datatype_is_monotonic(opal_datatype_t* type )
  22 {
  23     opal_convertor_t *pConv;
  24     uint32_t iov_count;
  25     struct iovec iov[5];
  26     size_t max_data = 0;
  27     long prev = -1;
  28     int rc;
  29     bool monotonic = true;
  30 
  31     pConv  = opal_convertor_create( opal_local_arch, 0 );
  32     if (OPAL_UNLIKELY(NULL == pConv)) {
  33         return 0;
  34     }
  35     rc = opal_convertor_prepare_for_send( pConv, type, 1, NULL );
  36     if( OPAL_UNLIKELY(OPAL_SUCCESS != rc)) {
  37         OBJ_RELEASE(pConv);
  38         return 0;
  39     }
  40 
  41     do {
  42         iov_count = 5;
  43         rc = opal_convertor_raw( pConv, iov, &iov_count, &max_data);
  44         for (uint32_t i=0; i<iov_count; i++) {
  45             if ((long)iov[i].iov_base < prev) {
  46                 monotonic = false;
  47                 goto cleanup;
  48             }
  49             prev = (long)iov[i].iov_base;
  50         }
  51     } while (rc != 1);
  52 
  53   cleanup:
  54     OBJ_RELEASE( pConv );
  55 
  56     return monotonic;
  57 }