01: package com.quadcap.sql.lock;
02:
03: /* Copyright 1999 - 2003 Quadcap Software. All rights reserved.
04: *
05: * This software is distributed under the Quadcap Free Software License.
06: * This software may be used or modified for any purpose, personal or
07: * commercial. Open Source redistributions are permitted. Commercial
08: * redistribution of larger works derived from, or works which bundle
09: * this software requires a "Commercial Redistribution License"; see
10: * http://www.quadcap.com/purchase.
11: *
12: * Redistributions qualify as "Open Source" under one of the following terms:
13: *
14: * Redistributions are made at no charge beyond the reasonable cost of
15: * materials and delivery.
16: *
17: * Redistributions are accompanied by a copy of the Source Code or by an
18: * irrevocable offer to provide a copy of the Source Code for up to three
19: * years at the cost of materials and delivery. Such redistributions
20: * must allow further use, modification, and redistribution of the Source
21: * Code under substantially the same terms as this license.
22: *
23: * Redistributions of source code must retain the copyright notices as they
24: * appear in each source code file, these license terms, and the
25: * disclaimer/limitation of liability set forth as paragraph 6 below.
26: *
27: * Redistributions in binary form must reproduce this Copyright Notice,
28: * these license terms, and the disclaimer/limitation of liability set
29: * forth as paragraph 6 below, in the documentation and/or other materials
30: * provided with the distribution.
31: *
32: * The Software is provided on an "AS IS" basis. No warranty is
33: * provided that the Software is free of defects, or fit for a
34: * particular purpose.
35: *
36: * Limitation of Liability. Quadcap Software shall not be liable
37: * for any damages suffered by the Licensee or any third party resulting
38: * from use of the Software.
39: */
40:
41: import com.quadcap.util.Debug;
42:
43: /**
44: * Lock modes supported by this package.
45: *
46: * @author Stan Bailes
47: */
48: public class LockMode {
49: public static final int NL = 0;
50: public static final int IS = 1;
51: public static final int IX = 2;
52: public static final int S = 3;
53: public static final int SIX = 4;
54: public static final int X = 5;
55: public static final int MAX = 6;
56:
57: static final String[] modes = { "NL", "IS", "IX", "S", "SIX", "X" };
58:
59: public static final String toString(int mode) {
60: return modes[mode];
61: }
62:
63: static int[] impl = {
64: 0, // NL
65:
66: ((1 << IS)), // IS
67:
68: ((1 << IX) | (1 << IS)), // IX
69:
70: ((1 << S) | (1 << IS)), // S
71:
72: ((1 << SIX) | (1 << IX) | (1 << S) | (1 << IS) | (1 << SIX)), // SIX
73:
74: ((1 << SIX) | (1 << IX) | (1 << S) | (1 << IS) | (1 << SIX) | (1 << X)) // X
75: };
76:
77: /**
78: * If you have mode 'a' already, do you even need to bother getting
79: * mode 'b'?
80: */
81: public static boolean implies(int a, int b) {
82: boolean ret = ((impl[a] >> b) & 1) != 0;
83: // Debug.println(0, "implies(" + toString(a) + ", " + toString(b) +
84: // ") = " + ret);
85: return ret;
86: }
87: }
|