98 lines
3.3 KiB
C++
98 lines
3.3 KiB
C++
/*
|
|
open source routing machine
|
|
Copyright (C) Dennis Luxen, others 2010
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU AFFERO General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
or see http://www.gnu.org/licenses/agpl.txt.
|
|
*/
|
|
|
|
|
|
|
|
#ifndef RESTRICTION_H_
|
|
#define RESTRICTION_H_
|
|
|
|
#include <climits>
|
|
|
|
struct _Restriction {
|
|
NodeID viaNode;
|
|
NodeID fromNode;
|
|
NodeID toNode;
|
|
struct Bits { //mostly unused
|
|
Bits() : isOnly(false), unused1(false), unused2(false), unused3(false), unused4(false), unused5(false), unused6(false), unused7(false) {}
|
|
char isOnly:1;
|
|
char unused1:1;
|
|
char unused2:1;
|
|
char unused3:1;
|
|
char unused4:1;
|
|
char unused5:1;
|
|
char unused6:1;
|
|
char unused7:1;
|
|
} flags;
|
|
|
|
_Restriction(NodeID vn) : viaNode(vn), fromNode(UINT_MAX), toNode(UINT_MAX) { }
|
|
_Restriction(bool isOnly = false) : viaNode(UINT_MAX), fromNode(UINT_MAX), toNode(UINT_MAX) {
|
|
flags.isOnly = isOnly;
|
|
}
|
|
};
|
|
|
|
inline bool CmpRestrictionByFrom ( _Restriction a, _Restriction b) { return (a.fromNode < b.fromNode); }
|
|
|
|
struct _RawRestrictionContainer {
|
|
_Restriction restriction;
|
|
EdgeID fromWay;
|
|
EdgeID toWay;
|
|
unsigned viaNode;
|
|
|
|
_RawRestrictionContainer(EdgeID f, EdgeID t, NodeID vn, unsigned vw) : fromWay(f), toWay(t), viaNode(vw) { restriction.viaNode = vn;}
|
|
_RawRestrictionContainer(bool isOnly = false) : fromWay(UINT_MAX), toWay(UINT_MAX), viaNode(UINT_MAX) { restriction.flags.isOnly = isOnly;}
|
|
|
|
static _RawRestrictionContainer min_value() {
|
|
return _RawRestrictionContainer(0, 0, 0, 0);
|
|
}
|
|
static _RawRestrictionContainer max_value() {
|
|
return _RawRestrictionContainer(UINT_MAX, UINT_MAX, UINT_MAX, UINT_MAX);
|
|
}
|
|
};
|
|
|
|
struct CmpRestrictionContainerByFrom: public std::binary_function<_RawRestrictionContainer, _RawRestrictionContainer, bool> {
|
|
typedef _RawRestrictionContainer value_type;
|
|
bool operator () (const _RawRestrictionContainer & a, const _RawRestrictionContainer & b) const {
|
|
return a.fromWay < b.fromWay;
|
|
}
|
|
value_type max_value() {
|
|
return _RawRestrictionContainer::max_value();
|
|
}
|
|
value_type min_value() {
|
|
return _RawRestrictionContainer::min_value();
|
|
}
|
|
};
|
|
|
|
struct CmpRestrictionContainerByTo: public std::binary_function<_RawRestrictionContainer, _RawRestrictionContainer, bool> {
|
|
typedef _RawRestrictionContainer value_type;
|
|
bool operator () (const _RawRestrictionContainer & a, const _RawRestrictionContainer & b) const {
|
|
return a.toWay < b.toWay;
|
|
}
|
|
value_type max_value() {
|
|
return _RawRestrictionContainer::max_value();
|
|
}
|
|
value_type min_value() {
|
|
return _RawRestrictionContainer::min_value();
|
|
}
|
|
};
|
|
|
|
|
|
|
|
#endif /* RESTRICTION_H_ */
|