00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 #include <med.h>
00020 #include <med_config.h>
00021 #include <med_outils.h>
00022 #include <hdf5.h>
00023 #include <string.h>
00024 
00050 med_err MEDfilterBlockOfEntityCr(const med_idt          fid,
00051                                  const med_int          nentity,
00052                                  const med_int          nvaluesperentity,
00053                                  const med_int          nconstituentpervalue,
00054                                  const med_int          constituentselect,
00055                                  const med_switch_mode  switchmode,
00056                                  const med_storage_mode storagemode,
00057                                  const char * const     profilename,
00058                                  const med_size         start,
00059                                  const med_size         stride,
00060                                  const med_size         count,
00061                                  const med_size         blocksize,
00062                                  const med_size         lastblocksize,
00063                                  med_filter*    const   filter) {
00064 
00065 
00066   med_int    _profilearraysize=0,_maxentitynum=0;
00067   med_err    _ret=-1;
00068   med_size   _start=start-1;
00069 
00070   NOFINALBLANK(profilename,ERROR);
00071 
00072   if ( start == 0) {
00073     MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_FILTER,"");
00074     ISCRUTE_size(start);
00075     goto ERROR;
00076   }
00077 
00078   _maxentitynum=_start+(count-1)*(stride);
00079 
00080   if ( strlen(profilename) ) {
00081     _profilearraysize = MEDprofileSizeByName(fid,profilename);
00082     if ( _maxentitynum  > _profilearraysize  ) {
00083       MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_FILTER,MED_ERR_GSIZE_MSG);ISCRUTE(_maxentitynum);
00084       SSCRUTE(profilename);ISCRUTE(_profilearraysize);
00085       ISCRUTE_size(start);ISCRUTE_size(stride);ISCRUTE_size(count);ISCRUTE_size(blocksize);
00086       goto ERROR;
00087     }
00088   }
00089 
00090   
00091   if ( constituentselect > nconstituentpervalue) {
00092     MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_FILTER,MED_ERR_VALUE_MSG);ISCRUTE(constituentselect);
00093     ISCRUTE(nconstituentpervalue);
00094     goto ERROR;
00095   }
00096 
00097   switch(switchmode) {
00098   case MED_FULL_INTERLACE :
00099 
00100 
00101     switch(storagemode) {  
00102     case MED_GLOBAL_PFLMODE :
00103 
00104       if ( _MEDfilterBlockOfEntityFullIGlobalCr(fid,nentity,nvaluesperentity,nconstituentpervalue,constituentselect,
00105                                                 storagemode,profilename,start,stride,count,blocksize,lastblocksize,filter) < 0 ) {
00106         MED_ERR_(_ret,MED_ERR_SELECT,MED_ERR_FILTER,MED_ERR_MODE_MSG);
00107         MESSAGE("MED_FULL_INTERLACE, MED_GLOBAL_PFLMODE");
00108         goto ERROR;
00109       }
00110       break;
00111     case MED_COMPACT_PFLMODE :
00112       if ( _MEDfilterBlockOfEntityFullICompactCr(fid,nentity,nvaluesperentity,nconstituentpervalue,constituentselect,
00113                                                  storagemode,profilename,start,stride,count,blocksize,lastblocksize,filter) < 0 ) {
00114         MED_ERR_(_ret,MED_ERR_SELECT,MED_ERR_FILTER,MED_ERR_MODE_MSG);
00115         MESSAGE("MED_FULL_INTERLACE, MED_COMPACT_PFLMODE");
00116         goto ERROR;
00117       }
00118       break;
00119     default:
00120       MED_ERR_(_ret,MED_ERR_INIT,MED_ERR_FILTER,MED_ERR_MODE_MSG);
00121       MESSAGE("MED_UNDEF_PFLMODE");
00122       MESSAGE("MED_FULL_INTERLACE");
00123       SSCRUTE(profilename);
00124       ISCRUTE_int(storagemode);
00125       ISCRUTE(_profilearraysize);
00126       goto ERROR;
00127       break;
00128     }
00129 
00130     break;
00131   case MED_NO_INTERLACE :
00132 
00133     switch(storagemode) {
00134 
00135     case MED_GLOBAL_PFLMODE :
00136 
00137       if ( _MEDfilterBlockOfEntityNoIGlobalCr(fid,nentity,nvaluesperentity,nconstituentpervalue,constituentselect,
00138                                               storagemode,profilename,start,stride,count,blocksize,lastblocksize,filter) < 0 ) {
00139         MED_ERR_(_ret,MED_ERR_SELECT,MED_ERR_FILTER,MED_ERR_MODE_MSG);
00140         MESSAGE("MED_NO_INTERLACE, MED_GLOBAL_PFLMODE");
00141         goto ERROR;
00142       }
00143       break;
00144 
00145     case MED_COMPACT_PFLMODE :
00146       if ( _MEDfilterBlockOfEntityNoICompactCr(fid,nentity,nvaluesperentity,nconstituentpervalue,constituentselect,
00147                                                storagemode,profilename,start,stride,count,blocksize,lastblocksize,filter) < 0 ) {
00148         MED_ERR_(_ret,MED_ERR_SELECT,MED_ERR_FILTER,MED_ERR_MODE_MSG);
00149         MESSAGE("MED_NO_INTERLACE, MED_COMPACT_PFLMODE");
00150         goto ERROR;
00151       }
00152       break;
00153 
00154     default:
00155       MED_ERR_(_ret,MED_ERR_INIT,MED_ERR_FILTER,MED_ERR_MODE_MSG);
00156       MESSAGE("MED_UNDEF_PFLMODE");
00157       MESSAGE("MED_NO_INTERLACE");
00158       SSCRUTE(profilename);
00159       ISCRUTE_int(storagemode);
00160       ISCRUTE(_profilearraysize);
00161       goto ERROR;
00162       break;
00163     }
00164 
00165     break;
00166 
00167   default:
00168     MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_INTERLACINGMODE,MED_ERR_VALUE_MSG);
00169     ISCRUTE_int(switchmode);
00170     goto ERROR;
00171   }
00172 
00173   _ret = 0;
00174 
00175  ERROR:
00176 
00177   
00178   
00179   
00180   
00181 
00182   return _ret;
00183 }