# See the License for the specific language governing permissions and
# limitations under the License.
-# Services related to pathfinding of graphs using A*
-# A single graph may have different properties according to the `PathContext` used
+# A* pathfinding in graphs
#
+# A single graph may have different properties according to the `PathContext` used
#
# Usage:
#
# With a large graph it can cause a stack overflow.
#
# Instead, we serialize the nodes first and then the links.
- redef fun core_serialize_to(serializer: Serializer)
+ redef fun core_serialize_to(serializer)
do
serializer.serialize_attribute("graph", graph)
end
# Link between two nodes and associated to a graph
class Link
- auto_serializable
+ serialize
# Type of the nodes in `graph`
type N: Node
# Used to check if nodes have been searched in one pathfinding
private var pathfinding_current_evocation: Int = 0
- redef fun core_serialize_to(serializer: Serializer)
+ redef fun core_serialize_to(serializer)
do
serializer.serialize_attribute("nodes", nodes)
serializer.serialize_attribute("links", links)
# Result from path finding and a walkable path
class AStarPath[N]
- auto_serializable
+ serialize
# Total cost of this path
var total_cost: Int
end
# Context related to an evocation of pathfinding
-class PathContext
- auto_serializable
+abstract class PathContext
+ serialize
# Type of the nodes in `graph`
type N: Node
# Warning: A* is not optimize for such a case
class ConstantPathContext
super PathContext
- auto_serializable
+ serialize
redef fun worst_cost do return 1
redef fun cost(l) do return 1
# A `PathContext` for graphs with `WeightedLink`
class WeightedPathContext
super PathContext
- auto_serializable
+ serialize
redef type L: WeightedLink
self.worst_cost = worst_cost
end
- redef var worst_cost: Int is noinit
+ redef var worst_cost is noinit
redef fun cost(l) do
return l.weight
# A `Link` with a `weight`
class WeightedLink
super Link
- auto_serializable
+ serialize
# The `weight`, or cost, of this link
var weight: Int
end
# Advanced path conditions with customizable accept states
-class TargetCondition[N: Node]
- auto_serializable
+abstract class TargetCondition[N: Node]
+ serialize
# Should the pathfinding accept `node` as a goal?
fun accept(node: N): Bool is abstract