mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 03:05:28 -05:00
325 lines
No EOL
59 KiB
HTML
325 lines
No EOL
59 KiB
HTML
<html><head>
|
|
<link rel="stylesheet" href="style.css" type="text/css">
|
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
|
<link rel="Start" href="index.html">
|
|
<link title="Index of types" rel=Appendix href="index_types.html">
|
|
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
|
|
<link title="Index of values" rel=Appendix href="index_values.html">
|
|
<link title="Index of class methods" rel=Appendix href="index_methods.html">
|
|
<link title="Index of class types" rel=Appendix href="index_class_types.html">
|
|
<link title="Index of modules" rel=Appendix href="index_modules.html">
|
|
<link title="Index of module types" rel=Appendix href="index_module_types.html">
|
|
<link title="CCVector" rel="Chapter" href="CCVector.html">
|
|
<link title="CCHeap" rel="Chapter" href="CCHeap.html">
|
|
<link title="CCList" rel="Chapter" href="CCList.html">
|
|
<link title="CCOpt" rel="Chapter" href="CCOpt.html">
|
|
<link title="CCPair" rel="Chapter" href="CCPair.html">
|
|
<link title="CCFun" rel="Chapter" href="CCFun.html">
|
|
<link title="CCHash" rel="Chapter" href="CCHash.html">
|
|
<link title="CCInt" rel="Chapter" href="CCInt.html">
|
|
<link title="CCBool" rel="Chapter" href="CCBool.html">
|
|
<link title="CCFloat" rel="Chapter" href="CCFloat.html">
|
|
<link title="CCArray" rel="Chapter" href="CCArray.html">
|
|
<link title="CCRef" rel="Chapter" href="CCRef.html">
|
|
<link title="CCSet" rel="Chapter" href="CCSet.html">
|
|
<link title="CCOrd" rel="Chapter" href="CCOrd.html">
|
|
<link title="CCRandom" rel="Chapter" href="CCRandom.html">
|
|
<link title="CCString" rel="Chapter" href="CCString.html">
|
|
<link title="CCHashtbl" rel="Chapter" href="CCHashtbl.html">
|
|
<link title="CCMap" rel="Chapter" href="CCMap.html">
|
|
<link title="CCFormat" rel="Chapter" href="CCFormat.html">
|
|
<link title="CCIO" rel="Chapter" href="CCIO.html">
|
|
<link title="CCInt64" rel="Chapter" href="CCInt64.html">
|
|
<link title="CCChar" rel="Chapter" href="CCChar.html">
|
|
<link title="CCResult" rel="Chapter" href="CCResult.html">
|
|
<link title="CCParse" rel="Chapter" href="CCParse.html">
|
|
<link title="CCArray_slice" rel="Chapter" href="CCArray_slice.html">
|
|
<link title="CCListLabels" rel="Chapter" href="CCListLabels.html">
|
|
<link title="CCArrayLabels" rel="Chapter" href="CCArrayLabels.html">
|
|
<link title="CCEqual" rel="Chapter" href="CCEqual.html">
|
|
<link title="Containers" rel="Chapter" href="Containers.html">
|
|
<link title="CCKTree" rel="Chapter" href="CCKTree.html">
|
|
<link title="CCKList" rel="Chapter" href="CCKList.html">
|
|
<link title="CCLazy_list" rel="Chapter" href="CCLazy_list.html">
|
|
<link title="CCMultiMap" rel="Chapter" href="CCMultiMap.html">
|
|
<link title="CCMultiSet" rel="Chapter" href="CCMultiSet.html">
|
|
<link title="CCTrie" rel="Chapter" href="CCTrie.html">
|
|
<link title="CCFlatHashtbl" rel="Chapter" href="CCFlatHashtbl.html">
|
|
<link title="CCCache" rel="Chapter" href="CCCache.html">
|
|
<link title="CCPersistentHashtbl" rel="Chapter" href="CCPersistentHashtbl.html">
|
|
<link title="CCDeque" rel="Chapter" href="CCDeque.html">
|
|
<link title="CCFQueue" rel="Chapter" href="CCFQueue.html">
|
|
<link title="CCBV" rel="Chapter" href="CCBV.html">
|
|
<link title="CCMixtbl" rel="Chapter" href="CCMixtbl.html">
|
|
<link title="CCMixmap" rel="Chapter" href="CCMixmap.html">
|
|
<link title="CCRingBuffer" rel="Chapter" href="CCRingBuffer.html">
|
|
<link title="CCIntMap" rel="Chapter" href="CCIntMap.html">
|
|
<link title="CCPersistentArray" rel="Chapter" href="CCPersistentArray.html">
|
|
<link title="CCMixset" rel="Chapter" href="CCMixset.html">
|
|
<link title="CCGraph" rel="Chapter" href="CCGraph.html">
|
|
<link title="CCHashSet" rel="Chapter" href="CCHashSet.html">
|
|
<link title="CCBitField" rel="Chapter" href="CCBitField.html">
|
|
<link title="CCHashTrie" rel="Chapter" href="CCHashTrie.html">
|
|
<link title="CCWBTree" rel="Chapter" href="CCWBTree.html">
|
|
<link title="CCRAL" rel="Chapter" href="CCRAL.html">
|
|
<link title="CCImmutArray" rel="Chapter" href="CCImmutArray.html">
|
|
<link title="CCHet" rel="Chapter" href="CCHet.html">
|
|
<link title="CCZipper" rel="Chapter" href="CCZipper.html">
|
|
<link title="CCPool" rel="Chapter" href="CCPool.html">
|
|
<link title="CCLock" rel="Chapter" href="CCLock.html">
|
|
<link title="CCSemaphore" rel="Chapter" href="CCSemaphore.html">
|
|
<link title="CCThread" rel="Chapter" href="CCThread.html">
|
|
<link title="CCBlockingQueue" rel="Chapter" href="CCBlockingQueue.html">
|
|
<link title="CCTimer" rel="Chapter" href="CCTimer.html">
|
|
<link title="CCUnix" rel="Chapter" href="CCUnix.html">
|
|
<link title="CCSexp" rel="Chapter" href="CCSexp.html">
|
|
<link title="CCSexp_lex" rel="Chapter" href="CCSexp_lex.html"><title>Containers doc : CCGraph</title>
|
|
</head>
|
|
<body>
|
|
<code class="code"><span class="keyword">sig</span>
|
|
<span class="keyword">type</span> <span class="keywordsign">'</span>a sequence = (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> unit
|
|
<span class="keyword">type</span> <span class="keywordsign">'</span>a sequence_once = <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.sequence
|
|
<span class="keyword">exception</span> <span class="constructor">Sequence_once</span>
|
|
<span class="keyword">module</span> <span class="constructor">Seq</span> :
|
|
<span class="keyword">sig</span>
|
|
<span class="keyword">type</span> <span class="keywordsign">'</span>a t = <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.sequence
|
|
<span class="keyword">val</span> return : <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.sequence
|
|
<span class="keyword">val</span> ( >>= ) :
|
|
<span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t <span class="keywordsign">-></span> (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t
|
|
<span class="keyword">val</span> map : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t
|
|
<span class="keyword">val</span> filter_map :
|
|
(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b option) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t
|
|
<span class="keyword">val</span> iter : (<span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t <span class="keywordsign">-></span> unit
|
|
<span class="keyword">val</span> fold : (<span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span> <span class="keywordsign">'</span>b <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>b
|
|
<span class="keyword">val</span> to_list : <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">Seq</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a list
|
|
<span class="keyword">end</span>
|
|
<span class="keyword">type</span> (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) t = <span class="keywordsign">'</span>v <span class="keywordsign">-></span> (<span class="keywordsign">'</span>e * <span class="keywordsign">'</span>v) <span class="constructor">CCGraph</span>.sequence
|
|
<span class="keyword">type</span> (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) graph = (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t
|
|
<span class="keyword">val</span> make : (<span class="keywordsign">'</span>v <span class="keywordsign">-></span> (<span class="keywordsign">'</span>e * <span class="keywordsign">'</span>v) <span class="constructor">CCGraph</span>.sequence) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t
|
|
<span class="keyword">type</span> <span class="keywordsign">'</span>v tag_set = { get_tag : <span class="keywordsign">'</span>v <span class="keywordsign">-></span> bool; set_tag : <span class="keywordsign">'</span>v <span class="keywordsign">-></span> unit; }
|
|
<span class="keyword">type</span> (<span class="keywordsign">'</span>k, <span class="keywordsign">'</span>a) table = {
|
|
mem : <span class="keywordsign">'</span>k <span class="keywordsign">-></span> bool;
|
|
find : <span class="keywordsign">'</span>k <span class="keywordsign">-></span> <span class="keywordsign">'</span>a;
|
|
add : <span class="keywordsign">'</span>k <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit;
|
|
}
|
|
<span class="keyword">type</span> <span class="keywordsign">'</span>a set = (<span class="keywordsign">'</span>a, unit) <span class="constructor">CCGraph</span>.table
|
|
<span class="keyword">val</span> mk_table :
|
|
?eq:(<span class="keywordsign">'</span>k <span class="keywordsign">-></span> <span class="keywordsign">'</span>k <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span>
|
|
?hash:(<span class="keywordsign">'</span>k <span class="keywordsign">-></span> int) <span class="keywordsign">-></span> int <span class="keywordsign">-></span> (<span class="keywordsign">'</span>k, <span class="keywordsign">'</span>a) <span class="constructor">CCGraph</span>.table
|
|
<span class="keyword">val</span> mk_map : ?cmp:(<span class="keywordsign">'</span>k <span class="keywordsign">-></span> <span class="keywordsign">'</span>k <span class="keywordsign">-></span> int) <span class="keywordsign">-></span> unit <span class="keywordsign">-></span> (<span class="keywordsign">'</span>k, <span class="keywordsign">'</span>a) <span class="constructor">CCGraph</span>.table
|
|
<span class="keyword">type</span> <span class="keywordsign">'</span>a bag = {
|
|
push : <span class="keywordsign">'</span>a <span class="keywordsign">-></span> unit;
|
|
is_empty : unit <span class="keywordsign">-></span> bool;
|
|
pop : unit <span class="keywordsign">-></span> <span class="keywordsign">'</span>a;
|
|
}
|
|
<span class="keyword">val</span> mk_queue : unit <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.bag
|
|
<span class="keyword">val</span> mk_stack : unit <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.bag
|
|
<span class="keyword">val</span> mk_heap : leq:(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.bag
|
|
<span class="keyword">module</span> <span class="constructor">Traverse</span> :
|
|
<span class="keyword">sig</span>
|
|
<span class="keyword">type</span> (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) path = (<span class="keywordsign">'</span>v * <span class="keywordsign">'</span>e * <span class="keywordsign">'</span>v) list
|
|
<span class="keyword">val</span> generic :
|
|
?tbl:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.set <span class="keywordsign">-></span>
|
|
bag:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.bag <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence_once
|
|
<span class="keyword">val</span> generic_tag :
|
|
tags:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.tag_set <span class="keywordsign">-></span>
|
|
bag:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.bag <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence_once
|
|
<span class="keyword">val</span> dfs :
|
|
?tbl:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.set <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence_once
|
|
<span class="keyword">val</span> dfs_tag :
|
|
tags:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.tag_set <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence_once
|
|
<span class="keyword">val</span> bfs :
|
|
?tbl:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.set <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence_once
|
|
<span class="keyword">val</span> bfs_tag :
|
|
tags:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.tag_set <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence_once
|
|
<span class="keyword">val</span> dijkstra :
|
|
?tbl:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.set <span class="keywordsign">-></span>
|
|
?dist:(<span class="keywordsign">'</span>e <span class="keywordsign">-></span> int) <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span>
|
|
(<span class="keywordsign">'</span>v * int * (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.path) <span class="constructor">CCGraph</span>.sequence_once
|
|
<span class="keyword">val</span> dijkstra_tag :
|
|
?dist:(<span class="keywordsign">'</span>e <span class="keywordsign">-></span> int) <span class="keywordsign">-></span>
|
|
tags:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.tag_set <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span>
|
|
(<span class="keywordsign">'</span>v * int * (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.path) <span class="constructor">CCGraph</span>.sequence_once
|
|
<span class="keyword">module</span> <span class="constructor">Event</span> :
|
|
<span class="keyword">sig</span>
|
|
<span class="keyword">type</span> edge_kind = [ <span class="keywordsign">`</span><span class="constructor">Back</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Cross</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Forward</span> ]
|
|
<span class="keyword">type</span> (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) t =
|
|
[ <span class="keywordsign">`</span><span class="constructor">Edge</span> <span class="keyword">of</span> <span class="keywordsign">'</span>v * <span class="keywordsign">'</span>e * <span class="keywordsign">'</span>v * <span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.edge_kind
|
|
<span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Enter</span> <span class="keyword">of</span> <span class="keywordsign">'</span>v * int * (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.path
|
|
<span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Exit</span> <span class="keyword">of</span> <span class="keywordsign">'</span>v ]
|
|
<span class="keyword">val</span> get_vertex :
|
|
(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t <span class="keywordsign">-></span>
|
|
(<span class="keywordsign">'</span>v * [ <span class="keywordsign">`</span><span class="constructor">Enter</span> <span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Exit</span> ]) option
|
|
<span class="keyword">val</span> get_enter : (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>v option
|
|
<span class="keyword">val</span> get_exit : (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>v option
|
|
<span class="keyword">val</span> get_edge :
|
|
(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t <span class="keywordsign">-></span> (<span class="keywordsign">'</span>v * <span class="keywordsign">'</span>e * <span class="keywordsign">'</span>v) option
|
|
<span class="keyword">val</span> get_edge_kind :
|
|
(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t <span class="keywordsign">-></span>
|
|
(<span class="keywordsign">'</span>v * <span class="keywordsign">'</span>e * <span class="keywordsign">'</span>v * <span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.edge_kind) option
|
|
<span class="keyword">val</span> dfs :
|
|
?tbl:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.set <span class="keywordsign">-></span>
|
|
?eq:(<span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.graph <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span>
|
|
(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t <span class="constructor">CCGraph</span>.sequence_once
|
|
<span class="keyword">val</span> dfs_tag :
|
|
?eq:(<span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span>
|
|
tags:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.tag_set <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.graph <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span>
|
|
(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Traverse</span>.<span class="constructor">Event</span>.t <span class="constructor">CCGraph</span>.sequence_once
|
|
<span class="keyword">end</span>
|
|
<span class="keyword">end</span>
|
|
<span class="keyword">val</span> is_dag :
|
|
?tbl:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.set <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>a) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span> bool
|
|
<span class="keyword">exception</span> <span class="constructor">Has_cycle</span>
|
|
<span class="keyword">val</span> topo_sort :
|
|
?eq:(<span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span>
|
|
?rev:bool <span class="keywordsign">-></span>
|
|
?tbl:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.set <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span> <span class="keywordsign">'</span>v list
|
|
<span class="keyword">val</span> topo_sort_tag :
|
|
?eq:(<span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span>
|
|
?rev:bool <span class="keywordsign">-></span>
|
|
tags:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.tag_set <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span> <span class="keywordsign">'</span>v list
|
|
<span class="keyword">module</span> <span class="constructor">Lazy_tree</span> :
|
|
<span class="keyword">sig</span>
|
|
<span class="keyword">type</span> (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) t = {
|
|
vertex : <span class="keywordsign">'</span>v;
|
|
children : (<span class="keywordsign">'</span>e * (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Lazy_tree</span>.t) list <span class="constructor">Lazy</span>.t;
|
|
}
|
|
<span class="keyword">val</span> map_v :
|
|
(<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="keywordsign">'</span>b) <span class="keywordsign">-></span>
|
|
(<span class="keywordsign">'</span>a, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Lazy_tree</span>.t <span class="keywordsign">-></span> (<span class="keywordsign">'</span>b, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Lazy_tree</span>.t
|
|
<span class="keyword">val</span> fold_v :
|
|
(<span class="keywordsign">'</span>acc <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="keywordsign">'</span>acc) <span class="keywordsign">-></span> <span class="keywordsign">'</span>acc <span class="keywordsign">-></span> (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>a) <span class="constructor">CCGraph</span>.<span class="constructor">Lazy_tree</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>acc
|
|
<span class="keyword">end</span>
|
|
<span class="keyword">val</span> spanning_tree :
|
|
?tbl:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.set <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Lazy_tree</span>.t
|
|
<span class="keyword">val</span> spanning_tree_tag :
|
|
tags:<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.tag_set <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.<span class="constructor">Lazy_tree</span>.t
|
|
<span class="keyword">type</span> <span class="keywordsign">'</span>v scc_state
|
|
<span class="keyword">val</span> scc :
|
|
?tbl:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.scc_state) <span class="constructor">CCGraph</span>.table <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span> <span class="keywordsign">'</span>v list <span class="constructor">CCGraph</span>.sequence_once
|
|
<span class="keyword">module</span> <span class="constructor">Dot</span> :
|
|
<span class="keyword">sig</span>
|
|
<span class="keyword">type</span> attribute =
|
|
[ <span class="keywordsign">`</span><span class="constructor">Color</span> <span class="keyword">of</span> string
|
|
<span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Label</span> <span class="keyword">of</span> string
|
|
<span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Other</span> <span class="keyword">of</span> string * string
|
|
<span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Shape</span> <span class="keyword">of</span> string
|
|
<span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Style</span> <span class="keyword">of</span> string
|
|
<span class="keywordsign">|</span> <span class="keywordsign">`</span><span class="constructor">Weight</span> <span class="keyword">of</span> int ]
|
|
<span class="keyword">type</span> vertex_state
|
|
<span class="keyword">val</span> pp :
|
|
?tbl:(<span class="keywordsign">'</span>v, <span class="constructor">CCGraph</span>.<span class="constructor">Dot</span>.vertex_state) <span class="constructor">CCGraph</span>.table <span class="keywordsign">-></span>
|
|
?eq:(<span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span>
|
|
?attrs_v:(<span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="constructor">CCGraph</span>.<span class="constructor">Dot</span>.attribute list) <span class="keywordsign">-></span>
|
|
?attrs_e:(<span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="constructor">CCGraph</span>.<span class="constructor">Dot</span>.attribute list) <span class="keywordsign">-></span>
|
|
?name:string <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span> <span class="constructor">Format</span>.formatter <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> unit
|
|
<span class="keyword">val</span> pp_seq :
|
|
?tbl:(<span class="keywordsign">'</span>v, <span class="constructor">CCGraph</span>.<span class="constructor">Dot</span>.vertex_state) <span class="constructor">CCGraph</span>.table <span class="keywordsign">-></span>
|
|
?eq:(<span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span>
|
|
?attrs_v:(<span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="constructor">CCGraph</span>.<span class="constructor">Dot</span>.attribute list) <span class="keywordsign">-></span>
|
|
?attrs_e:(<span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="constructor">CCGraph</span>.<span class="constructor">Dot</span>.attribute list) <span class="keywordsign">-></span>
|
|
?name:string <span class="keywordsign">-></span>
|
|
graph:(<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t <span class="keywordsign">-></span>
|
|
<span class="constructor">Format</span>.formatter <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span> unit
|
|
<span class="keyword">val</span> with_out : string <span class="keywordsign">-></span> (<span class="constructor">Format</span>.formatter <span class="keywordsign">-></span> <span class="keywordsign">'</span>a) <span class="keywordsign">-></span> <span class="keywordsign">'</span>a
|
|
<span class="keyword">end</span>
|
|
<span class="keyword">type</span> (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) mut_graph = {
|
|
graph : (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>e) <span class="constructor">CCGraph</span>.t;
|
|
add_edge : <span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="keywordsign">'</span>e <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> unit;
|
|
remove : <span class="keywordsign">'</span>v <span class="keywordsign">-></span> unit;
|
|
}
|
|
<span class="keyword">val</span> mk_mut_tbl :
|
|
?eq:(<span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span>
|
|
?hash:(<span class="keywordsign">'</span>v <span class="keywordsign">-></span> int) <span class="keywordsign">-></span> int <span class="keywordsign">-></span> (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>a) <span class="constructor">CCGraph</span>.mut_graph
|
|
<span class="keyword">module</span> <span class="keyword">type</span> <span class="constructor">MAP</span> =
|
|
<span class="keyword">sig</span>
|
|
<span class="keyword">type</span> vertex
|
|
<span class="keyword">type</span> <span class="keywordsign">'</span>a t
|
|
<span class="keyword">val</span> as_graph :
|
|
<span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span> (<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex, <span class="keywordsign">'</span>a) <span class="constructor">CCGraph</span>.graph
|
|
<span class="keyword">val</span> empty : <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t
|
|
<span class="keyword">val</span> add_edge :
|
|
<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>a <span class="keywordsign">-></span> <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t
|
|
<span class="keyword">val</span> remove_edge :
|
|
<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex <span class="keywordsign">-></span>
|
|
<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t
|
|
<span class="keyword">val</span> add : <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t
|
|
<span class="keyword">val</span> remove : <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t
|
|
<span class="keyword">val</span> union : <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t
|
|
<span class="keyword">val</span> vertices : <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span> <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex <span class="constructor">CCGraph</span>.sequence
|
|
<span class="keyword">val</span> vertices_l : <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span> <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex list
|
|
<span class="keyword">val</span> of_list :
|
|
(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex * <span class="keywordsign">'</span>a * <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex) list <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t
|
|
<span class="keyword">val</span> add_list :
|
|
(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex * <span class="keywordsign">'</span>a * <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex) list <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t
|
|
<span class="keyword">val</span> to_list :
|
|
<span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span>
|
|
(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex * <span class="keywordsign">'</span>a * <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex) list
|
|
<span class="keyword">val</span> of_seq :
|
|
(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex * <span class="keywordsign">'</span>a * <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex) <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t
|
|
<span class="keyword">val</span> add_seq :
|
|
(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex * <span class="keywordsign">'</span>a * <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex) <span class="constructor">CCGraph</span>.sequence <span class="keywordsign">-></span>
|
|
<span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t
|
|
<span class="keyword">val</span> to_seq :
|
|
<span class="keywordsign">'</span>a <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.t <span class="keywordsign">-></span>
|
|
(<span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex * <span class="keywordsign">'</span>a * <span class="constructor">CCGraph</span>.<span class="constructor">MAP</span>.vertex) <span class="constructor">CCGraph</span>.sequence
|
|
<span class="keyword">end</span>
|
|
<span class="keyword">module</span> <span class="constructor">Map</span> :
|
|
<span class="keyword">functor</span> (<span class="constructor">O</span> : <span class="constructor">Map</span>.<span class="constructor">OrderedType</span>) <span class="keywordsign">-></span>
|
|
<span class="keyword">sig</span>
|
|
<span class="keyword">type</span> vertex = <span class="constructor">O</span>.t
|
|
<span class="keyword">type</span> <span class="keywordsign">'</span>a t
|
|
<span class="keyword">val</span> as_graph : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (vertex, <span class="keywordsign">'</span>a) graph
|
|
<span class="keyword">val</span> empty : <span class="keywordsign">'</span>a t
|
|
<span class="keyword">val</span> add_edge : vertex <span class="keywordsign">-></span> <span class="keywordsign">'</span>a <span class="keywordsign">-></span> vertex <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t
|
|
<span class="keyword">val</span> remove_edge : vertex <span class="keywordsign">-></span> vertex <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t
|
|
<span class="keyword">val</span> add : vertex <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t
|
|
<span class="keyword">val</span> remove : vertex <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t
|
|
<span class="keyword">val</span> union : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t
|
|
<span class="keyword">val</span> vertices : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> vertex sequence
|
|
<span class="keyword">val</span> vertices_l : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> vertex list
|
|
<span class="keyword">val</span> of_list : (vertex * <span class="keywordsign">'</span>a * vertex) list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t
|
|
<span class="keyword">val</span> add_list : (vertex * <span class="keywordsign">'</span>a * vertex) list <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t
|
|
<span class="keyword">val</span> to_list : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (vertex * <span class="keywordsign">'</span>a * vertex) list
|
|
<span class="keyword">val</span> of_seq : (vertex * <span class="keywordsign">'</span>a * vertex) sequence <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t
|
|
<span class="keyword">val</span> add_seq : (vertex * <span class="keywordsign">'</span>a * vertex) sequence <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> <span class="keywordsign">'</span>a t
|
|
<span class="keyword">val</span> to_seq : <span class="keywordsign">'</span>a t <span class="keywordsign">-></span> (vertex * <span class="keywordsign">'</span>a * vertex) sequence
|
|
<span class="keyword">end</span>
|
|
<span class="keyword">val</span> of_list :
|
|
?eq:(<span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="keywordsign">'</span>v <span class="keywordsign">-></span> bool) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>v * <span class="keywordsign">'</span>v) list <span class="keywordsign">-></span> (<span class="keywordsign">'</span>v, unit) <span class="constructor">CCGraph</span>.t
|
|
<span class="keyword">val</span> of_hashtbl : (<span class="keywordsign">'</span>v, <span class="keywordsign">'</span>v list) <span class="constructor">Hashtbl</span>.t <span class="keywordsign">-></span> (<span class="keywordsign">'</span>v, unit) <span class="constructor">CCGraph</span>.t
|
|
<span class="keyword">val</span> of_fun : (<span class="keywordsign">'</span>v <span class="keywordsign">-></span> <span class="keywordsign">'</span>v list) <span class="keywordsign">-></span> (<span class="keywordsign">'</span>v, unit) <span class="constructor">CCGraph</span>.t
|
|
<span class="keyword">val</span> divisors_graph : (int, unit) <span class="constructor">CCGraph</span>.t
|
|
<span class="keyword">end</span></code></body></html> |