CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
salieri.h
1
30#if !defined(SALIERI_VERSION) || (SALIERI_VERSION < 1)
31
32/* TODO: figure out when <sal.h> first appeared. */
33#if defined(_MSC_VER)
34# include <sal.h>
35#elif defined(__has_include)
36# if __has_include(<sal.h>)
37# include <sal.h>
38# endif
39#endif
40
41/* The main concern for the implementation is that we don't want to
42 * replace annotations from <sal.h>, but we *do* want to replace
43 * annotations from older versions of Salieri. To keep track of
44 * everything, when we (Salieri) define a SAL annotation, we also
45 * define SALIERI_DEFINED_${annotation} (with the leading and trailing
46 * '-' stripped). Then, before redefining an annotation macro we
47 * check to make sure SALIERI_DEFINED_${annontation} is defined.
48 *
49 * This means you can safely use Salieri in a public header in your
50 * project.
51 */
52
53/* Function Parameters & Return Value
54 *
55 * https://msdn.microsoft.com/en-us/library/hh916382.aspx
56 *****/
57
58/* Pointer Parameters */
59
60#if defined(_In_) && defined(SALIERI_DEFINED_In)
61# undef _In_
62#endif
63#if !defined(_In_)
64# define _In_
65# define SALIERI_DEFINED_In
66#endif
67
68#if defined(_Out_) && defined(SALIERI_DEFINED_Out)
69# undef _Out_
70#endif
71#if !defined(_Out_)
72# define _Out_
73# define SALIERI_DEFINED_Out
74#endif
75
76#if defined(_Inout_) && defined(SALIERI_DEFINED_Inout)
77# undef _Inout_
78#endif
79#if !defined(_Inout_)
80# define _Inout_
81# define SALIERI_DEFINED_Inout
82#endif
83
84#if defined(_In_z_) && defined(SALIERI_DEFINED_In_z)
85# undef _In_z_
86#endif
87#if !defined(_In_z_)
88# define _In_z_
89# define SALIERI_DEFINED_In_z
90#endif
91
92#if defined(_Inout_z_) && defined(SALIERI_DEFINED_Inout_z)
93# undef _Inout_z_
94#endif
95#if !defined(_Inout_z_)
96# define _Inout_z_
97# define SALIERI_DEFINED_Inout_z
98#endif
99
100#if defined(_In_reads_) && defined(SALIERI_DEFINED_In_reads)
101# undef _In_reads_
102#endif
103#if !defined(_In_reads_)
104# define _In_reads_(s)
105# define SALIERI_DEFINED_In_reads
106#endif
107
108#if defined(_In_reads_bytes_) && defined(SALIERI_DEFINED_In_reads_bytes)
109# undef _In_reads_bytes_
110#endif
111#if !defined(_In_reads_bytes_)
112# define _In_reads_bytes_(s)
113# define SALIERI_DEFINED_In_reads_bytes
114#endif
115
116#if defined(_In_reads_z_) && defined(SALIERI_DEFINED_In_reads_z)
117# undef _In_reads_z_
118#endif
119#if !defined(_In_reads_z_)
120# define _In_reads_z_(s)
121# define SALIERI_DEFINED_In_reads_z
122#endif
123
124#if defined(_In_reads_or_z_) && defined(SALIERI_DEFINED_In_reads_or_z)
125# undef _In_reads_or_z_
126#endif
127#if !defined(_In_reads_or_z_)
128# define _In_reads_or_z_(s)
129# define SALIERI_DEFINED_In_reads_or_z
130#endif
131
132#if defined(_Out_writes_) && defined(SALIERI_DEFINED_Out_writes)
133# undef _Out_writes_
134#endif
135#if !defined(_Out_writes_)
136# define _Out_writes_(s)
137# define SALIERI_DEFINED_Out_writes
138#endif
139
140#if defined(_Out_writes_bytes_) && defined(SALIERI_DEFINED_Out_writes_bytes)
141# undef _Out_writes_bytes_
142#endif
143#if !defined(_Out_writes_bytes_)
144# define _Out_writes_bytes_(s)
145# define SALIERI_DEFINED_Out_writes_bytes
146#endif
147
148#if defined(_Out_writes_z_) && defined(SALIERI_DEFINED_Out_writes_z)
149# undef _Out_writes_z_
150#endif
151#if !defined(_Out_writes_z_)
152# define _Out_writes_z_(s)
153# define SALIERI_DEFINED_Out_writes_z
154#endif
155
156#if defined(_Inout_updates_) && defined(SALIERI_DEFINED_Inout_updates)
157# undef _Inout_updates_
158#endif
159#if !defined(_Inout_updates_)
160# define _Inout_updates_(s)
161# define SALIERI_DEFINED_Inout_updates
162#endif
163
164#if defined(_Inout_updates_bytes_) && defined(SALIERI_DEFINED_Inout_updates_bytes)
165# undef _Inout_updates_bytes_
166#endif
167#if !defined(_Inout_updates_bytes_)
168# define _Inout_updates_bytes_(s)
169# define SALIERI_DEFINED_Inout_updates_bytes
170#endif
171
172#if defined(_Inout_updates_z_) && defined(SALIERI_DEFINED_Inout_updates_z)
173# undef _Inout_updates_z_
174#endif
175#if !defined(_Inout_updates_z_)
176# define _Inout_updates_z_(s)
177# define SALIERI_DEFINED_Inout_updates_z
178#endif
179
180#if defined(_Out_writes_to_) && defined(SALIERI_DEFINED_Out_writes_to)
181# undef _Out_writes_to_
182#endif
183#if !defined(_Out_writes_to_)
184# define _Out_writes_to_(s,c)
185# define SALIERI_DEFINED_Out_writes_to
186#endif
187
188#if defined(_Out_writes_bytes_to_) && defined(SALIERI_DEFINED_Out_writes_bytes_to)
189# undef _Out_writes_bytes_to_
190#endif
191#if !defined(_Out_writes_bytes_to_)
192# define _Out_writes_bytes_to_(s,c)
193# define SALIERI_DEFINED_Out_writes_bytes_to
194#endif
195
196#if defined(_Out_writes_all_) && defined(SALIERI_DEFINED_Out_writes_all)
197# undef _Out_writes_all_
198#endif
199#if !defined(_Out_writes_all_)
200# define _Out_writes_all_(s)
201# define SALIERI_DEFINED_Out_writes_all
202#endif
203
204#if defined(_Out_writes_bytes_all_) && defined(SALIERI_DEFINED_Out_writes_bytes_all)
205# undef _Out_writes_bytes_all_
206#endif
207#if !defined(_Out_writes_bytes_all_)
208# define _Out_writes_bytes_all_(s)
209# define SALIERI_DEFINED_Out_writes_bytes_all
210#endif
211
212#if defined(_Out_writes_bytes_opt_) && defined(SALIERI_DEFINED_Out_writes_bytes_opt)
213# undef _Out_writes_bytes_opt_
214#endif
215#if !defined(_Out_writes_bytes_opt_)
216# define _Out_writes_bytes_opt_(s)
217# define SALIERI_DEFINED_Out_writes_bytes_opt
218#endif
219
220#if defined(_In_updates_to_) && defined(SALIERI_DEFINED_In_updates_to)
221# undef _In_updates_to_
222#endif
223#if !defined(_In_updates_to_)
224# define _In_updates_to_(s,c)
225# define SALIERI_DEFINED_In_updates_to
226#endif
227
228#if defined(_In_updates_bytes_to_) && defined(SALIERI_DEFINED_In_updates_bytes_to)
229# undef _In_updates_bytes_to_
230#endif
231#if !defined(_In_updates_bytes_to_)
232# define _In_updates_bytes_to_(s,c)
233# define SALIERI_DEFINED_In_updates_bytes_to
234#endif
235
236#if defined(_Inout_updates_z_) && defined(SALIERI_DEFINED_Inout_updates_z)
237# undef _Inout_updates_z_
238#endif
239#if !defined(_Inout_updates_z_)
240# define _Inout_updates_z_(s)
241# define SALIERI_DEFINED_Inout_updates_z
242#endif
243
244#if defined(_Out_writes_to_) && defined(SALIERI_DEFINED_Out_writes_to)
245# undef _Out_writes_to_
246#endif
247#if !defined(_Out_writes_to_)
248# define _Out_writes_to_(s,c)
249# define SALIERI_DEFINED_Out_writes_to
250#endif
251
252#if defined(_Out_writes_bytes_to_) && defined(SALIERI_DEFINED_Out_writes_bytes_to)
253# undef _Out_writes_bytes_to_
254#endif
255#if !defined(_Out_writes_bytes_to_)
256# define _Out_writes_bytes_to_(s,c)
257# define SALIERI_DEFINED_Out_writes_bytes_to
258#endif
259
260#if defined(_Out_writes_all_) && defined(SALIERI_DEFINED_Out_writes_all)
261# undef _Out_writes_all_
262#endif
263#if !defined(_Out_writes_all_)
264# define _Out_writes_all_(s)
265# define SALIERI_DEFINED_Out_writes_all
266#endif
267
268#if defined(_Out_writes_bytes_all_) && defined(SALIERI_DEFINED_Out_writes_bytes_all)
269# undef _Out_writes_bytes_all_
270#endif
271#if !defined(_Out_writes_bytes_all_)
272# define _Out_writes_bytes_all_(s)
273# define SALIERI_DEFINED_Out_writes_bytes_all
274#endif
275
276#if defined(_Inout_updates_to_) && defined(SALIERI_DEFINED_Inout_updates_to)
277# undef _Inout_updates_to_
278#endif
279#if !defined(_Inout_updates_to_)
280# define _Inout_updates_to_(s,c)
281# define SALIERI_DEFINED_Inout_updates_to
282#endif
283
284#if defined(_Inout_updates_bytes_to_) && defined(SALIERI_DEFINED_Inout_updates_bytes_to)
285# undef _Inout_updates_bytes_to_
286#endif
287#if !defined(_Inout_updates_bytes_to_)
288# define _Inout_updates_bytes_to_(s,c)
289# define SALIERI_DEFINED_Inout_updates_bytes_to
290#endif
291
292#if defined(_Inout_updates_all_) && defined(SALIERI_DEFINED_Inout_updates_all)
293# undef _Inout_updates_all_
294#endif
295#if !defined(_Inout_updates_all_)
296# define _Inout_updates_all_(s)
297# define SALIERI_DEFINED_Inout_updates_all
298#endif
299
300#if defined(_Inout_updates_bytes_all_) && defined(SALIERI_DEFINED_Inout_updates_bytes_all)
301# undef _Inout_updates_bytes_all_
302#endif
303#if !defined(_Inout_updates_bytes_all_)
304# define _Inout_updates_bytes_all_(s)
305# define SALIERI_DEFINED_Inout_updates_bytes_all
306#endif
307
308#if defined(_In_reads_to_ptr_) && defined(SALIERI_DEFINED_In_reads_to_ptr)
309# undef _In_reads_to_ptr_
310#endif
311#if !defined(_In_reads_to_ptr_)
312# define _In_reads_to_ptr_(p)
313# define SALIERI_DEFINED_In_reads_to_ptr
314#endif
315
316#if defined(_In_reads_to_ptr_z_) && defined(SALIERI_DEFINED_In_reads_to_ptr_z)
317# undef _In_reads_to_ptr_z_
318#endif
319#if !defined(_In_reads_to_ptr_z_)
320# define _In_reads_to_ptr_z_(p)
321# define SALIERI_DEFINED_In_reads_to_ptr_z
322#endif
323
324#if defined(_Out_writes_to_ptr_) && defined(SALIERI_DEFINED_Out_writes_to_ptr)
325# undef _Out_writes_to_ptr_
326#endif
327#if !defined(_Out_writes_to_ptr_)
328# define _Out_writes_to_ptr_(p)
329# define SALIERI_DEFINED_Out_writes_to_ptr
330#endif
331
332#if defined(_Out_writes_to_ptr_z_) && defined(SALIERI_DEFINED_Out_writes_to_ptr_z)
333# undef _Out_writes_to_ptr_z_
334#endif
335#if !defined(_Out_writes_to_ptr_z_)
336# define _Out_writes_to_ptr_z_(p)
337# define SALIERI_DEFINED_Out_writes_to_ptr_z
338#endif
339
340/* Optional Pointer Parameters */
341
342#if defined(_In_opt_) && defined(SALIERI_DEFINED_In_opt)
343# undef _In_opt_
344#endif
345#if !defined(_In_opt_)
346# define _In_opt_
347# define SALIERI_DEFINED_In_opt
348#endif
349
350#if defined(_Out_opt_) && defined(SALIERI_DEFINED_Out_opt)
351# undef _Out_opt_
352#endif
353#if !defined(_Out_opt_)
354# define _Out_opt_
355# define SALIERI_DEFINED_Out_opt
356#endif
357
358#if defined(_Inout_opt_) && defined(SALIERI_DEFINED_Inout_opt)
359# undef _Inout_opt_
360#endif
361#if !defined(_Inout_opt_)
362# define _Inout_opt_
363# define SALIERI_DEFINED_Inout_opt
364#endif
365
366#if defined(_In_opt_z_) && defined(SALIERI_DEFINED_In_opt_z)
367# undef _In_opt_z_
368#endif
369#if !defined(_In_opt_z_)
370# define _In_opt_z_
371# define SALIERI_DEFINED_In_opt_z
372#endif
373
374#if defined(_Inout_opt_z_) && defined(SALIERI_DEFINED_Inout_opt_z)
375# undef _Inout_opt_z_
376#endif
377#if !defined(_Inout_opt_z_)
378# define _Inout_opt_z_
379# define SALIERI_DEFINED_Inout_opt_z
380#endif
381
382#if defined(_In_reads_opt_) && defined(SALIERI_DEFINED_In_reads_opt)
383# undef _In_reads_opt_
384#endif
385#if !defined(_In_reads_opt_)
386# define _In_reads_opt_(s)
387# define SALIERI_DEFINED_In_reads_opt
388#endif
389
390#if defined(_In_reads_bytes_opt_) && defined(SALIERI_DEFINED_In_reads_bytes_opt)
391# undef _In_reads_bytes_opt_
392#endif
393#if !defined(_In_reads_bytes_opt_)
394# define _In_reads_bytes_opt_(s)
395# define SALIERI_DEFINED_In_reads_bytes_opt
396#endif
397
398#if defined(_In_reads_opt_z_) && defined(SALIERI_DEFINED_In_reads_opt_z)
399# undef _In_reads_opt_z_
400#endif
401#if !defined(_In_reads_opt_z_)
402# define _In_reads_opt_z_(s)
403# define SALIERI_DEFINED_In_reads_opt_z
404#endif
405
406#if defined(_Out_writes_opt_) && defined(SALIERI_DEFINED_Out_writes_opt)
407# undef _Out_writes_opt_
408#endif
409#if !defined(_Out_writes_opt_)
410# define _Out_writes_opt_(s)
411# define SALIERI_DEFINED_Out_writes_opt
412#endif
413
414#if defined(_Out_writes_bytes_) && defined(SALIERI_DEFINED_Out_writes_bytes)
415# undef _Out_writes_bytes_
416#endif
417#if !defined(_Out_writes_bytes_)
418# define _Out_writes_bytes_(s)
419# define SALIERI_DEFINED_Out_writes_bytes
420#endif
421
422#if defined(_Out_writes_opt_z_) && defined(SALIERI_DEFINED_Out_writes_opt_z)
423# undef _Out_writes_opt_z_
424#endif
425#if !defined(_Out_writes_opt_z_)
426# define _Out_writes_opt_z_(s)
427# define SALIERI_DEFINED_Out_writes_opt_z
428#endif
429
430#if defined(_Inout_updates_opt_) && defined(SALIERI_DEFINED_Inout_updates_opt)
431# undef _Inout_updates_opt_
432#endif
433#if !defined(_Inout_updates_opt_)
434# define _Inout_updates_opt_(s)
435# define SALIERI_DEFINED_Inout_updates_opt
436#endif
437
438#if defined(_Inout_updates_bytes_opt_) && defined(SALIERI_DEFINED_Inout_updates_bytes_opt)
439# undef _Inout_updates_bytes_opt_
440#endif
441#if !defined(_Inout_updates_bytes_opt_)
442# define _Inout_updates_bytes_opt_(s)
443# define SALIERI_DEFINED_Inout_updates_bytes_opt
444#endif
445
446#if defined(_Inout_updates_opt_z_) && defined(SALIERI_DEFINED_Inout_updates_opt_z)
447# undef _Inout_updates_opt_z_
448#endif
449#if !defined(_Inout_updates_opt_z_)
450# define _Inout_updates_opt_z_(s)
451# define SALIERI_DEFINED_Inout_updates_opt_z
452#endif
453
454#if defined(_Out_writes_to_opt_) && defined(SALIERI_DEFINED_Out_writes_to_opt)
455# undef _Out_writes_to_opt_
456#endif
457#if !defined(_Out_writes_to_opt_)
458# define _Out_writes_to_opt_(s,c)
459# define SALIERI_DEFINED_Out_writes_to_opt
460#endif
461
462#if defined(_Out_writes_bytes_to_opt_) && defined(SALIERI_DEFINED_Out_writes_bytes_to_opt)
463# undef _Out_writes_bytes_to_opt_
464#endif
465#if !defined(_Out_writes_bytes_to_opt_)
466# define _Out_writes_bytes_to_opt_(s,c)
467# define SALIERI_DEFINED_Out_writes_bytes_to_opt
468#endif
469
470#if defined(_Out_writes_all_opt_) && defined(SALIERI_DEFINED_Out_writes_all_opt)
471# undef _Out_writes_all_opt_
472#endif
473#if !defined(_Out_writes_all_opt_)
474# define _Out_writes_all_opt_(s)
475# define SALIERI_DEFINED_Out_writes_all_opt
476#endif
477
478#if defined(_Out_writes_bytes_all_opt_) && defined(SALIERI_DEFINED_Out_writes_bytes_all_opt)
479# undef _Out_writes_bytes_all_opt_
480#endif
481#if !defined(_Out_writes_bytes_all_opt_)
482# define _Out_writes_bytes_all_opt_(s)
483# define SALIERI_DEFINED_Out_writes_bytes_all_opt
484#endif
485
486#if defined(_In_updates_to_opt_) && defined(SALIERI_DEFINED_In_updates_to_opt)
487# undef _In_updates_to_opt_
488#endif
489#if !defined(_In_updates_to_opt_)
490# define _In_updates_to_opt_(s,c)
491# define SALIERI_DEFINED_In_updates_to_opt
492#endif
493
494#if defined(_In_updates_bytes_to_opt_) && defined(SALIERI_DEFINED_In_updates_bytes_to_opt)
495# undef _In_updates_bytes_to_opt_
496#endif
497#if !defined(_In_updates_bytes_to_opt_)
498# define _In_updates_bytes_to_opt_(s,c)
499# define SALIERI_DEFINED_In_updates_bytes_to_opt
500#endif
501
502#if defined(_Inout_updates_all_opt_) && defined(SALIERI_DEFINED_Inout_updates_all_opt)
503# undef _Inout_updates_all_opt_
504#endif
505#if !defined(_Inout_updates_all_opt_)
506# define _Inout_updates_all_opt_(s)
507# define SALIERI_DEFINED_Inout_updates_all_opt
508#endif
509
510#if defined(_Inout_updates_bytes_all_opt_) && defined(SALIERI_DEFINED_Inout_updates_bytes_all_opt)
511# undef _Inout_updates_bytes_all_opt_
512#endif
513#if !defined(_Inout_updates_bytes_all_opt_)
514# define _Inout_updates_bytes_all_opt_(s)
515# define SALIERI_DEFINED_Inout_updates_bytes_all_opt
516#endif
517
518#if defined(_In_reads_to_ptr_opt_) && defined(SALIERI_DEFINED_In_reads_to_ptr_opt)
519# undef _In_reads_to_ptr_opt_
520#endif
521#if !defined(_In_reads_to_ptr_opt_)
522# define _In_reads_to_ptr_opt_(p)
523# define SALIERI_DEFINED_In_reads_to_ptr_opt
524#endif
525
526#if defined(_In_reads_to_ptr_opt_z_) && defined(SALIERI_DEFINED_In_reads_to_ptr_opt_z)
527# undef _In_reads_to_ptr_opt_z_
528#endif
529#if !defined(_In_reads_to_ptr_opt_z_)
530# define _In_reads_to_ptr_opt_z_(p)
531# define SALIERI_DEFINED_In_reads_to_ptr_opt_z
532#endif
533
534#if defined(_Out_writes_to_ptr_opt_) && defined(SALIERI_DEFINED_Out_writes_to_ptr_opt)
535# undef _Out_writes_to_ptr_opt_
536#endif
537#if !defined(_Out_writes_to_ptr_opt_)
538# define _Out_writes_to_ptr_opt_(p)
539# define SALIERI_DEFINED_Out_writes_to_ptr_opt
540#endif
541
542#if defined(_Out_writes_to_ptr_opt_z_) && defined(SALIERI_DEFINED_Out_writes_to_ptr_opt_z)
543# undef _Out_writes_to_ptr_opt_z_
544#endif
545#if !defined(_Out_writes_to_ptr_opt_z_)
546# define _Out_writes_to_ptr_opt_z_(p)
547# define SALIERI_DEFINED_Out_writes_to_ptr_opt_z
548#endif
549
550/* Output Pointer Parameters */
551
552#if defined(_Outptr_) && defined(SALIERI_DEFINED_Outptr)
553# undef _Outptr_
554#endif
555#if !defined(_Outptr_)
556# define _Outptr_
557# define SALIERI_DEFINED_Outptr
558#endif
559
560#if defined(_Outptr_opt_) && defined(SALIERI_DEFINED_Outptr_opt)
561# undef _Outptr_opt_
562#endif
563#if !defined(_Outptr_opt_)
564# define _Outptr_opt_
565# define SALIERI_DEFINED_Outptr_opt
566#endif
567
568#if defined(_Outptr_result_maybenull_) && defined(SALIERI_DEFINED_Outptr_result_maybenull)
569# undef _Outptr_result_maybenull_
570#endif
571#if !defined(_Outptr_result_maybenull_)
572# define _Outptr_result_maybenull_
573# define SALIERI_DEFINED_Outptr_result_maybenull
574#endif
575
576#if defined(_Outptr_opt_result_maybenull_) && defined(SALIERI_DEFINED_Outptr_opt_result_maybenull)
577# undef _Outptr_opt_result_maybenull_
578#endif
579#if !defined(_Outptr_opt_result_maybenull_)
580# define _Outptr_opt_result_maybenull_
581# define SALIERI_DEFINED_Outptr_opt_result_maybenull
582#endif
583
584#if defined(_Outptr_result_z_) && defined(SALIERI_DEFINED_Outptr_result_z)
585# undef _Outptr_result_z_
586#endif
587#if !defined(_Outptr_result_z_)
588# define _Outptr_result_z_
589# define SALIERI_DEFINED_Outptr_result_z
590#endif
591
592#if defined(_Outptr_opt_result_z_) && defined(SALIERI_DEFINED_Outptr_opt_result_z)
593# undef _Outptr_opt_result_z_
594#endif
595#if !defined(_Outptr_opt_result_z_)
596# define _Outptr_opt_result_z_
597# define SALIERI_DEFINED_Outptr_opt_result_z
598#endif
599
600#if defined(_Outptr_result_maybenull_z_) && defined(SALIERI_DEFINED_Outptr_result_maybenull_z)
601# undef _Outptr_result_maybenull_z_
602#endif
603#if !defined(_Outptr_result_maybenull_z_)
604# define _Outptr_result_maybenull_z_
605# define SALIERI_DEFINED_Outptr_result_maybenull_z
606#endif
607
608#if defined(_Outptr_opt_result_maybenull_z_) && defined(SALIERI_DEFINED_Outptr_opt_result_maybenull_z)
609# undef _Outptr_opt_result_maybenull_z_
610#endif
611#if !defined(_Outptr_opt_result_maybenull_z_)
612# define _Outptr_opt_result_maybenull_z_
613# define SALIERI_DEFINED_Outptr_opt_result_maybenull_z
614#endif
615
616#if defined(_COM_Outptr_) && defined(SALIERI_DEFINED_COM_Outptr)
617# undef _COM_Outptr_
618#endif
619#if !defined(_COM_Outptr_)
620# define _COM_Outptr_
621# define SALIERI_DEFINED_COM_Outptr
622#endif
623
624#if defined(_COM_Outptr_opt_) && defined(SALIERI_DEFINED_COM_Outptr_opt)
625# undef _COM_Outptr_opt_
626#endif
627#if !defined(_COM_Outptr_opt_)
628# define _COM_Outptr_opt_
629# define SALIERI_DEFINED_COM_Outptr_opt
630#endif
631
632#if defined(_COM_Outptr_result_maybenull_) && defined(SALIERI_DEFINED_COM_Outptr_result_maybenull)
633# undef _COM_Outptr_result_maybenull_
634#endif
635#if !defined(_COM_Outptr_result_maybenull_)
636# define _COM_Outptr_result_maybenull_
637# define SALIERI_DEFINED_COM_Outptr_result_maybenull
638#endif
639
640#if defined(_Outptr_opt_result_maybenull_) && defined(SALIERI_DEFINED_Outptr_opt_result_maybenull)
641# undef _Outptr_opt_result_maybenull_
642#endif
643#if !defined(_Outptr_opt_result_maybenull_)
644# define _Outptr_opt_result_maybenull_
645# define SALIERI_DEFINED_Outptr_opt_result_maybenull
646#endif
647
648#if defined(_Outptr_result_buffer_) && defined(SALIERI_DEFINED_Outptr_result_buffer)
649# undef _Outptr_result_buffer_
650#endif
651#if !defined(_Outptr_result_buffer_)
652# define _Outptr_result_buffer_(s)
653# define SALIERI_DEFINED_Outptr_result_buffer
654#endif
655
656#if defined(_Outptr_result_bytebuffer_) && defined(SALIERI_DEFINED_Outptr_result_bytebuffer)
657# undef _Outptr_result_bytebuffer_
658#endif
659#if !defined(_Outptr_result_bytebuffer_)
660# define _Outptr_result_bytebuffer_(s)
661# define SALIERI_DEFINED_Outptr_result_bytebuffer
662#endif
663
664#if defined(_Outptr_opt_result_buffer_) && defined(SALIERI_DEFINED_Outptr_opt_result_buffer)
665# undef _Outptr_opt_result_buffer_
666#endif
667#if !defined(_Outptr_opt_result_buffer_)
668# define _Outptr_opt_result_buffer_(s)
669# define SALIERI_DEFINED_Outptr_opt_result_buffer
670#endif
671
672#if defined(_Outptr_opt_result_bytebuffer_) && defined(SALIERI_DEFINED_Outptr_opt_result_bytebuffer)
673# undef _Outptr_opt_result_bytebuffer_
674#endif
675#if !defined(_Outptr_opt_result_bytebuffer_)
676# define _Outptr_opt_result_bytebuffer_(s)
677# define SALIERI_DEFINED_Outptr_opt_result_bytebuffer
678#endif
679
680#if defined(_Outptr_result_buffer_to_) && defined(SALIERI_DEFINED_Outptr_result_buffer_to)
681# undef _Outptr_result_buffer_to_
682#endif
683#if !defined(_Outptr_result_buffer_to_)
684# define _Outptr_result_buffer_to_(s,c)
685# define SALIERI_DEFINED_Outptr_result_buffer_to
686#endif
687
688#if defined(_Outptr_result_bytebuffer_to_) && defined(SALIERI_DEFINED_Outptr_result_bytebuffer_to)
689# undef _Outptr_result_bytebuffer_to_
690#endif
691#if !defined(_Outptr_result_bytebuffer_to_)
692# define _Outptr_result_bytebuffer_to_(s,c)
693# define SALIERI_DEFINED_Outptr_result_bytebuffer_to
694#endif
695
696#if defined(_Outptr_opt_result_buffer_to_) && defined(SALIERI_DEFINED_Outptr_opt_result_buffer_to)
697# undef _Outptr_opt_result_buffer_to_
698#endif
699#if !defined(_Outptr_opt_result_buffer_to_)
700# define _Outptr_opt_result_buffer_to_(s,c)
701# define SALIERI_DEFINED_Outptr_opt_result_buffer_to
702#endif
703
704#if defined(_Outptr_opt_result_bytebuffer_to_) && defined(SALIERI_DEFINED_Outptr_opt_result_bytebuffer_to)
705# undef _Outptr_opt_result_bytebuffer_to_
706#endif
707#if !defined(_Outptr_opt_result_bytebuffer_to_)
708# define _Outptr_opt_result_bytebuffer_to_(s,c)
709# define SALIERI_DEFINED_Outptr_opt_result_bytebuffer_to
710#endif
711
712#if defined(_Result_nullonfailure_) && defined(SALIERI_DEFINED_Result_nullonfailure)
713# undef _Result_nullonfailure_
714#endif
715#if !defined(_Result_nullonfailure_)
716# define _Result_nullonfailure_
717# define SALIERI_DEFINED_Result_nullonfailure
718#endif
719
720#if defined(_Result_zeroonfailure_) && defined(SALIERI_DEFINED_Result_zeroonfailure)
721# undef _Result_zeroonfailure_
722#endif
723#if !defined(_Result_zeroonfailure_)
724# define _Result_zeroonfailure_
725# define SALIERI_DEFINED_Result_zeroonfailure
726#endif
727
728#if defined(_Outptr_result_nullonfailure_) && defined(SALIERI_DEFINED_Outptr_result_nullonfailure)
729# undef _Outptr_result_nullonfailure_
730#endif
731#if !defined(_Outptr_result_nullonfailure_)
732# define _Outptr_result_nullonfailure_
733# define SALIERI_DEFINED_Outptr_result_nullonfailure
734#endif
735
736#if defined(_Outptr_opt_result_nullonfailure_) && defined(SALIERI_DEFINED_Outptr_opt_result_nullonfailure)
737# undef _Outptr_opt_result_nullonfailure_
738#endif
739#if !defined(_Outptr_opt_result_nullonfailure_)
740# define _Outptr_opt_result_nullonfailure_
741# define SALIERI_DEFINED_Outptr_opt_result_nullonfailure
742#endif
743
744#if defined(_Outref_result_nullonfailure_) && defined(SALIERI_DEFINED_Outref_result_nullonfailure)
745# undef _Outref_result_nullonfailure_
746#endif
747#if !defined(_Outref_result_nullonfailure_)
748# define _Outref_result_nullonfailure_
749# define SALIERI_DEFINED_Outref_result_nullonfailure
750#endif
751
752/* Output Reference Parameters */
753
754#if defined(_Outref_) && defined(SALIERI_DEFINED_Outref)
755# undef _Outref_
756#endif
757#if !defined(_Outref_)
758# define _Outref_
759# define SALIERI_DEFINED_Outref
760#endif
761
762#if defined(_Outref_result_maybenull_) && defined(SALIERI_DEFINED_Outref_result_maybenull)
763# undef _Outref_result_maybenull_
764#endif
765#if !defined(_Outref_result_maybenull_)
766# define _Outref_result_maybenull_
767# define SALIERI_DEFINED_Outref_result_maybenull
768#endif
769
770#if defined(_Outref_result_buffer_) && defined(SALIERI_DEFINED_Outref_result_buffer)
771# undef _Outref_result_buffer_
772#endif
773#if !defined(_Outref_result_buffer_)
774# define _Outref_result_buffer_(s)
775# define SALIERI_DEFINED_Outref_result_buffer
776#endif
777
778#if defined(_Outref_result_bytebuffer_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer)
779# undef _Outref_result_bytebuffer_
780#endif
781#if !defined(_Outref_result_bytebuffer_)
782# define _Outref_result_bytebuffer_(s)
783# define SALIERI_DEFINED_Outref_result_bytebuffer
784#endif
785
786#if defined(_Outref_result_buffer_to_) && defined(SALIERI_DEFINED_Outref_result_buffer_to)
787# undef _Outref_result_buffer_to_
788#endif
789#if !defined(_Outref_result_buffer_to_)
790# define _Outref_result_buffer_to_(s,c)
791# define SALIERI_DEFINED_Outref_result_buffer_to
792#endif
793
794#if defined(_Outref_result_bytebuffer_to_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_to)
795# undef _Outref_result_bytebuffer_to_
796#endif
797#if !defined(_Outref_result_bytebuffer_to_)
798# define _Outref_result_bytebuffer_to_(s,c)
799# define SALIERI_DEFINED_Outref_result_bytebuffer_to
800#endif
801
802#if defined(_Outref_result_buffer_all_) && defined(SALIERI_DEFINED_Outref_result_buffer_all)
803# undef _Outref_result_buffer_all_
804#endif
805#if !defined(_Outref_result_buffer_all_)
806# define _Outref_result_buffer_all_(s)
807# define SALIERI_DEFINED_Outref_result_buffer_all
808#endif
809
810#if defined(_Outref_result_bytebuffer_all_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_all)
811# undef _Outref_result_bytebuffer_all_
812#endif
813#if !defined(_Outref_result_bytebuffer_all_)
814# define _Outref_result_bytebuffer_all_(s)
815# define SALIERI_DEFINED_Outref_result_bytebuffer_all
816#endif
817
818#if defined(_Outref_result_buffer_maybenull_) && defined(SALIERI_DEFINED_Outref_result_buffer_maybenull)
819# undef _Outref_result_buffer_maybenull_
820#endif
821#if !defined(_Outref_result_buffer_maybenull_)
822# define _Outref_result_buffer_maybenull_(s)
823# define SALIERI_DEFINED_Outref_result_buffer_maybenull
824#endif
825
826#if defined(_Outref_result_bytebuffer_maybenull_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_maybenull)
827# undef _Outref_result_bytebuffer_maybenull_
828#endif
829#if !defined(_Outref_result_bytebuffer_maybenull_)
830# define _Outref_result_bytebuffer_maybenull_(s)
831# define SALIERI_DEFINED_Outref_result_bytebuffer_maybenull
832#endif
833
834#if defined(_Outref_result_buffer_to_maybenull_) && defined(SALIERI_DEFINED_Outref_result_buffer_to_maybenull)
835# undef _Outref_result_buffer_to_maybenull_
836#endif
837#if !defined(_Outref_result_buffer_to_maybenull_)
838# define _Outref_result_buffer_to_maybenull_(s,c)
839# define SALIERI_DEFINED_Outref_result_buffer_to_maybenull
840#endif
841
842#if defined(_Outref_result_bytebuffer_to_maybenull_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_to_maybenull)
843# undef _Outref_result_bytebuffer_to_maybenull_
844#endif
845#if !defined(_Outref_result_bytebuffer_to_maybenull_)
846# define _Outref_result_bytebuffer_to_maybenull_(s,c)
847# define SALIERI_DEFINED_Outref_result_bytebuffer_to_maybenull
848#endif
849
850#if defined(_Outref_result_buffer_all_maybenull_) && defined(SALIERI_DEFINED_Outref_result_buffer_all_maybenull)
851# undef _Outref_result_buffer_all_maybenull_
852#endif
853#if !defined(_Outref_result_buffer_all_maybenull_)
854# define _Outref_result_buffer_all_maybenull_(s)
855# define SALIERI_DEFINED_Outref_result_buffer_all_maybenull
856#endif
857
858#if defined(_Outref_result_bytebuffer_all_maybenull_) && defined(SALIERI_DEFINED_Outref_result_bytebuffer_all_maybenull)
859# undef _Outref_result_bytebuffer_all_maybenull_
860#endif
861#if !defined(_Outref_result_bytebuffer_all_maybenull_)
862# define _Outref_result_bytebuffer_all_maybenull_(s)
863# define SALIERI_DEFINED_Outref_result_bytebuffer_all_maybenull
864#endif
865
866/* Return Values */
867
868#if defined(_Ret_z_) && defined(SALIERI_DEFINED_Ret_z)
869# undef _Ret_z_
870#endif
871#if !defined(_Ret_z_)
872# define _Ret_z_
873# define SALIERI_DEFINED_Ret_z
874#endif
875
876#if defined(_Ret_writes_) && defined(SALIERI_DEFINED_Ret_writes)
877# undef _Ret_writes_
878#endif
879#if !defined(_Ret_writes_)
880# define _Ret_writes_(s)
881# define SALIERI_DEFINED_Ret_writes
882#endif
883
884#if defined(_Ret_writes_bytes_) && defined(SALIERI_DEFINED_Ret_writes_bytes)
885# undef _Ret_writes_bytes_
886#endif
887#if !defined(_Ret_writes_bytes_)
888# define _Ret_writes_bytes_(s)
889# define SALIERI_DEFINED_Ret_writes_bytes
890#endif
891
892#if defined(_Ret_writes_z_) && defined(SALIERI_DEFINED_Ret_writes_z)
893# undef _Ret_writes_z_
894#endif
895#if !defined(_Ret_writes_z_)
896# define _Ret_writes_z_(s)
897# define SALIERI_DEFINED_Ret_writes_z
898#endif
899
900#if defined(_Ret_writes_to_) && defined(SALIERI_DEFINED_Ret_writes_to)
901# undef _Ret_writes_to_
902#endif
903#if !defined(_Ret_writes_to_)
904# define _Ret_writes_to_(s,c)
905# define SALIERI_DEFINED_Ret_writes_to
906#endif
907
908#if defined(_Ret_writes_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_maybenull)
909# undef _Ret_writes_maybenull_
910#endif
911#if !defined(_Ret_writes_maybenull_)
912# define _Ret_writes_maybenull_(s)
913# define SALIERI_DEFINED_Ret_writes_maybenull
914#endif
915
916#if defined(_Ret_writes_to_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_to_maybenull)
917# undef _Ret_writes_to_maybenull_
918#endif
919#if !defined(_Ret_writes_to_maybenull_)
920# define _Ret_writes_to_maybenull_(s)
921# define SALIERI_DEFINED_Ret_writes_to_maybenull
922#endif
923
924#if defined(_Ret_writes_maybenull_z_) && defined(SALIERI_DEFINED_Ret_writes_maybenull_z)
925# undef _Ret_writes_maybenull_z_
926#endif
927#if !defined(_Ret_writes_maybenull_z_)
928# define _Ret_writes_maybenull_z_(s)
929# define SALIERI_DEFINED_Ret_writes_maybenull_z
930#endif
931
932#if defined(_Ret_maybenull_) && defined(SALIERI_DEFINED_Ret_maybenull)
933# undef _Ret_maybenull_
934#endif
935#if !defined(_Ret_maybenull_)
936# define _Ret_maybenull_
937# define SALIERI_DEFINED_Ret_maybenull
938#endif
939
940#if defined(_Ret_maybenull_z_) && defined(SALIERI_DEFINED_Ret_maybenull_z)
941# undef _Ret_maybenull_z_
942#endif
943#if !defined(_Ret_maybenull_z_)
944# define _Ret_maybenull_z_
945# define SALIERI_DEFINED_Ret_maybenull_z
946#endif
947
948#if defined(_Ret_null_) && defined(SALIERI_DEFINED_Ret_null)
949# undef _Ret_null_
950#endif
951#if !defined(_Ret_null_)
952# define _Ret_null_
953# define SALIERI_DEFINED_Ret_null
954#endif
955
956#if defined(_Ret_notnull_) && defined(SALIERI_DEFINED_Ret_notnull)
957# undef _Ret_notnull_
958#endif
959#if !defined(_Ret_notnull_)
960# define _Ret_notnull_
961# define SALIERI_DEFINED_Ret_notnull
962#endif
963
964#if defined(_Ret_valid_) && defined(SALIERI_DEFINED_Ret_valid)
965# undef _Ret_valid_
966#endif
967#if !defined(_Ret_valid_)
968# define _Ret_valid_
969# define SALIERI_DEFINED_Ret_valid
970#endif
971
972#if defined(_Ret_opt_valid_) && defined(SALIERI_DEFINED_Ret_opt_valid)
973# undef _Ret_opt_valid_
974#endif
975#if !defined(_Ret_opt_valid_)
976# define _Ret_opt_valid_
977# define SALIERI_DEFINED_Ret_opt_valid
978#endif
979
980#if defined(_Ret_writes_bytes_to_) && defined(SALIERI_DEFINED_Ret_writes_bytes_to)
981# undef _Ret_writes_bytes_to_
982#endif
983#if !defined(_Ret_writes_bytes_to_)
984# define _Ret_writes_bytes_to_
985# define SALIERI_DEFINED_Ret_writes_bytes_to
986#endif
987
988#if defined(_Ret_writes_bytes_to_) && defined(SALIERI_DEFINED_Ret_writes_bytes_to)
989# undef _Ret_writes_bytes_to_
990#endif
991#if !defined(_Ret_writes_bytes_to_)
992# define _Ret_writes_bytes_to_
993# define SALIERI_DEFINED_Ret_writes_bytes_to
994#endif
995
996#if defined(_Ret_writes_bytes_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_bytes_maybenull)
997# undef _Ret_writes_bytes_maybenull_
998#endif
999#if !defined(_Ret_writes_bytes_maybenull_)
1000# define _Ret_writes_bytes_maybenull_
1001# define SALIERI_DEFINED_Ret_writes_bytes_maybenull
1002#endif
1003
1004#if defined(_Ret_writes_bytes_to_maybenull_) && defined(SALIERI_DEFINED_Ret_writes_bytes_to_maybenull)
1005# undef _Ret_writes_bytes_to_maybenull_
1006#endif
1007#if !defined(_Ret_writes_bytes_to_maybenull_)
1008# define _Ret_writes_bytes_to_maybenull_
1009# define SALIERI_DEFINED_Ret_writes_bytes_to_maybenull
1010#endif
1011
1012/* Other Common Annotations */
1013
1014#if defined(_In_range_) && defined(SALIERI_DEFINED_In_range)
1015# undef _In_range_
1016#endif
1017#if !defined(_In_range_)
1018# define _In_range_(low, hi)
1019# define SALIERI_DEFINED_In_range
1020#endif
1021
1022#if defined(_Out_range_) && defined(SALIERI_DEFINED_Out_range)
1023# undef _Out_range_
1024#endif
1025#if !defined(_Out_range_)
1026# define _Out_range_(low, hi)
1027# define SALIERI_DEFINED_Out_range
1028#endif
1029
1030#if defined(_Ret_range_) && defined(SALIERI_DEFINED_Ret_range)
1031# undef _Ret_range_
1032#endif
1033#if !defined(_Ret_range_)
1034# define _Ret_range_(low, hi)
1035# define SALIERI_DEFINED_Ret_range
1036#endif
1037
1038#if defined(_Deref_in_range_) && defined(SALIERI_DEFINED_Deref_in_range)
1039# undef _Deref_in_range_
1040#endif
1041#if !defined(_Deref_in_range_)
1042# define _Deref_in_range_(low, hi)
1043# define SALIERI_DEFINED_Deref_in_range
1044#endif
1045
1046#if defined(_Deref_out_range_) && defined(SALIERI_DEFINED_Deref_out_range)
1047# undef _Deref_out_range_
1048#endif
1049#if !defined(_Deref_out_range_)
1050# define _Deref_out_range_(low, hi)
1051# define SALIERI_DEFINED_Deref_out_range
1052#endif
1053
1054#if defined(_Deref_inout_range_) && defined(SALIERI_DEFINED_Deref_inout_range)
1055# undef _Deref_inout_range_
1056#endif
1057#if !defined(_Deref_inout_range_)
1058# define _Deref_inout_range_(low, hi)
1059# define SALIERI_DEFINED_Deref_inout_range
1060#endif
1061
1062#if defined(_Field_range_) && defined(SALIERI_DEFINED_Field_range)
1063# undef _Field_range_
1064#endif
1065#if !defined(_Field_range_)
1066# define _Field_range_(low, hi)
1067# define SALIERI_DEFINED_Field_range
1068#endif
1069
1070#if defined(_Pre_equal_to_) && defined(SALIERI_DEFINED_Pre_equal_to)
1071# undef _Pre_equal_to_
1072#endif
1073#if !defined(_Pre_equal_to_)
1074# define _Pre_equal_to_(expr)
1075# define SALIERI_DEFINED_Pre_equal_to
1076#endif
1077
1078#if defined(_Pre_notnull_) && defined(SALIERI_DEFINED_Pre_notnull)
1079# undef _Pre_notnull_
1080#endif
1081#if !defined(_Pre_notnull_)
1082# define _Pre_notnull_
1083# define SALIERI_DEFINED_Pre_notnull
1084#endif
1085
1086#if defined(_Pre_maybenull_) && defined(SALIERI_DEFINED_Pre_maybenull)
1087# undef _Pre_maybenull_
1088#endif
1089#if !defined(_Pre_maybenull_)
1090# define _Pre_maybenull_
1091# define SALIERI_DEFINED_Pre_maybenull
1092#endif
1093
1094#if defined(_Pre_null_) && defined(SALIERI_DEFINED_Pre_null)
1095# undef _Pre_null_
1096#endif
1097#if !defined(_Pre_null_)
1098# define _Pre_null_
1099# define SALIERI_DEFINED_Pre_null
1100#endif
1101
1102#if defined(_Pre_satisfies_) && defined(SALIERI_DEFINED_Pre_satisfies)
1103# undef _Pre_satisfies_
1104#endif
1105#if !defined(_Pre_satisfies_)
1106# define _Pre_satisfies_(expr)
1107# define SALIERI_DEFINED_Pre_satisfies
1108#endif
1109
1110#if defined(_Pre_valid_) && defined(SALIERI_DEFINED_Pre_valid)
1111# undef _Pre_valid_
1112#endif
1113#if !defined(_Pre_valid_)
1114# define _Pre_valid_
1115# define SALIERI_DEFINED_Pre_valid
1116#endif
1117
1118#if defined(_Pre_opt_valid_) && defined(SALIERI_DEFINED_Pre_opt_valid)
1119# undef _Pre_opt_valid_
1120#endif
1121#if !defined(_Pre_opt_valid_)
1122# define _Pre_opt_valid_
1123# define SALIERI_DEFINED_Pre_opt_valid
1124#endif
1125
1126#if defined(_Deref_pre_opt_valid_) && defined(SALIERI_DEFINED_Deref_pre_opt_valid)
1127# undef _Deref_pre_opt_valid_
1128#endif
1129#if !defined(_Deref_pre_opt_valid_)
1130# define _Deref_pre_opt_valid_
1131# define SALIERI_DEFINED_Deref_pre_opt_valid
1132#endif
1133
1134#if defined(_Deref_pre_valid_) && defined(SALIERI_DEFINED_Deref_pre_valid)
1135# undef _Deref_pre_valid_
1136#endif
1137#if !defined(_Deref_pre_valid_)
1138# define _Deref_pre_valid_
1139# define SALIERI_DEFINED_Deref_pre_valid
1140#endif
1141
1142#if defined(_Deref_prepost_valid_) && defined(SALIERI_DEFINED_Deref_prepost_valid)
1143# undef _Deref_prepost_valid_
1144#endif
1145#if !defined(_Deref_prepost_valid_)
1146# define _Deref_prepost_valid_
1147# define SALIERI_DEFINED_Deref_prepost_valid
1148#endif
1149
1150#if defined(_Post_equal_to_) && defined(SALIERI_DEFINED_Post_equal_to)
1151# undef _Post_equal_to_
1152#endif
1153#if !defined(_Post_equal_to_)
1154# define _Post_equal_to_(expr)
1155# define SALIERI_DEFINED_Post_equal_to
1156#endif
1157
1158#if defined(_Post_invalid_) && defined(SALIERI_DEFINED_Post_invalid)
1159# undef _Post_invalid_
1160#endif
1161#if !defined(_Post_invalid_)
1162# define _Post_invalid_
1163# define SALIERI_DEFINED_Post_invalid
1164#endif
1165
1166#if defined(_Post_valid_) && defined(SALIERI_DEFINED_Post_valid)
1167# undef _Post_valid_
1168#endif
1169#if !defined(_Post_valid_)
1170# define _Post_valid_
1171# define SALIERI_DEFINED_Post_valid
1172#endif
1173
1174#if defined(_Post_writable_byte_size_) && defined(SALIERI_DEFINED_Post_equal_to)
1175# undef _Post_writable_byte_size_
1176#endif
1177#if !defined(_Post_writable_byte_size_)
1178# define _Post_writable_byte_size_(expr)
1179# define SALIERI_DEFINED_Post_writable_byte_size
1180#endif
1181
1182#if defined(_Post_satisfies_) && defined(SALIERI_DEFINED_Post_satisfies)
1183# undef _Post_satisfies_
1184#endif
1185#if !defined(_Post_satisfies_)
1186# define _Post_satisfies_(expr)
1187# define SALIERI_DEFINED_Post_satisfies
1188#endif
1189
1190#if defined(_Deref_post_opt_valid_) && defined(SALIERI_DEFINED_Deref_post_opt_valid)
1191# undef _Deref_post_opt_valid_
1192#endif
1193#if !defined(_Deref_post_opt_valid_)
1194# define _Deref_post_opt_valid_
1195# define SALIERI_DEFINED_Deref_post_opt_valid
1196#endif
1197
1198#if defined(_Deref_post_valid_) && defined(SALIERI_DEFINED_Deref_post_valid)
1199# undef _Deref_post_valid_
1200#endif
1201#if !defined(_Deref_post_valid_)
1202# define _Deref_post_valid_
1203# define SALIERI_DEFINED_Deref_post_valid
1204#endif
1205
1206#if defined(_Deref_post_null_) && defined(SALIERI_DEFINED_Deref_post_null)
1207# undef _Deref_post_null_
1208#endif
1209#if !defined(_Deref_post_null_)
1210# define _Deref_post_null_
1211# define SALIERI_DEFINED_Deref_post_null
1212#endif
1213
1214#if defined(_Struct_size_bytes_) && defined(SALIERI_DEFINED_Struct_size_bytes)
1215# undef _Struct_size_bytes_
1216#endif
1217#if !defined(_Struct_size_bytes_)
1218# define _Struct_size_bytes_(size)
1219# define SALIERI_DEFINED_Struct_size_bytes
1220#endif
1221
1222/* Annotating Function Behavior
1223 *
1224 * https://msdn.microsoft.com/en-us/library/jj159529.aspx
1225 *****/
1226
1227#if defined(_Called_from_function_class_) && defined(SALIERI_DEFINED_Called_from_function_class)
1228# undef _Called_from_function_class_
1229#endif
1230#if !defined(_Called_from_function_class_)
1231# define _Called_from_function_class_(name)
1232# define SALIERI_DEFINED_Called_from_function_class
1233#endif
1234
1235#if defined(_Check_return_) && defined(SALIERI_DEFINED_Check_return)
1236# undef _Check_return_
1237#endif
1238#if !defined(_Check_return_)
1239# define _Check_return_
1240# define SALIERI_DEFINED_Check_return
1241#endif
1242
1243#if defined(_Function_class_) && defined(SALIERI_DEFINED_Function_class)
1244# undef _Function_class_
1245#endif
1246#if !defined(_Function_class_)
1247# define _Function_class_(name)
1248# define SALIERI_DEFINED_Function_class
1249#endif
1250
1251#if defined(_Raises_SEH_exception_) && defined(SALIERI_DEFINED_Raises_SEH_exception)
1252# undef _Raises_SEH_exception_
1253#endif
1254#if !defined(_Raises_SEH_exception_)
1255# define _Raises_SEH_exception_
1256# define SALIERI_DEFINED_Raises_SEH_exception
1257#endif
1258
1259#if defined(_Must_inspect_result_) && defined(SALIERI_DEFINED_Must_inspect_result)
1260# undef _Must_inspect_result_
1261#endif
1262#if !defined(_Must_inspect_result_)
1263# define _Must_inspect_result_
1264# define SALIERI_DEFINED_Must_inspect_result
1265#endif
1266
1267#if defined(_Use_decl_annotations_) && defined(SALIERI_DEFINED_Use_decl_annotations)
1268# undef _Use_decl_annotations_
1269#endif
1270#if !defined(_Use_decl_annotations_)
1271# define _Use_decl_annotations_
1272# define SALIERI_DEFINED_Use_decl_annotations
1273#endif
1274
1275#if defined(_Always_) && defined(SALIERI_DEFINED_Always)
1276# undef _Always_
1277#endif
1278#if !defined(_Always_)
1279# define _Always_(anno_list)
1280# define SALIERI_DEFINED_Always
1281#endif
1282
1283#if defined(_On_failure_) && defined(SALIERI_DEFINED_On_failure)
1284# undef _On_failure_
1285#endif
1286#if !defined(_On_failure_)
1287# define _On_failure_(anno_list)
1288# define SALIERI_DEFINED_On_failure
1289#endif
1290
1291#if defined(_Return_type_success_) && defined(SALIERI_DEFINED_Return_type_success)
1292# undef _Return_type_success_
1293#endif
1294#if !defined(_Return_type_success_)
1295# define _Return_type_success_(expr)
1296# define SALIERI_DEFINED_Return_type_success
1297#endif
1298
1299#if defined(_Success_) && defined(SALIERI_DEFINED_Success)
1300# undef _Success_
1301#endif
1302#if !defined(_Success_)
1303# define _Success_(expr)
1304# define SALIERI_DEFINED_Success
1305#endif
1306
1307/* Annotating Structs and Classes
1308 *
1309 * https://msdn.microsoft.com/en-us/library/jj159528.aspx
1310 *****/
1311
1312#if defined(_Field_range_) && defined(SALIERI_DEFINED_Field_range)
1313# undef _Field_range_
1314#endif
1315#if !defined(_Field_range_)
1316# define _Field_range_(low, high)
1317# define SALIERI_DEFINED_Field_range
1318#endif
1319
1320#if defined(_Field_size_) && defined(SALIERI_DEFINED_Field_size)
1321# undef _Field_size_
1322#endif
1323#if !defined(_Field_size_)
1324# define _Field_size_(size)
1325# define SALIERI_DEFINED_Field_size
1326#endif
1327
1328#if defined(_Field_size_part_) && defined(SALIERI_DEFINED_Field_size_part)
1329# undef _Field_size_part_
1330#endif
1331#if !defined(_Field_size_part_)
1332# define _Field_size_part_(size)
1333# define SALIERI_DEFINED_Field_size_part
1334#endif
1335
1336#if defined(_Field_size_opt_) && defined(SALIERI_DEFINED_Field_size_opt)
1337# undef _Field_size_opt_
1338#endif
1339#if !defined(_Field_size_opt_)
1340# define _Field_size_opt_(size)
1341# define SALIERI_DEFINED_Field_size_opt
1342#endif
1343
1344#if defined(_Field_size_bytes_) && defined(SALIERI_DEFINED_Field_size_bytes)
1345# undef _Field_size_bytes_
1346#endif
1347#if !defined(_Field_size_bytes_)
1348# define _Field_size_bytes_(size)
1349# define SALIERI_DEFINED_Field_size_bytes
1350#endif
1351
1352#if defined(_Field_size_bytes_opt_) && defined(SALIERI_DEFINED_Field_size_bytes_opt)
1353# undef _Field_size_bytes_opt_
1354#endif
1355#if !defined(_Field_size_bytes_opt_)
1356# define _Field_size_bytes_opt_(size)
1357# define SALIERI_DEFINED_Field_size_bytes_opt
1358#endif
1359
1360#if defined(_Field_size_part_) && defined(SALIERI_DEFINED_Field_size_part)
1361# undef _Field_size_part_
1362#endif
1363#if !defined(_Field_size_part_)
1364# define _Field_size_part_(size, count)
1365# define SALIERI_DEFINED_Field_size_part
1366#endif
1367
1368#if defined(_Field_size_part_opt_) && defined(SALIERI_DEFINED_Field_size_part_opt)
1369# undef _Field_size_part_opt_
1370#endif
1371#if !defined(_Field_size_part_opt_)
1372# define _Field_size_part_opt_(size, count)
1373# define SALIERI_DEFINED_Field_size_part_opt
1374#endif
1375
1376#if defined(_Field_size_bytes_part_) && defined(SALIERI_DEFINED_Field_size_bytes_part)
1377# undef _Field_size_bytes_part_
1378#endif
1379#if !defined(_Field_size_bytes_part_)
1380# define _Field_size_bytes_part_(size, count)
1381# define SALIERI_DEFINED_Field_size_bytes_part
1382#endif
1383
1384#if defined(_Field_size_bytes_part_opt_) && defined(SALIERI_DEFINED_Field_size_bytes_part_opt)
1385# undef _Field_size_bytes_part_opt_
1386#endif
1387#if !defined(_Field_size_bytes_part_opt_)
1388# define _Field_size_bytes_part_opt_(size, count)
1389# define SALIERI_DEFINED_Field_size_bytes_part_opt
1390#endif
1391
1392#if defined(_Field_size_full_) && defined(SALIERI_DEFINED_Field_size_full)
1393# undef _Field_size_full_
1394#endif
1395#if !defined(_Field_size_full_)
1396# define _Field_size_full_(size)
1397# define SALIERI_DEFINED_Field_size_full
1398#endif
1399
1400#if defined(_Field_size_full_opt_) && defined(SALIERI_DEFINED_Field_size_full_opt)
1401# undef _Field_size_full_opt_
1402#endif
1403#if !defined(_Field_size_full_opt_)
1404# define _Field_size_full_opt_(size)
1405# define SALIERI_DEFINED_Field_size_full_opt
1406#endif
1407
1408#if defined(_Field_size_bytes_full_) && defined(SALIERI_DEFINED_Field_size_bytes_full)
1409# undef _Field_size_bytes_full_
1410#endif
1411#if !defined(_Field_size_bytes_full_)
1412# define _Field_size_bytes_full_(size)
1413# define SALIERI_DEFINED_Field_size_bytes_full
1414#endif
1415
1416#if defined(_Field_size_bytes_full_opt_) && defined(SALIERI_DEFINED_Field_size_bytes_full_opt)
1417# undef _Field_size_bytes_full_opt_
1418#endif
1419#if !defined(_Field_size_bytes_full_opt_)
1420# define _Field_size_bytes_full_opt_(size)
1421# define SALIERI_DEFINED_Field_size_bytes_full_opt
1422#endif
1423
1424#if defined(_Struct_size_bytes_) && defined(SALIERI_DEFINED_Struct_size_bytes)
1425# undef _Struct_size_bytes_
1426#endif
1427#if !defined(_Struct_size_bytes_)
1428# define _Struct_size_bytes_(size)
1429# define SALIERI_DEFINED_Struct_size_bytes
1430#endif
1431
1432/* Annotating Locking Behavior
1433 *
1434 * https://msdn.microsoft.com/en-us/library/hh916381.aspx
1435 *****/
1436
1437#if defined(_Acquires_exclusive_lock_) && defined(SALIERI_DEFINED_Acquires_exclusive_lock)
1438# undef _Acquires_exclusive_lock_
1439#endif
1440#if !defined(_Acquires_exclusive_lock_)
1441# define _Acquires_exclusive_lock_(expr)
1442# define SALIERI_DEFINED_Acquires_exclusive_lock
1443#endif
1444
1445#if defined(_Acquires_lock_) && defined(SALIERI_DEFINED_Acquires_lock)
1446# undef _Acquires_lock_
1447#endif
1448#if !defined(_Acquires_lock_)
1449# define _Acquires_lock_(expr)
1450# define SALIERI_DEFINED_Acquires_lock
1451#endif
1452
1453#if defined(_Acquires_nonreentrant_lock_) && defined(SALIERI_DEFINED_Acquires_nonreentrant_lock)
1454# undef _Acquires_nonreentrant_lock_
1455#endif
1456#if !defined(_Acquires_nonreentrant_lock_)
1457# define _Acquires_nonreentrant_lock_(expr)
1458# define SALIERI_DEFINED_Acquires_nonreentrant_lock
1459#endif
1460
1461#if defined(_Acquires_shared_lock_) && defined(SALIERI_DEFINED_Acquires_shared_lock)
1462# undef _Acquires_shared_lock_
1463#endif
1464#if !defined(_Acquires_shared_lock_)
1465# define _Acquires_shared_lock_(expr)
1466# define SALIERI_DEFINED_Acquires_shared_lock
1467#endif
1468
1469#if defined(_Create_lock_level_) && defined(SALIERI_DEFINED_Create_lock_level)
1470# undef _Create_lock_level_
1471#endif
1472#if !defined(_Create_lock_level_)
1473# define _Create_lock_level_(name)
1474# define SALIERI_DEFINED_Create_lock_level
1475#endif
1476
1477#if defined(_Has_lock_kind_) && defined(SALIERI_DEFINED_Has_lock_kind)
1478# undef _Has_lock_kind_
1479#endif
1480#if !defined(_Has_lock_kind_)
1481# define _Has_lock_kind_(kind)
1482# define SALIERI_DEFINED_Has_lock_kind
1483#endif
1484
1485#if defined(_Has_lock_level_) && defined(SALIERI_DEFINED_Has_lock_level)
1486# undef _Has_lock_level_
1487#endif
1488#if !defined(_Has_lock_level_)
1489# define _Has_lock_level_(name)
1490# define SALIERI_DEFINED_Has_lock_level
1491#endif
1492
1493#if defined(_Lock_level_order_) && defined(SALIERI_DEFINED_Lock_level_order)
1494# undef _Lock_level_order_
1495#endif
1496#if !defined(_Lock_level_order_)
1497# define _Lock_level_order_(name1, name2)
1498# define SALIERI_DEFINED_Lock_level_order
1499#endif
1500
1501#if defined(_Post_same_lock_) && defined(SALIERI_DEFINED_Post_same_lock)
1502# undef _Post_same_lock_
1503#endif
1504#if !defined(_Post_same_lock_)
1505# define _Post_same_lock_(expr1, expr2)
1506# define SALIERI_DEFINED_Post_same_lock
1507#endif
1508
1509#if defined(_Releases_exclusive_lock_) && defined(SALIERI_DEFINED_Releases_exclusive_lock)
1510# undef _Releases_exclusive_lock_
1511#endif
1512#if !defined(_Releases_exclusive_lock_)
1513# define _Releases_exclusive_lock_(expr)
1514# define SALIERI_DEFINED_Releases_exclusive_lock
1515#endif
1516
1517#if defined(_Releases_lock_) && defined(SALIERI_DEFINED_Releases_lock)
1518# undef _Releases_lock_
1519#endif
1520#if !defined(_Releases_lock_)
1521# define _Releases_lock_(expr)
1522# define SALIERI_DEFINED_Releases_lock
1523#endif
1524
1525#if defined(_Releases_nonreentrant_lock_) && defined(SALIERI_DEFINED_Releases_nonreentrant_lock)
1526# undef _Releases_nonreentrant_lock_
1527#endif
1528#if !defined(_Releases_nonreentrant_lock_)
1529# define _Releases_nonreentrant_lock_(expr)
1530# define SALIERI_DEFINED_Releases_nonreentrant_lock
1531#endif
1532
1533#if defined(_Releases_shared_lock_) && defined(SALIERI_DEFINED_Releases_shared_lock)
1534# undef _Releases_shared_lock_
1535#endif
1536#if !defined(_Releases_shared_lock_)
1537# define _Releases_shared_lock_(expr)
1538# define SALIERI_DEFINED_Releases_shared_lock
1539#endif
1540
1541#if defined(_Requires_lock_held_) && defined(SALIERI_DEFINED_Requires_lock_held)
1542# undef _Requires_lock_held_
1543#endif
1544#if !defined(_Requires_lock_held_)
1545# define _Requires_lock_held_(expr)
1546# define SALIERI_DEFINED_Requires_lock_held
1547#endif
1548
1549#if defined(_Requires_lock_not_held_) && defined(SALIERI_DEFINED_Requires_lock_not_held)
1550# undef _Requires_lock_not_held_
1551#endif
1552#if !defined(_Requires_lock_not_held_)
1553# define _Requires_lock_not_held_(expr)
1554# define SALIERI_DEFINED_Requires_lock_not_held
1555#endif
1556
1557#if defined(_Requires_no_locks_held_) && defined(SALIERI_DEFINED_Requires_no_locks_held)
1558# undef _Requires_no_locks_held_
1559#endif
1560#if !defined(_Requires_no_locks_held_)
1561# define _Requires_no_locks_held_
1562# define SALIERI_DEFINED_Requires_no_locks_held
1563#endif
1564
1565#if defined(_Requires_shared_lock_held_) && defined(SALIERI_DEFINED_Requires_shared_lock_held)
1566# undef _Requires_shared_lock_held_
1567#endif
1568#if !defined(_Requires_shared_lock_held_)
1569# define _Requires_shared_lock_held_(expr)
1570# define SALIERI_DEFINED_Requires_shared_lock_held
1571#endif
1572
1573#if defined(_Requires_exclusive_lock_held_) && defined(SALIERI_DEFINED_Requires_exclusive_lock_held)
1574# undef _Requires_exclusive_lock_held_
1575#endif
1576#if !defined(_Requires_exclusive_lock_held_)
1577# define _Requires_exclusive_lock_held_(expr)
1578# define SALIERI_DEFINED_Requires_exclusive_lock_held
1579#endif
1580
1581/* Shared Data Access Annotations */
1582
1583#if defined(_Guarded_by_) && defined(SALIERI_DEFINED_Guarded_by)
1584# undef _Guarded_by_
1585#endif
1586#if !defined(_Guarded_by_)
1587# define _Guarded_by_(expr)
1588# define SALIERI_DEFINED_Guarded_by
1589#endif
1590
1591#if defined(_Interlocked_) && defined(SALIERI_DEFINED_Interlocked)
1592# undef _Interlocked_
1593#endif
1594#if !defined(_Interlocked_)
1595# define _Interlocked_
1596# define SALIERI_DEFINED_Interlocked
1597#endif
1598
1599#if defined(_Interlocked_operand_) && defined(SALIERI_DEFINED_Interlocked_operand)
1600# undef _Interlocked_operand_
1601#endif
1602#if !defined(_Interlocked_operand_)
1603# define _Interlocked_operand_
1604# define SALIERI_DEFINED_Interlocked_operand
1605#endif
1606
1607#if defined(_Write_guarded_by_) && defined(SALIERI_DEFINED_Write_guarded_by)
1608# undef _Write_guarded_by_
1609#endif
1610#if !defined(_Write_guarded_by_)
1611# define _Write_guarded_by_(expr)
1612# define SALIERI_DEFINED_Write_guarded_by
1613#endif
1614
1615/* Specifying When and Where an Annotation Applies
1616 *
1617 * https://msdn.microsoft.com/en-us/library/jj159526.aspx
1618 *****/
1619
1620#if defined(_At_) && defined(SALIERI_DEFINED_At)
1621# undef _At_
1622#endif
1623#if !defined(_At_)
1624# define _At_(expr, anno_list)
1625# define SALIERI_DEFINED_At
1626#endif
1627
1628#if defined(_At_buffer_) && defined(SALIERI_DEFINED_At_buffer)
1629# undef _At_buffer_
1630#endif
1631#if !defined(_At_buffer_)
1632# define _At_buffer_(expr, iter, elem_count, anno_list)
1633# define SALIERI_DEFINED_At_buffer
1634#endif
1635
1636#if defined(_Group_) && defined(SALIERI_DEFINED_Group)
1637# undef _Group_
1638#endif
1639#if !defined(_Group_)
1640# define _Group_(anno_list)
1641# define SALIERI_DEFINED_Group
1642#endif
1643
1644#if defined(_When_) && defined(SALIERI_DEFINED_When)
1645# undef _When_
1646#endif
1647#if !defined(_When_)
1648# define _When_(expr, anno_list)
1649# define SALIERI_DEFINED_When
1650#endif
1651
1652#if !defined(_MSC_VER)
1653
1654/* Intrinsic Functions
1655 *
1656 * https://msdn.microsoft.com/en-us/library/jj159527.aspx
1657 *****/
1658
1659/* General Purpose */
1660
1661#if defined(_Curr_) && defined(SALIERI_DEFINED_Curr)
1662# undef _Curr_
1663#endif
1664#if !defined(_Curr_)
1665# define _Curr_
1666# define SALIERI_DEFINED_Curr
1667#endif
1668
1669#if defined(_Inexpressible_) && defined(SALIERI_DEFINED_Inexpressible)
1670# undef _Inexpressible_
1671#endif
1672#if !defined(_Inexpressible_)
1673# define _Inexpressible_(expr)
1674# define SALIERI_DEFINED_Inexpressible
1675#endif
1676
1677#if defined(_Nullterm_length_) && defined(SALIERI_DEFINED_Nullterm_length)
1678# undef _Nullterm_length_
1679#endif
1680#if !defined(_Nullterm_length_)
1681# define _Nullterm_length_(param)
1682# define SALIERI_DEFINED_Nullterm_length
1683#endif
1684
1685#if defined(_Old_) && defined(SALIERI_DEFINED_Old)
1686# undef _Old_
1687#endif
1688#if !defined(_Old_)
1689# define _Old_(expr)
1690# define SALIERI_DEFINED_Old
1691#endif
1692
1693#if defined(_Param_) && defined(SALIERI_DEFINED_Param)
1694# undef _Param_
1695#endif
1696#if !defined(_Param_)
1697# define _Param_(n)
1698# define SALIERI_DEFINED_Param
1699#endif
1700
1701/* String Specific */
1702
1703#if defined(_String_length_) && defined(SALIERI_DEFINED_String_length)
1704# undef _String_length_
1705#endif
1706#if !defined(_String_length_)
1707# define _String_length_(param)
1708# define SALIERI_DEFINED_String_length
1709#endif
1710
1711#endif
1712
1713#ifndef _Analysis_assume_
1714#define _Analysis_assume_(expr)
1715#endif
1716
1717#ifndef _Analysis_assume_lock_held_
1718#define _Analysis_assume_lock_held_(expr)
1719#endif
1720
1721#ifndef _Analysis_noreturn_
1722#define _Analysis_noreturn_
1723#endif
1724
1725#define _In_ptr_ _In_ _Deref_pre_valid_
1726
1727#define _In_ptr_opt_ _In_ _Deref_pre_opt_valid_
1728
1729#define _Out_ptr_ _Inout_ _Deref_post_valid_
1730
1731#define _Inout_ptr_ _Inout_ _Deref_prepost_valid_
1732// _Deref_prepost_opt_valid_ gets this wrong and uses _Deref_post_opt_valid_
1733// odd because _Prepost_opt_valid_ is correct
1734#define _Inout_ptr_opt_ _Inout_ _Deref_pre_opt_valid_ _Deref_post_valid_
1735
1736#define _Inout_ptr_uninit_ _Inout_ _Deref_pre_valid_ _Deref_post_null_
1737
1738#define _Inout_ptr_opt_uninit_ _Inout_ _Deref_pre_opt_valid_ _Deref_post_null_
1739
1740#if defined(SALIERI_VERSION)
1741# undef SALIERI_VERSION
1742#endif
1743
1744#define SALIERI_VERSION 1
1745
1746#endif /* !defined(SALIERI_VERSION) || (SALIERI_VERSION < X) */