1(*
2 * Copyright (C) 2006-2007 XenSource Ltd.
3 * Copyright (C) 2008      Citrix Ltd.
4 * Author Vincent Hanquez <vincent.hanquez@eu.citrix.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation; version 2.1 only. with the special
9 * exception on linking described in file LICENSE.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU Lesser General Public License for more details.
15 *)
16
17type operation = Debug | Directory | Read | Getperms |
18                 Watch | Unwatch | Transaction_start |
19                 Transaction_end | Introduce | Release |
20                 Getdomainpath | Write | Mkdir | Rm |
21                 Setperms | Watchevent | Error | Isintroduced |
22                 Resume | Set_target | Reset_watches |
23                 Invalid
24
25let operation_c_mapping =
26	[| Debug; Directory; Read; Getperms;
27           Watch; Unwatch; Transaction_start;
28           Transaction_end; Introduce; Release;
29           Getdomainpath; Write; Mkdir; Rm;
30           Setperms; Watchevent; Error; Isintroduced;
31           Resume; Set_target; Reset_watches |]
32let size = Array.length operation_c_mapping
33
34let array_search el a =
35	let len = Array.length a in
36	let rec search i =
37		if i > len then raise Not_found;
38		if a.(i) = el then i else search (i + 1) in
39	search 0
40
41let of_cval i =
42	if i >= 0 && i < size
43	then operation_c_mapping.(i)
44	else Invalid
45
46let to_cval op =
47	array_search op operation_c_mapping
48
49let to_string ty =
50	match ty with
51	| Debug			-> "DEBUG"
52	| Directory		-> "DIRECTORY"
53	| Read			-> "READ"
54	| Getperms		-> "GET_PERMS"
55	| Watch			-> "WATCH"
56	| Unwatch		-> "UNWATCH"
57	| Transaction_start	-> "TRANSACTION_START"
58	| Transaction_end	-> "TRANSACTION_END"
59	| Introduce		-> "INTRODUCE"
60	| Release		-> "RELEASE"
61	| Getdomainpath		-> "GET_DOMAIN_PATH"
62	| Write			-> "WRITE"
63	| Mkdir			-> "MKDIR"
64	| Rm			-> "RM"
65	| Setperms		-> "SET_PERMS"
66	| Watchevent		-> "WATCH_EVENT"
67	| Error			-> "ERROR"
68	| Isintroduced		-> "IS_INTRODUCED"
69	| Resume		-> "RESUME"
70	| Set_target		-> "SET_TARGET"
71	| Reset_watches         -> "RESET_WATCHES"
72	| Invalid		-> "INVALID"
73