History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/java2d/StateTracker.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/java2d/StateTracker.java+104−0
@@ -0,0 +1,104 @@
1/*
2 * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package sun.java2d;
27
28/**
29 * This interface is used to track changes to the complex data of an
30 * object that implements the StateTrackable interface.
31 * <p>
32 * The usage pattern for code accessing the trackable data is as follows:
33 * <pre>
34 * StateTrackable trackedobject;
35 * MyInfo cacheddata;
36 * StateTracker cachetracker;
37 * public synchronized MyInfo getInfoAbout(StateTrackable obj) {
38 * if (trackedobject != obj || !cachetracker.isCurrent()) {
39 * // Note: Always call getStateTracker() before
40 * // caching any data about the objct...
41 * cachetracker = obj.getStateTracker();
42 * cacheddata = calculateInfoFrom(obj);
43 * trackedobject = obj;
44 * }
45 * return cacheddata;
46 * }
47 * </pre>
48 * Note that the sample code above works correctly regardless of the
49 * {@link StateTrackable.State State} of the complex data of the object,
50 * but it may be inefficient to store precalculated information about
51 * an object whose current {@link StateTrackable.State State} is
52 * {@link StateTrackable.State#UNTRACKABLE UNTRACKABLE}
53 * and it is unnecessary to perform the {@link #isCurrent} test for
54 * data whose current {@link StateTrackable.State State} is
55 * {@link StateTrackable.State#IMMUTABLE IMMUTABLE}.
56 * Optimizations to the sample code for either or both of those terminal
57 * States may be of benefit for some use cases, but is left out of the
58 * example to reduce its complexity.
59 *
60 * @see StateTrackable.State
61 * @since 1.7
62 */
63public interface StateTracker {
64 /**
65 * An implementation of the StateTracker interface which
66 * always returns true.
67 * This implementation is useful for objects whose current
68 * {@link StateTrackable.State State} is
69 * {@link StateTrackable.State#IMMUTABLE IMMUTABLE}.
70 * @since 1.7
71 */
72 public StateTracker ALWAYS_CURRENT = new StateTracker() {
73 public boolean isCurrent() {
74 return true;
75 }
76 };
77
78 /**
79 * An implementation of the StateTracker interface which
80 * always returns false.
81 * This implementation is useful for objects whose current
82 * {@link StateTrackable.State State} is
83 * {@link StateTrackable.State#UNTRACKABLE UNTRACKABLE}.
84 * This implementation may also be useful for some objects
85 * whose current {@link StateTrackable.State State} is
86 * {@link StateTrackable.State#DYNAMIC DYNAMIC}.
87 * @since 1.7
88 */
89 public StateTracker NEVER_CURRENT = new StateTracker() {
90 public boolean isCurrent() {
91 return false;
92 }
93 };
94
95 /**
96 * Returns true iff the contents of the complex data of the
97 * associated StateTrackable object have not changed since
98 * the time that this StateTracker was returned from its
99 * getStateTracker() method.
100 * @see StateTrackable
101 * @since 1.7
102 */
103 public boolean isCurrent();
104}