1 ///////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
4 // Digital Ltd. LLC
5 //
6 // All rights reserved.
7 //
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions are
10 // met:
11 // * Redistributions of source code must retain the above copyright
12 // notice, this list of conditions and the following disclaimer.
13 // * Redistributions in binary form must reproduce the above
14 // copyright notice, this list of conditions and the following disclaimer
15 // in the documentation and/or other materials provided with the
16 // distribution.
17 // * Neither the name of Industrial Light & Magic nor the names of
18 // its contributors may be used to endorse or promote products derived
19 // from this software without specific prior written permission.
20 //
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 //
33 ///////////////////////////////////////////////////////////////////////////
34
35
36 //-----------------------------------------------------------------------------
37 //
38 // class KeyCode
39 //
40 //-----------------------------------------------------------------------------
41
42 #include <ImfKeyCode.h>
43 #include "Iex.h"
44
45 namespace Imf {
46
47
KeyCode(int filmMfcCode,int filmType,int prefix,int count,int perfOffset,int perfsPerFrame,int perfsPerCount)48 KeyCode::KeyCode (int filmMfcCode,
49 int filmType,
50 int prefix,
51 int count,
52 int perfOffset,
53 int perfsPerFrame,
54 int perfsPerCount)
55 {
56 setFilmMfcCode (filmMfcCode);
57 setFilmType (filmType);
58 setPrefix (prefix);
59 setCount (count);
60 setPerfOffset (perfOffset);
61 setPerfsPerFrame (perfsPerFrame);
62 setPerfsPerCount (perfsPerCount);
63 }
64
65
KeyCode(const KeyCode & other)66 KeyCode::KeyCode (const KeyCode &other)
67 {
68 _filmMfcCode = other._filmMfcCode;
69 _filmType = other._filmType;
70 _prefix = other._prefix;
71 _count = other._count;
72 _perfOffset = other._perfOffset;
73 _perfsPerFrame = other._perfsPerFrame;
74 _perfsPerCount = other._perfsPerCount;
75 }
76
77
78 KeyCode &
operator =(const KeyCode & other)79 KeyCode::operator = (const KeyCode &other)
80 {
81 _filmMfcCode = other._filmMfcCode;
82 _filmType = other._filmType;
83 _prefix = other._prefix;
84 _count = other._count;
85 _perfOffset = other._perfOffset;
86 _perfsPerFrame = other._perfsPerFrame;
87 _perfsPerCount = other._perfsPerCount;
88
89 return *this;
90 }
91
92
93 int
filmMfcCode() const94 KeyCode::filmMfcCode () const
95 {
96 return _filmMfcCode;
97 }
98
99
100 void
setFilmMfcCode(int filmMfcCode)101 KeyCode::setFilmMfcCode (int filmMfcCode)
102 {
103 if (filmMfcCode < 0 || filmMfcCode > 99)
104 throw Iex::ArgExc ("Invalid key code film manufacturer code "
105 "(must be between 0 and 99).");
106
107 _filmMfcCode = filmMfcCode;
108 }
109
110 int
filmType() const111 KeyCode::filmType () const
112 {
113 return _filmType;
114 }
115
116
117 void
setFilmType(int filmType)118 KeyCode::setFilmType (int filmType)
119 {
120 if (filmType < 0 || filmType > 99)
121 throw Iex::ArgExc ("Invalid key code film type "
122 "(must be between 0 and 99).");
123
124 _filmType = filmType;
125 }
126
127 int
prefix() const128 KeyCode::prefix () const
129 {
130 return _prefix;
131 }
132
133
134 void
setPrefix(int prefix)135 KeyCode::setPrefix (int prefix)
136 {
137 if (prefix < 0 || prefix > 999999)
138 throw Iex::ArgExc ("Invalid key code prefix "
139 "(must be between 0 and 999999).");
140
141 _prefix = prefix;
142 }
143
144
145 int
count() const146 KeyCode::count () const
147 {
148 return _count;
149 }
150
151
152 void
setCount(int count)153 KeyCode::setCount (int count)
154 {
155 if (count < 0 || count > 9999)
156 throw Iex::ArgExc ("Invalid key code count "
157 "(must be between 0 and 9999).");
158
159 _count = count;
160 }
161
162
163 int
perfOffset() const164 KeyCode::perfOffset () const
165 {
166 return _perfOffset;
167 }
168
169
170 void
setPerfOffset(int perfOffset)171 KeyCode::setPerfOffset (int perfOffset)
172 {
173 if (perfOffset < 0 || perfOffset > 119)
174 throw Iex::ArgExc ("Invalid key code perforation offset "
175 "(must be between 0 and 119).");
176
177 _perfOffset = perfOffset;
178 }
179
180
181 int
perfsPerFrame() const182 KeyCode::perfsPerFrame () const
183 {
184 return _perfsPerFrame;
185 }
186
187
188 void
setPerfsPerFrame(int perfsPerFrame)189 KeyCode::setPerfsPerFrame (int perfsPerFrame)
190 {
191 if (perfsPerFrame < 1 || perfsPerFrame > 15)
192 throw Iex::ArgExc ("Invalid key code number of perforations per frame "
193 "(must be between 1 and 15).");
194
195 _perfsPerFrame = perfsPerFrame;
196 }
197
198
199 int
perfsPerCount() const200 KeyCode::perfsPerCount () const
201 {
202 return _perfsPerCount;
203 }
204
205
206 void
setPerfsPerCount(int perfsPerCount)207 KeyCode::setPerfsPerCount (int perfsPerCount)
208 {
209 if (perfsPerCount < 20 || perfsPerCount > 120)
210 throw Iex::ArgExc ("Invalid key code number of perforations per count "
211 "(must be between 20 and 120).");
212
213 _perfsPerCount = perfsPerCount;
214 }
215
216 } // namespace Imf
217