[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen master] tools/oxenstored: Backport find_opt/update from 4.06



commit faf02c345ec0b2a5bbd45b4f94ffd59e75a42435
Author:     Edwin Török <edvin.torok@xxxxxxxxxx>
AuthorDate: Fri Jan 8 11:57:37 2021 +0000
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Fri Jan 22 18:01:34 2021 +0000

    tools/oxenstored: Backport find_opt/update from 4.06
    
    We are currently on OCaml 4.02 as minimum version.  To make the followup
    optimizations compile backport these functions from OCaml 4.06.
    
    This implementation is less efficient than the one in the 4.06 standard
    library which has access to the internals of the Map.
    
    Signed-off-by: Edwin Török <edvin.torok@xxxxxxxxxx>
    Acked-by: Christian Lindig <christian.lindig@xxxxxxxxxx>
---
 tools/ocaml/xenstored/stdext.ml | 19 +++++++++++++++++++
 tools/ocaml/xenstored/trie.ml   |  2 ++
 2 files changed, 21 insertions(+)

diff --git a/tools/ocaml/xenstored/stdext.ml b/tools/ocaml/xenstored/stdext.ml
index e1567c4dfa..116920917a 100644
--- a/tools/ocaml/xenstored/stdext.ml
+++ b/tools/ocaml/xenstored/stdext.ml
@@ -50,6 +50,25 @@ module Filename = struct
                cmd :: args |> List.map quote |> String.concat " "
 end
 
+module Map = struct
+       module Make(Ord: Map.OrderedType) = struct
+
+       include Map.Make(Ord)
+
+       let find_opt k t = try Some (find k t) with Not_found -> None
+
+       let update k f t =
+               let r = find_opt k t in
+               let r' = f r in
+               match r, r' with
+               | None, None -> t
+               | Some _, None -> remove k t
+               | Some r, Some r' when r == r' -> t
+               | _, Some r' -> add k r' t
+
+       end
+end
+
 module String = struct include String
 
 let of_char c = String.make 1 c
diff --git a/tools/ocaml/xenstored/trie.ml b/tools/ocaml/xenstored/trie.ml
index dc42535092..f513f4e608 100644
--- a/tools/ocaml/xenstored/trie.ml
+++ b/tools/ocaml/xenstored/trie.ml
@@ -13,6 +13,8 @@
  * GNU Lesser General Public License for more details.
  *)
 
+open Stdext
+
 module Node =
 struct
        type ('a,'b) t =  {
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.