/[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 3157 by schoenebeck, Mon May 8 17:30:10 2017 UTC revision 3307 by schoenebeck, Tue Jul 11 23:06:38 2017 UTC
# Line 122  template<class T> inline std::string ToS Line 122  template<class T> inline std::string ToS
122      return ss.str();      return ss.str();
123  }  }
124    
125    inline static bool endsWith(const std::string& haystack, const std::string& needle, bool caseSensitive) {
126        if (haystack.size() < needle.size()) return false;
127        const std::string sub = haystack.substr(haystack.size() - needle.size(), needle.size());
128        return (caseSensitive) ? (sub == needle) : (!strcasecmp(sub.c_str(), needle.c_str()));
129    }
130    
131  inline int getDimensionIndex(gig::dimension_t type, gig::Region* rgn) {  inline int getDimensionIndex(gig::dimension_t type, gig::Region* rgn) {
132      for (uint i = 0; i < rgn->Dimensions; ++i)      for (uint i = 0; i < rgn->Dimensions; ++i)
133          if (rgn->pDimensionDefinitions[i].dimension == type)          if (rgn->pDimensionDefinitions[i].dimension == type)
# Line 205  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  }  }
# Line 224  inline gig::DimensionRegion* dimensionRe Line 251  inline gig::DimensionRegion* dimensionRe
251      return NULL;      return NULL;
252  }  }
253    
254    template<typename T_Message>
255    class SignalGuard {
256    public:
257        SignalGuard(sigc::signal<void, T_Message>& start, sigc::signal<void, T_Message>& end, T_Message message)
258            : m_end(end), m_message(message)
259        {
260            if (message) start.emit(message);
261        }
262    
263        virtual ~SignalGuard() {
264            if (m_message) m_end.emit(m_message);
265        }
266    protected:
267        sigc::signal<void, T_Message>& m_end;
268        T_Message m_message;
269    };
270    
271  #endif // GIGEDIT_GLOBAL_H  #endif // GIGEDIT_GLOBAL_H

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

  ViewVC Help
Powered by ViewVC