276ca6a2d03e328e9c3da1c9cc792ac8e18f8e0c
[IRC.git] / Robust / src / Benchmarks / SSJava / MP3Decoder / OutputChannels.java
1 /*\r
2  * 11/19/04 1.0 moved to LGPL.\r
3  * 12/12/99 Initial implementation.             mdm@techie.com. \r
4  *-----------------------------------------------------------------------\r
5  *   This program is free software; you can redistribute it and/or modify\r
6  *   it under the terms of the GNU Library General Public License as published\r
7  *   by the Free Software Foundation; either version 2 of the License, or\r
8  *   (at your option) any later version.\r
9  *\r
10  *   This program is distributed in the hope that it will be useful,\r
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  *   GNU Library General Public License for more details.\r
14  *\r
15  *   You should have received a copy of the GNU Library General Public\r
16  *   License along with this program; if not, write to the Free Software\r
17  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
18  *----------------------------------------------------------------------\r
19  */\r
20 \r
21 /**\r
22  * A Type-safe representation of the the supported output channel constants.\r
23  * \r
24  * This class is immutable and, hence, is thread safe.\r
25  * \r
26  * @author Mat McGowan 12/12/99\r
27  * @since 0.0.7\r
28  */\r
29 @LATTICE("B<T")\r
30 @METHODDEFAULT("OUT<THIS,THIS<IN,THISLOC=THIS,RETURNLOC=OUT")\r
31 public class OutputChannels {\r
32   /**\r
33    * Flag to indicate output should include both channels.\r
34    */\r
35   public static final int BOTH_CHANNELS = 0;\r
36 \r
37   /**\r
38    * Flag to indicate output should include the left channel only.\r
39    */\r
40   public static final int LEFT_CHANNEL = 1;\r
41 \r
42   /**\r
43    * Flag to indicate output should include the right channel only.\r
44    */\r
45   public static final int RIGHT_CHANNEL = 2;\r
46 \r
47   /**\r
48    * Flag to indicate output is mono.\r
49    */\r
50   public static final int DOWNMIX_CHANNELS = 3;\r
51 \r
52   public static final OutputChannels LEFT = new OutputChannels(LEFT_CHANNEL);\r
53   public static final OutputChannels RIGHT = new OutputChannels(RIGHT_CHANNEL);\r
54   public static final OutputChannels BOTH = new OutputChannels(BOTH_CHANNELS);\r
55   public static final OutputChannels DOWNMIX = new OutputChannels(DOWNMIX_CHANNELS);\r
56 \r
57   @LOC("T")\r
58   private/* final */int outputChannels;\r
59 \r
60   /**\r
61    * Creates an <code>OutputChannels</code> instance corresponding to the given\r
62    * channel code.\r
63    * \r
64    * @param code\r
65    *          one of the OutputChannels channel code constants.\r
66    * \r
67    * @throws IllegalArgumentException\r
68    *           if code is not a valid channel code.\r
69    */\r
70   static public OutputChannels fromInt(int code) {\r
71     switch (code) {\r
72     case LEFT_CHANNEL:\r
73       return LEFT;\r
74     case RIGHT_CHANNEL:\r
75       return RIGHT;\r
76     case BOTH_CHANNELS:\r
77       return BOTH;\r
78     case DOWNMIX_CHANNELS:\r
79       return DOWNMIX;\r
80     default:\r
81       throw new IllegalArgumentException("Invalid channel code: " + code);\r
82     }\r
83   }\r
84 \r
85   public OutputChannels(@LOC("IN") int channels) {\r
86     outputChannels = channels;\r
87 \r
88     if (channels < 0 || channels > 3)\r
89       throw new IllegalArgumentException("channels");\r
90   }\r
91 \r
92   /**\r
93    * Retrieves the code representing the desired output channels. Will be one of\r
94    * LEFT_CHANNEL, RIGHT_CHANNEL, BOTH_CHANNELS or DOWNMIX_CHANNELS.\r
95    * \r
96    * @return the channel code represented by this instance.\r
97    */\r
98   public int getChannelsOutputCode() {\r
99     return outputChannels;\r
100   }\r
101 \r
102   /**\r
103    * Retrieves the number of output channels represented by this channel output\r
104    * type.\r
105    * \r
106    * @return The number of output channels for this channel output type. This\r
107    *         will be 2 for BOTH_CHANNELS only, and 1 for all other types.\r
108    */\r
109   public int getChannelCount() {\r
110     int count = (outputChannels == BOTH_CHANNELS) ? 2 : 1;\r
111     return count;\r
112   }\r
113 \r
114   public boolean equals(Object o) {\r
115     boolean equals = false;\r
116 \r
117     if (o instanceof OutputChannels) {\r
118       OutputChannels oc = (OutputChannels) o;\r
119       equals = (oc.outputChannels == outputChannels);\r
120     }\r
121 \r
122     return equals;\r
123   }\r
124 \r
125   public int hashCode() {\r
126     return outputChannels;\r
127   }\r
128 \r
129 }\r