/[svn]/gigedit/trunk/src/gigedit/global.h
ViewVC logotype

Diff of /gigedit/trunk/src/gigedit/global.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3177 by schoenebeck, Thu May 11 20:59:46 2017 UTC revision 3307 by schoenebeck, Tue Jul 11 23:06:38 2017 UTC
# Line 211  inline DimensionCase dimensionCaseOf(gig Line 211  inline DimensionCase dimensionCaseOf(gig
211      return dimCase;      return dimCase;
212  }  }
213    
214  inline std::vector<gig::DimensionRegion*> dimensionRegionsMatching(const DimensionCase& dimCase, gig::Region* rgn) {  /**
215     * Checks whether the passed dimension zones are within the boundaries of the
216     * defined dimensions. This is especially relevant if there are dimensions
217     * defined with an amount not equal to a power of two, in that case there are
218     * unused dimensions regions which should be ignored.
219     */
220    inline bool isUsedCase(const DimensionCase& c, gig::Region* rgn) {
221        for (int d = 0; d < rgn->Dimensions; ++d) {
222            gig::dimension_t type = rgn->pDimensionDefinitions[d].dimension;
223            if (c.find(type) == c.end()) continue;
224            int zone = c.find(type)->second;
225            if (zone < 0 || zone >= rgn->pDimensionDefinitions[d].zones)
226                return false;
227        }
228        return true;
229    }
230    
231    inline std::vector<gig::DimensionRegion*> dimensionRegionsMatching(
232        const DimensionCase& dimCase, gig::Region* rgn, bool skipUnusedZones = false)
233    {
234      std::vector<gig::DimensionRegion*> v;      std::vector<gig::DimensionRegion*> v;
235      for (int idr = 0; idr < 256; ++idr) {      for (int idr = 0; idr < 256; ++idr) {
236          if (!rgn->pDimensionRegions[idr]) continue;          if (!rgn->pDimensionRegions[idr]) continue;
237          DimensionCase c = dimensionCaseOf(rgn->pDimensionRegions[idr]);          DimensionCase c = dimensionCaseOf(rgn->pDimensionRegions[idr]);
238          if (!dimCase.isViolating(c)) v.push_back(rgn->pDimensionRegions[idr]);          if (dimCase.isViolating(c)) continue;
239            if (skipUnusedZones && !isUsedCase(c, rgn)) continue;
240            v.push_back(rgn->pDimensionRegions[idr]);
241      }      }
242      return v;      return v;
243  }  }

Legend:
Removed from v.3177  
changed lines
  Added in v.3307

  ViewVC Help
Powered by ViewVC