xref: /trunk/main/basebmp/inc/basebmp/tools.hxx (revision 48cdb363)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef INCLUDED_BASEBMP_TOOLS_HXX
25 #define INCLUDED_BASEBMP_TOOLS_HXX
26 
27 #include <basegfx/range/b2irange.hxx>
28 #include <basegfx/point/b2ipoint.hxx>
29 #include <vigra/tuple.hxx>
30 #include <vigra/diff2d.hxx>
31 
32 namespace basebmp
33 {
topLeft(const basegfx::B2IRange & rRange)34     inline vigra::Diff2D topLeft( const basegfx::B2IRange& rRange )
35     { return vigra::Diff2D(rRange.getMinX(),rRange.getMinY()); }
36 
bottomRight(const basegfx::B2IRange & rRange)37     inline vigra::Diff2D bottomRight( const basegfx::B2IRange& rRange )
38     { return vigra::Diff2D(rRange.getMaxX(),rRange.getMaxY()); }
39 
40     template< class Iterator, class Accessor >
41     inline vigra::triple<Iterator,Iterator,Accessor>
destIterRange(Iterator const & begin,Accessor const & accessor,const basegfx::B2IRange & rRange)42     destIterRange(Iterator const&          begin,
43                   Accessor const&          accessor,
44                   const basegfx::B2IRange& rRange)
45     {
46         return vigra::triple<Iterator,Iterator,Accessor>(
47             begin + topLeft(rRange),
48             begin + bottomRight(rRange),
49             accessor);
50     }
51 
52     template< class Iterator, class Accessor >
53     inline vigra::triple<Iterator,Iterator,Accessor>
srcIterRange(Iterator const & begin,Accessor const & accessor,const basegfx::B2IRange & rRange)54     srcIterRange(Iterator const&          begin,
55                  Accessor const&          accessor,
56                  const basegfx::B2IRange& rRange)
57     {
58         return vigra::triple<Iterator,Iterator,Accessor>(
59             begin + topLeft(rRange),
60             begin + bottomRight(rRange),
61             accessor);
62     }
63 
64     template< class Iterator, class Accessor >
65     inline vigra::pair<Iterator,Accessor>
srcIter(Iterator const & begin,Accessor const & accessor,const basegfx::B2IPoint & rPt)66     srcIter(Iterator const&          begin,
67             Accessor const&          accessor,
68             const basegfx::B2IPoint& rPt)
69     {
70         return vigra::pair<Iterator,Accessor>(
71             begin + vigra::Diff2D(rPt.getX(),rPt.getY()),
72             accessor);
73     }
74 
75     template< class Iterator, class Accessor >
76     inline vigra::pair<Iterator,Accessor>
destIter(Iterator const & begin,Accessor const & accessor,const basegfx::B2IPoint & rPt)77     destIter(Iterator const&          begin,
78              Accessor const&          accessor,
79              const basegfx::B2IPoint& rPt)
80     {
81         return vigra::pair<Iterator,Accessor>(
82             begin + vigra::Diff2D(rPt.getX(),rPt.getY()),
83             accessor);
84     }
85 }
86 
87 #endif /* INCLUDED_BASEBMP_TOOLS_HXX */
88