• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*---------------------------------------------------------------------------*
2  *  ESR_SessionType.h  *
3  *                                                                           *
4  *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
5  *                                                                           *
6  *  Licensed under the Apache License, Version 2.0 (the 'License');          *
7  *  you may not use this file except in compliance with the License.         *
8  *                                                                           *
9  *  You may obtain a copy of the License at                                  *
10  *      http://www.apache.org/licenses/LICENSE-2.0                           *
11  *                                                                           *
12  *  Unless required by applicable law or agreed to in writing, software      *
13  *  distributed under the License is distributed on an 'AS IS' BASIS,        *
14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
15  *  See the License for the specific language governing permissions and      *
16  *  limitations under the License.                                           *
17  *                                                                           *
18  *---------------------------------------------------------------------------*/
19 
20 #ifndef __ESR_SESSIONTYPE_H
21 #define __ESR_SESSIONTYPE_H
22 
23 
24 
25 #include "ESR_ReturnCode.h"
26 #include "ESR_SharedPrefix.h"
27 #include "ESR_VariableTypes.h"
28 #include "ESR_SessionTypeListener.h"
29 #include "pstdio.h"
30 #include "ptypes.h"
31 
32 /**
33  * @addtogroup ESR_SessionTypeModule ESR_SessionType API functions
34  * ESR_Session interface functions.
35  *
36  * @{
37  */
38 
39 /**
40  * Hashmap with helper functions for adding primitives and add-if-empty.
41  */
42 typedef struct ESR_SessionType_t
43 {
44   /**
45    * Returns session property value.
46    *
47    * @param self ESR_SessionType handle
48    * @param name Property name
49    * @param value Property value
50    * @param type Expected variable type (for strong-typing purposes)
51    * @return ESR_INVALID_RESULT_TYPE if the property is not of the specified type
52    */
53   ESR_ReturnCode(*getProperty)(struct ESR_SessionType_t* self, const LCHAR* name, void** value, VariableTypes type);
54   /**
55    * Returns the type of a property value.
56    *
57    * @param self ESR_SessionType handle
58    * @param name Property name
59    * @param type [out] Value type
60    * @return ESR_INVALID_ARGUMENT if self is null or property cannot be found
61    */
62   ESR_ReturnCode(*getPropertyType)(struct ESR_SessionType_t* self, const LCHAR* name, VariableTypes* type);
63   /**
64    * Returns copy of session property value.
65    *
66    * @param self ESR_SessionType handle
67    * @param name Property name
68    * @param value Property value
69    * @return ESR_INVALID_RESULT_TYPE if the property is not a int
70    */
71   ESR_ReturnCode(*getInt)(struct ESR_SessionType_t* self, const LCHAR* name, int* value);
72   /**
73    * Returns copy of session property value.
74    *
75    * @param name Property name
76    * @param value Property value
77    * @return ESR_INVALID_RESULT_TYPE if the property is not a asr_uint16_t
78    */
79   ESR_ReturnCode(*getUint16_t)(struct ESR_SessionType_t* self, const LCHAR* name, asr_uint16_t* value);
80   /**
81    * Returns copy of session property value.
82    *
83    * @param self ESR_SessionType handle
84    * @param name Property name
85    * @param value Property value
86    * @return ESR_INVALID_RESULT_TYPE if the property is not a size_t
87    * @return ESR_INVALID_RESULT_TYPE if the property is not a size_t
88    */
89   ESR_ReturnCode(*getSize_t)(struct ESR_SessionType_t* self, const LCHAR* name, size_t* value);
90   /**
91    * Returns copy of session property value.
92    *
93    * @param self ESR_SessionType handle
94    * @param name Property name
95    * @param value Property value
96    * @return ESR_INVALID_RESULT_TYPE if the property is not a float
97    */
98   ESR_ReturnCode(*getFloat)(struct ESR_SessionType_t* self, const LCHAR* name, float* value);
99   /**
100    * Returns copy of session property value.
101    *
102    * @param self ESR_SessionType handle
103    * @param name Property name
104    * @param value Property value
105    * @return ESR_INVALID_RESULT_TYPE if the property is not a bool
106    */
107   ESR_ReturnCode(*getBool)(struct ESR_SessionType_t* self, const LCHAR* name, ESR_BOOL* value);
108   /**
109    * Returns copy of session property value.
110    *
111    * @param self ESR_SessionType handle
112    * @param name Property name
113    * @param value Property value
114    * @param len Size of value argument. If the return code is ESR_BUFFER_OVERFLOW,
115    *            the required length is returned in this variable.
116    * @return ESR_INVALID_RESULT_TYPE if the property is not a LCHAR*
117    */
118   ESR_ReturnCode(*getLCHAR)(struct ESR_SessionType_t* self, const LCHAR* name, LCHAR* value, size_t* len);
119   /**
120    * Indicates if key exists in the session.
121    *
122    * @param self ESR_SessionType handle
123    * @param name Property name
124    * @param exists True if key exists, false otherwise
125    * @return ESR_INVALID_ARGUMENT if self is null
126    */
127   ESR_ReturnCode(*contains)(struct ESR_SessionType_t* self, const LCHAR* name, ESR_BOOL* exists);
128   /**
129    * Sets session property value.
130    *
131    * @param self ESR_SessionType handle
132    * @param name Property name
133    * @param value Property value
134    * @param type Type of value being set
135    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
136    */
137   ESR_ReturnCode(*setProperty)(struct ESR_SessionType_t* self, const LCHAR* name, void* value, VariableTypes type);
138   /**
139    * Sets session property value, storing a copy of the value.
140    *
141    * @param self ESR_SessionType handle
142    * @param name Property name
143    * @param value Property value
144    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
145    */
146   ESR_ReturnCode(*setInt)(struct ESR_SessionType_t* self, const LCHAR* name, int value);
147   /**
148    * Sets session property value, storing a copy of the value.
149    *
150    * @param name Property name
151    * @param value Property value
152    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
153    */
154   ESR_ReturnCode(*setUint16_t)(struct ESR_SessionType_t* self, const LCHAR* name, asr_uint16_t value);
155   /**
156    * Sets session property value, storing a copy of the value.
157    *
158    * @param self ESR_SessionType handle
159    * @param name Property name
160    * @param value Property value
161    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
162    */
163   ESR_ReturnCode(*setSize_t)(struct ESR_SessionType_t* self, const LCHAR* name, size_t value);
164   /**
165    * Sets session property value, storing a copy of the value.
166    *
167    * @param self ESR_SessionType handle
168    * @param name Property name
169    * @param value Property value
170    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
171    */
172   ESR_ReturnCode(*setFloat)(struct ESR_SessionType_t* self, const LCHAR* name, float value);
173   /**
174    * Sets session property value, storing a copy of the value.
175    *
176    * @param self ESR_SessionType handle
177    * @param name Property name
178    * @param value Property value
179    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
180    */
181   ESR_ReturnCode(*setBool)(struct ESR_SessionType_t* self, const LCHAR* name, ESR_BOOL value);
182   /**
183    * Sets session property value, storing a copy of the value.
184    *
185    * @param self ESR_SessionType handle
186    * @param name Property name
187    * @param value Property value
188    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
189    */
190   ESR_ReturnCode(*setLCHAR)(struct ESR_SessionType_t* self, const LCHAR* name, LCHAR* value);
191   /**
192    * If the key does not exist in the session, calls SessionSetInt().
193    *
194    * This helper function aids implementation of "default values", overwriting
195    * session values only if they have not been set already.
196    *
197    * @param self ESR_SessionType handle
198    * @param name Property name
199    * @param value Property value
200    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
201    */
202   ESR_ReturnCode(*setIntIfEmpty)(struct ESR_SessionType_t* self, const LCHAR* name, int value);
203   /**
204    * If the key does not exist in the session, calls SessionSetUint16_t().
205    *
206    * This helper function aids implementation of "default values", overwriting
207    * session values only if they have not been set already.
208    *
209    * @param name Property name
210    * @param value Property value
211    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
212    */
213   ESR_ReturnCode(*setUint16_tIfEmpty)(struct ESR_SessionType_t* self, const LCHAR* name, asr_uint16_t value);
214   /**
215    * If the key does not exist in the session, calls SessionSetSize_t().
216    *
217    * This helper function aids implementation of "default values", overwriting
218    * session values only if they have not been set already.
219    *
220    * @param self ESR_SessionType handle
221    * @param name Property name
222    * @param value Property value
223    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
224    */
225   ESR_ReturnCode(*setSize_tIfEmpty)(struct ESR_SessionType_t* self, const LCHAR* name, size_t value);
226   /**
227    * If the key does not exist in the session, calls SessionSetFloat().
228    *
229    * This helper function aids implementation of "default values", overwriting
230    * session values only if they have not been set already.
231    *
232    * @param self ESR_SessionType handle
233    * @param name Property name
234    * @param value Property value
235    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
236    */
237   ESR_ReturnCode(*setFloatIfEmpty)(struct ESR_SessionType_t* self, const LCHAR* name, float value);
238   /**
239    * If the key does not exist in the session, calls SessionSetBool().
240    *
241    * This helper function aids implementation of "default values", overwriting
242    * session values only if they have not been set already.
243    *
244    * @param self ESR_SessionType handle
245    * @param name Property name
246    * @param value Property value
247    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
248    */
249   ESR_ReturnCode(*setBoolIfEmpty)(struct ESR_SessionType_t* self, const LCHAR* name, ESR_BOOL value);
250   /**
251    * If the key does not exist in the session, calls SessionSetLCHAR().
252    *
253    * This helper function aids implementation of "default values", overwriting
254    * session values only if they have not been set already.
255    *
256    * @param self ESR_SessionType handle
257    * @param name Property name
258    * @param value Property value
259    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
260    */
261   ESR_ReturnCode(*setLCHARIfEmpty)(struct ESR_SessionType_t* self, const LCHAR* name, LCHAR* value);
262   /**
263    * Removes property from session.
264    *
265    * @param self ESR_SessionType handle
266    * @param name Property name
267    * @return ESR_INVALID_ARGUMENT if self is null; ESR_NO_MATCH_ERROR if key cannot be found
268    */
269   ESR_ReturnCode(*removeProperty)(struct ESR_SessionType_t* self, const LCHAR* name);
270   /**
271    * Removes and deallocates property from session.
272    *
273    * @param self ESR_SessionType handle
274    * @param name Property name
275    * @return ESR_INVALID_ARGUMENT if self is null; ESR_NO_MATCH_ERROR if key cannot be found
276    */
277   ESR_ReturnCode(*removeAndFreeProperty)(struct ESR_SessionType_t* self, const LCHAR* name);
278   /**
279    * Imports commandline arguments into the system session.
280    *
281    * Keys are imported as "cmdline.[name]" where [name] is the name of the command-line argument
282    * Values are set in char* format.
283    *
284    * For example, given the argument "-timer=5", the following key will be added to the session:
285    * ["cmdline.timer", "5"]
286    *
287    * Validation is left up to the application.
288    *
289    * If the session contains a key that is clobbered by the parser, the old [key, value]
290    * pair will be deallocated. For example, if the session contained
291    * ["cmdline.timer", "value"] before the aforementioned example occured, then the old
292    * [key, value] pair will be allocated by the parser.
293    *
294    * @param self ESR_SessionType handle
295    * @param argc Number of arguments
296    * @param argv Argument values
297    * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if the system is out of memory;
298    */
299   ESR_ReturnCode(*importCommandLine)(struct ESR_SessionType_t* self, int argc, char* argv[]);
300   /**
301    * Returns the number of elements in the session.
302    *
303    * @param self ESR_SessionType handle
304    * @param size [out] Session size
305    * @return ESR_INVALID_ARGUMENT if self is null
306    */
307   ESR_ReturnCode(*getSize)(struct ESR_SessionType_t* self, size_t* size);
308   /**
309    * Returns the key associated with the specified index.
310    *
311    * @param self ESR_SessionType handle
312    * @param index Element index
313    * @param key [out] Key name
314    * @return ESR_INVALID_ARGUMENT if self is null; ESR_ARGUMENT_OUT_OF_BOUNDS if index is out of bounds
315    */
316   ESR_ReturnCode(*getKeyAtIndex)(struct ESR_SessionType_t* self, size_t index, LCHAR** key);
317   /**
318    * Convert the specified argument to int.
319    *
320    * @param self ESR_SessionType handle
321    * @param key Property name
322    * @return ESR_INVALID_RESULT_TYPE if the property is not a LCHAR*; ESR_OUT_OF_MEMORY if system is out of memory;
323    * ESR_INVALID_ARGUMENT if self is null or property cannot be converted to int
324    */
325   ESR_ReturnCode(*convertToInt)(struct ESR_SessionType_t* self, const LCHAR* key);
326 
327   /**
328    * Convert the specified argument to asr_uint16_t.
329    *
330    * @param self ESR_SessionType handle
331    * @param key Property name
332   * @return ESR_INVALID_RESULT_TYPE if the property is not a LCHAR*; ESR_OUT_OF_MEMORY if system is out of memory;
333   * ESR_INVALID_ARGUMENT if self is null or property cannot be converted to asr_uint16_t
334    */
335   ESR_ReturnCode(*convertToUint16_t)(struct ESR_SessionType_t* self, const LCHAR* key);
336 
337   /**
338    * Convert the specified argument to size_t.
339    *
340    * @param self ESR_SessionType handle
341    * @param key Property name
342   * @return ESR_INVALID_RESULT_TYPE if the property is not a LCHAR*; ESR_OUT_OF_MEMORY if system is out of memory;
343   * ESR_INVALID_ARGUMENT if self is null or property cannot be converted to size_t
344    */
345   ESR_ReturnCode(*convertToSize_t)(struct ESR_SessionType_t* self, const LCHAR* key);
346 
347   /**
348    * Convert the specified argument to float.
349    *
350    * @param self ESR_SessionType handle
351    * @param key Property name
352   * @return ESR_INVALID_RESULT_TYPE if the property is not a LCHAR*; ESR_OUT_OF_MEMORY if system is out of memory;
353   * ESR_INVALID_ARGUMENT if self is null or property cannot be converted to float
354    */
355   ESR_ReturnCode(*convertToFloat)(struct ESR_SessionType_t* self, const LCHAR* key);
356 
357   /**
358    * Convert the specified argument to bool.
359    *
360    * @param self ESR_SessionType handle
361    * @param key Property name
362    * @return ESR_INVALID_RESULT_TYPE if the property is not a LCHAR*; ESR_OUT_OF_MEMORY if system is out of memory;
363    * ESR_INVALID_ARGUMENT if self is null or property cannot be converted to bool
364    */
365   ESR_ReturnCode(*convertToBool)(struct ESR_SessionType_t* self, const LCHAR* key);
366   /**
367    * Destroys the Session.
368    *
369    * @param self ESR_SessionType handle
370    * @return ESR_INVALID_ARGUMENT if self is null
371    */
372   ESR_ReturnCode(*destroy)(struct ESR_SessionType_t* self);
373   /**
374    * Import PAR file into session.
375    *
376    * @param self ESR_SessionType handle
377    * @param file File to read session from
378    * @return ESR_INVALID_STATE if self is null; ESR_OPEN_ERROR if file cannot be opened; ESR_READ_ERROR if file cannot be
379   * read; ESR_OUT_OF_MEMORY if system is out of memory
380    */
381   ESR_ReturnCode(*importParFile)(struct ESR_SessionType_t* self, const LCHAR* filename);
382   /**
383    * Import ARG file into session.
384    *
385    * @param self ESR_SessionType handle
386    * @param file File to read arguments from
387    */
388   ESR_ReturnCode(*importArgFile)(struct ESR_SessionType_t* self, const LCHAR* filename);
389 
390   /**
391    * Adds an event-listener.
392    *
393    * @param self ESR_SessionType handle
394    * @param listener The event-listener to add
395     * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
396    */
397   ESR_ReturnCode(*addListener)(struct ESR_SessionType_t* self, ESR_SessionTypeListenerPair* listener);
398 
399   /**
400    * Removes an event-listener.
401    *
402    * @param self ESR_SessionType handle
403    * @param listener The event-listener to remove
404     * @return ESR_INVALID_ARGUMENT if self is null; ESR_OUT_OF_MEMORY if system is out of memory
405    */
406   ESR_ReturnCode(*removeListener)(struct ESR_SessionType_t* self, ESR_SessionTypeListenerPair* listener);
407 
408   /**
409    * Pointer to session data.
410    */
411   void* data;
412 }
413 ESR_SessionType;
414 
415 /**
416  * Initializes the system session.
417  *
418  * @param self ESR_SessionType handle
419  * @return ESR_OUT_OF_MEMORY if system is out of memory
420  */
421 ESR_SHARED_API ESR_ReturnCode ESR_SessionTypeCreate(ESR_SessionType** self);
422 /**
423  * @}
424  */
425 
426 
427 #endif /* __ESR_SESSIONTYPE_H */
428