1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     Result.h
4 
5   Copyright (C)2009-2012 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 46347 $
14  *---------------------------------------------------------------------------*/
15 
16 /* Please see man pages for details
17 
18 
19 
20 
21 */
22 
23 #ifndef NN_RESULT_H_
24 #define NN_RESULT_H_
25 
26 #include <nn/types.h>
27 
28 //-------------------------------------------------------------------
29 // for C / C++
30 
31 /* Please see man pages for details
32 
33 
34 */
35 
36 /* Please see man pages for details
37 
38 
39 
40 
41 
42 */
43 
44 
45 #ifdef __cplusplus
46 extern "C" {
47 #endif  // ifdef __cplusplus
48 
49 /* Please see man pages for details
50 
51 */
52 typedef struct nnResult
53 {
54     bit32   value;
55 }
56 nnResult;
57 
58 #ifdef __cplusplus
59 }
60 #endif  // ifdef __cplusplus
61 
62 /*
63 
64 */
65 /*
66 
67 */
68 
69 
70 //-------------------------------------------------------------------
71 // for C++
72 
73 #ifdef __cplusplus
74 
75 namespace nn {
76 
77 /* Please see man pages for details
78 
79 */
80 
81 class Result
82 {
83 private:
84     static const bit32 MASK_FAIL_BIT        = 0x80000000u; // Most Significant Bit
85 
86     static const s32 SIZE_DESCRIPTION       = 10;
87     static const s32 SIZE_MODULE            =  8;
88     static const s32 SIZE_RESERVE           =  3;
89     static const s32 SIZE_SUMMARY           =  6;
90     static const s32 SIZE_LEVEL             =  5;
91 
92     static const s32 SHIFTS_DESCRIPTION     = 0;
93     static const s32 SHIFTS_MODULE          = SHIFTS_DESCRIPTION + SIZE_DESCRIPTION;
94     static const s32 SHIFTS_RESERVE         = SHIFTS_MODULE      + SIZE_MODULE;
95     static const s32 SHIFTS_SUMMARY         = SHIFTS_RESERVE     + SIZE_RESERVE;
96     static const s32 SHIFTS_LEVEL           = SHIFTS_SUMMARY     + SIZE_SUMMARY;
97     //NN_STATIC_ASSERT( SHIFTS_LEVEL + SIZE_LEVEL == 32 );
98 
99     static const bit32 MASK_NEGATIVE_LEVEL  = (~0u) << SIZE_LEVEL;
100 
101 #define NN_RESULT_H_MAKE_MASK(size, shift)  (((~0u) >> (32 - (size))) << (shift))
102 #define NN_RESULT_H_MAKE_MASK_HELPER(c)     \
103     static const bit32 MASK_ ## c           = NN_RESULT_H_MAKE_MASK(SIZE_ ## c, SHIFTS_ ## c)
104     NN_RESULT_H_MAKE_MASK_HELPER(DESCRIPTION);
105     NN_RESULT_H_MAKE_MASK_HELPER(MODULE);
106     NN_RESULT_H_MAKE_MASK_HELPER(SUMMARY);
107     NN_RESULT_H_MAKE_MASK_HELPER(LEVEL);
108 #undef NN_RESULT_H_MAKE_MASK_HELPER
109 #undef NN_RESULT_H_MAKE_MASK
110 
111 #define NN_RESULT_H_MAKE_MAX(size)          ((~0u) >> (32 - (size)))
112 #define NN_RESULT_H_MAKE_MAX_HELPER(c)      \
113     static const s32 MAX_ ## c              = NN_RESULT_H_MAKE_MAX(SIZE_ ## c)
114     NN_RESULT_H_MAKE_MAX_HELPER(DESCRIPTION);
115     NN_RESULT_H_MAKE_MAX_HELPER(MODULE);
116     NN_RESULT_H_MAKE_MAX_HELPER(SUMMARY);
117     NN_RESULT_H_MAKE_MAX_HELPER(LEVEL);
118 #undef NN_RESULT_H_MAKE_MAX_HELPER
119 #undef NN_RESULT_H_MAKE_MAX
120 
121 public:
122     /* Please see man pages for details
123 
124      */
125     enum Level
126     {
127         //
128         LEVEL_INFO       =  1,
129         //
130         LEVEL_SUCCESS    =  0,
131         //
132         LEVEL_FATAL      = -1,
133         //
134         LEVEL_RESET      = -2,
135         //
136         LEVEL_REINIT     = -3,
137         //
138         LEVEL_USAGE      = -4,
139         //
140         LEVEL_PERMANENT  = -5,
141         //
142         LEVEL_TEMPORARY  = -6,
143         //
144         LEVEL_STATUS     = -7,
145         //
146         LEVEL_END
147     };
148 
149     /* Please see man pages for details
150 
151      */
152     enum Summary
153     {
154         SUMMARY_SUCCESS                 =   0,  //
155         SUMMARY_NOTHING_HAPPENED        =   1,  //
156         SUMMARY_WOULD_BLOCK             =   2,  //
157         SUMMARY_OUT_OF_RESOURCE         =   3,  //
158         SUMMARY_NOT_FOUND               =   4,  //
159         SUMMARY_INVALID_STATE           =   5,  //
160         SUMMARY_NOT_SUPPORTED           =   6,  //
161         SUMMARY_INVALID_ARGUMENT        =   7,  //
162         SUMMARY_WRONG_ARGUMENT          =   8,  //
163         SUMMARY_CANCELLED               =   9,  //
164         SUMMARY_STATUS_CHANGED          =  10,  //
165         SUMMARY_INTERNAL                =  11,  //
166 
167         SUMMARY_INVALID_RESULT_VALUE    = MAX_SUMMARY   //
168     };
169 
170     /* Please see man pages for details
171 
172 
173 
174 
175 
176      */
177     enum Module
178     {
179         MODULE_COMMON                   = 0,
180         MODULE_NN_KERNEL                = 1,
181         MODULE_NN_UTIL,
182         MODULE_NN_FILE_SERVER,
183         MODULE_NN_LOADER_SERVER,
184         MODULE_NN_TCB,
185         MODULE_NN_OS,
186         MODULE_NN_DBG,
187         MODULE_NN_DMNT,
188         MODULE_NN_PDN,
189         MODULE_NN_GX,
190         MODULE_NN_I2C,
191         MODULE_NN_GPIO,
192         MODULE_NN_DD,
193         MODULE_NN_CODEC,
194         MODULE_NN_SPI,
195         MODULE_NN_PXI,
196         MODULE_NN_FS,
197         MODULE_NN_DI,
198         MODULE_NN_HID,
199         MODULE_NN_CAMERA,
200         MODULE_NN_PI,
201         MODULE_NN_PM,
202         MODULE_NN_PMLOW,
203         MODULE_NN_FSI,
204         MODULE_NN_SRV,
205         MODULE_NN_NDM,
206         MODULE_NN_NWM,
207         MODULE_NN_SOCKET,
208         MODULE_NN_LDR,
209         MODULE_NN_ACC,
210         MODULE_NN_ROMFS,
211         MODULE_NN_AM,
212         MODULE_NN_HIO,
213         MODULE_NN_UPDATER,
214         MODULE_NN_MIC,
215         MODULE_NN_FND,
216         MODULE_NN_MP,
217         MODULE_NN_MPWL,
218         MODULE_NN_AC,
219         MODULE_NN_HTTP,
220         MODULE_NN_DSP,
221         MODULE_NN_SND,
222         MODULE_NN_DLP,
223         MODULE_NN_HIOLOW,
224         MODULE_NN_CSND,
225         MODULE_NN_SSL,
226         MODULE_NN_AMLOW,
227         MODULE_NN_NEX,
228         MODULE_NN_FRIENDS,
229         MODULE_NN_RDT,
230         MODULE_NN_APPLET,
231         MODULE_NN_NIM,
232         MODULE_NN_PTM,
233         MODULE_NN_MIDI,
234         MODULE_NN_MC,
235         MODULE_NN_SWC,
236         MODULE_NN_FATFS,
237         MODULE_NN_NGC,
238         MODULE_NN_CARD,
239         MODULE_NN_CARDNOR,
240         MODULE_NN_SDMC,
241         MODULE_NN_BOSS,
242         MODULE_NN_DBM,
243         MODULE_NN_CFG,
244         MODULE_NN_PS,
245         MODULE_NN_CEC,
246         MODULE_NN_IR,
247         MODULE_NN_UDS,
248         MODULE_NN_PL,
249         MODULE_NN_CUP,
250         MODULE_NN_GYROSCOPE,
251         MODULE_NN_MCU,
252         MODULE_NN_NS,
253         MODULE_NN_NEWS,
254         MODULE_NN_RO,
255         MODULE_NN_GD,
256         MODULE_NN_CARDSPI,
257         MODULE_NN_EC,
258         MODULE_NN_WEBBRS,
259         MODULE_NN_TEST,
260         MODULE_NN_ENC,
261         MODULE_NN_PIA,
262 
263         MODULE_APPLICATION              = MAX_MODULE - 1,   //
264 
265         MODULE_INVALID_RESULT_VALUE     = MAX_MODULE        //
266     };
267 
268     /* Please see man pages for details
269 
270 
271 
272      */
273     enum Description
274     {
275         DESCRIPTION_SUCCESS                         =    0,  //
276 
277         DESCRIPTION_INVALID_SELECTION               = MAX_DESCRIPTION - 23,  //
278         DESCRIPTION_TOO_LARGE                       = MAX_DESCRIPTION - 22,  //
279         DESCRIPTION_NOT_AUTHORIZED                  = MAX_DESCRIPTION - 21,  //
280         DESCRIPTION_ALREADY_DONE                    = MAX_DESCRIPTION - 20,  //
281         DESCRIPTION_INVALID_SIZE                    = MAX_DESCRIPTION - 19,  //
282         DESCRIPTION_INVALID_ENUM_VALUE              = MAX_DESCRIPTION - 18,  //
283         DESCRIPTION_INVALID_COMBINATION             = MAX_DESCRIPTION - 17,  //
284         DESCRIPTION_NO_DATA                         = MAX_DESCRIPTION - 16,  //
285         DESCRIPTION_BUSY                            = MAX_DESCRIPTION - 15,  //
286         DESCRIPTION_MISALIGNED_ADDRESS              = MAX_DESCRIPTION - 14,  //
287         DESCRIPTION_MISALIGNED_SIZE                 = MAX_DESCRIPTION - 13,  //
288         DESCRIPTION_OUT_OF_MEMORY                   = MAX_DESCRIPTION - 12,  //
289         DESCRIPTION_NOT_IMPLEMENTED                 = MAX_DESCRIPTION - 11,  //
290         DESCRIPTION_INVALID_ADDRESS                 = MAX_DESCRIPTION - 10,  //
291         DESCRIPTION_INVALID_POINTER                 = MAX_DESCRIPTION -  9,  //
292         DESCRIPTION_INVALID_HANDLE                  = MAX_DESCRIPTION -  8,  //
293         DESCRIPTION_NOT_INITIALIZED                 = MAX_DESCRIPTION -  7,  //
294         DESCRIPTION_ALREADY_INITIALIZED             = MAX_DESCRIPTION -  6,  //
295         DESCRIPTION_NOT_FOUND                       = MAX_DESCRIPTION -  5,  //
296         DESCRIPTION_CANCEL_REQUESTED                = MAX_DESCRIPTION -  4,  //
297         DESCRIPTION_ALREADY_EXISTS                  = MAX_DESCRIPTION -  3,  //
298         DESCRIPTION_OUT_OF_RANGE                    = MAX_DESCRIPTION -  2,  //
299         DESCRIPTION_TIMEOUT                         = MAX_DESCRIPTION -  1,  //
300         DESCRIPTION_INVALID_RESULT_VALUE            = MAX_DESCRIPTION -  0   //
301     };
302 
303 private:
304 
305     bit32 m_Code;
306 
307     template <Result::Level TLevel, Result::Summary TSummary, Result::Module TModule, int TDescription> friend struct Const;
308     template <Result::Level TLevel, Result::Summary TSummary, Result::Module TModule, int TDescription, int TDescriptionMin, int TDescriptionMax> friend struct ConstRange;
Result(bit32 code)309     explicit Result(bit32 code) : m_Code(code) {}
310 
311 public:
Result()312     Result()
313         : m_Code( static_cast<bit32>(
314                     ((static_cast<bit32>(LEVEL_USAGE)   << SHIFTS_LEVEL)         & MASK_LEVEL)        |
315                     ((SUMMARY_INVALID_RESULT_VALUE      << SHIFTS_SUMMARY)       & MASK_SUMMARY)      |
316                     ((MODULE_INVALID_RESULT_VALUE       << SHIFTS_MODULE)        & MASK_MODULE)       |
317                     ((DESCRIPTION_INVALID_RESULT_VALUE  << SHIFTS_DESCRIPTION)   & MASK_DESCRIPTION) ))
318     {
319     }
320 
Result(Level level,Summary summary,Module module,int description)321     Result(Level level, Summary summary, Module module, int description)
322         : m_Code( static_cast<bit32>(
323                     ((level        << SHIFTS_LEVEL)         & MASK_LEVEL)        |
324                     ((summary      << SHIFTS_SUMMARY)       & MASK_SUMMARY)      |
325                     ((module       << SHIFTS_MODULE)        & MASK_MODULE)       |
326                     ((description  << SHIFTS_DESCRIPTION)   & MASK_DESCRIPTION) ))
327     {
328     }
329 
Result(nnResult result)330     Result(nnResult result) : m_Code(result.value) {}
331 /* Please see man pages for details
332 
333 
334 */
335     /* Please see man pages for details
336 
337      */
IsFailure()338     bool IsFailure() const
339     {
340         return (m_Code & MASK_FAIL_BIT) != 0;
341     }
342 
343     /* Please see man pages for details
344 
345      */
IsSuccess()346     bool IsSuccess() const
347     {
348         return !IsFailure();
349     }
350 /*
351 
352 */
353     /* Please see man pages for details
354 
355 
356 
357 
358      */
GetLevel()359     Level GetLevel() const
360     {
361         // TODO: Should create a platform-dependent arithmetic shift inline function and call it
362         if(m_Code & MASK_FAIL_BIT)
363         {
364             return static_cast<Level>( GetCodeBits(MASK_LEVEL, SHIFTS_LEVEL) | MASK_NEGATIVE_LEVEL);
365         }
366         else
367         {
368             return static_cast<Level>( GetCodeBits(MASK_LEVEL, SHIFTS_LEVEL) );
369         }
370     }
371 
372     /* Please see man pages for details
373 
374 
375 
376 
377      */
GetSummary()378     Summary GetSummary() const
379     {
380         return static_cast<Summary>( GetCodeBits(MASK_SUMMARY, SHIFTS_SUMMARY) );
381     }
382 
383     /* Please see man pages for details
384 
385 
386 
387 
388      */
GetModule()389     Module GetModule() const
390     {
391         return static_cast<Module>( GetCodeBits(MASK_MODULE, SHIFTS_MODULE) );
392     }
393 
394     /* Please see man pages for details
395 
396 
397 
398 
399      */
GetDescription()400     int GetDescription() const
401     {
402         return static_cast<int>( GetCodeBits(MASK_DESCRIPTION, SHIFTS_DESCRIPTION) );
403     }
404 
GetValue()405     bit32 GetValue() const { return m_Code; }
406 /* Please see man pages for details
407 
408 
409 */
410     /* Please see man pages for details
411 
412 
413 
414      */
GetPrintableBits()415     bit32 GetPrintableBits() const { return m_Code; }
416 
nnResult()417     operator nnResult() const
418     {
419         nnResult r = {m_Code};
420         return r;
421     }
422 /*
423 
424 */
425 /* Please see man pages for details
426 
427 
428 */
429     /* Please see man pages for details
430 
431 
432 
433 
434 
435 
436 
437      */
438     bool operator ==(const Result& rhs) const { return this->m_Code == rhs.m_Code; }
439 
440     /* Please see man pages for details
441 
442 
443 
444 
445 
446 
447 
448      */
449     bool operator !=(const Result& rhs) const { return this->m_Code != rhs.m_Code; }
450 /*
451 
452 */
453     template <Result::Level TLevel, Result::Summary TSummary, Result::Module TModule, int TDescription> struct Const;
454     template <Result::Level TLevel, Result::Summary TSummary, Result::Module TModule, int TDescription, int TDescriptionMin, int TDescriptionMax> struct ConstRange;
455     template <Result::Level TLevel, Result::Summary TSummary, Result::Module TModule> struct Const_LSM;
456     template <Result::Level TLevel, Result::Module TModule> struct Const_LM;
457     template <Result::Level TLevel> struct Const_L;
458 
459 private:
GetCodeBits(bit32 mask,s32 shift)460     bit32 GetCodeBits(bit32 mask, s32 shift) const
461     {
462         return ((m_Code & mask) >> shift);
463     }
464 
465     template <Result::Level TLevel, Result::Summary TSummary, Result::Module TModule, int TDescription, int TDescriptionMin, int TDescriptionMax>
466     bool operator==(ConstRange<TLevel, TSummary, TModule, TDescription, TDescriptionMin, TDescriptionMax>) const;
467     template <Result::Level TLevel, Result::Summary TSummary, Result::Module TModule, int TDescription, int TDescriptionMin, int TDescriptionMax>
468     bool operator!=(ConstRange<TLevel, TSummary, TModule, TDescription, TDescriptionMin, TDescriptionMax>) const;
469 };
470 
471 template <Result::Level TLevel, Result::Summary TSummary, Result::Module TModule, int TDescription>
472 struct Result::Const : public Result
473 {
474     static const Result::Level Level = TLevel;
475     static const Result::Summary Summary = TSummary;
476     static const Result::Module Module = TModule;
477     static const int Description = TDescription;
478 
479     static const bit32 Value = static_cast<bit32>(
480                     ((static_cast<bit32>(TLevel) << SHIFTS_LEVEL) & MASK_LEVEL)        |
481                     ((TSummary     << SHIFTS_SUMMARY)             & MASK_SUMMARY)      |
482                     ((TModule      << SHIFTS_MODULE)              & MASK_MODULE)       |
483                     ((TDescription << SHIFTS_DESCRIPTION)         & MASK_DESCRIPTION) );
484 
ConstConst485     Const() : Result(Value) {}
486 
IncludesConst487     static bool Includes(Result result)
488     {
489         return result.GetModule() == TModule && result.GetDescription() == TDescription;
490     }
491 };
492 
493 template <Result::Level TLevel, Result::Summary TSummary, Result::Module TModule, int TDescription, int TDescriptionMin, int TDescriptionMax>
494 struct Result::ConstRange : public Result
495 {
496     static const Result::Level Level = TLevel;
497     static const Result::Summary Summary = TSummary;
498     static const Result::Module Module = TModule;
499     static const int Description = TDescription;
500     static const int DescriptionMin = TDescriptionMin;
501     static const int DescriptionMax = TDescriptionMax;
502 
503     static const bit32 Value = static_cast<bit32>(
504                     ((static_cast<bit32>(TLevel) << SHIFTS_LEVEL) & MASK_LEVEL)        |
505                     ((TSummary     << SHIFTS_SUMMARY)             & MASK_SUMMARY)      |
506                     ((TModule      << SHIFTS_MODULE)              & MASK_MODULE)       |
507                     ((TDescription << SHIFTS_DESCRIPTION)         & MASK_DESCRIPTION) );
508 
ConstRangeConstRange509     ConstRange() : Result(Value) {}
510 
IncludesConstRange511     static bool Includes(Result result)
512     {
513         return result.GetModule() == TModule && (TDescriptionMin <= result.GetDescription() && result.GetDescription() <= TDescriptionMax);
514     }
515 
516     friend bool operator<=(Result lhs, ConstRange) { return ConstRange::Includes(lhs); }
517     friend bool operator>=(ConstRange, Result rhs) { return ConstRange::Includes(rhs); }
518 private:
519     bool operator==(Result) const;
520     bool operator!=(Result) const;
521 };
522 
523 template <Result::Level TLevel, Result::Summary TSummary, Result::Module TModule>
524 struct Result::Const_LSM : public Result
525 {
526     static const Result::Level Level = TLevel;
527     static const Result::Summary Summary = TSummary;
528     static const Result::Module Module = TModule;
529 
530     template <int TDescription>
531     struct Const : public Result::Const<TLevel, TSummary, TModule, TDescription> {};
532 
Const_LSMConst_LSM533     Const_LSM(int description) : Result(TLevel, TSummary, TModule, description) {}
534 };
535 
536 template <Result::Level TLevel, Result::Module TModule>
537 struct Result::Const_LM : public Result
538 {
539     static const Result::Level Level = TLevel;
540     static const Result::Module Module = TModule;
541 
542     template <Result::Summary TSummary, int TDescription>
543     struct Const : public Result::Const<TLevel, TSummary, TModule, TDescription> {};
544 
Const_LMConst_LM545     Const_LM(Result::Summary summary, int description) : Result(TLevel, summary, TModule, description) {}
546 };
547 
548 template <Result::Level TLevel>
549 struct Result::Const_L : public Result
550 {
551     static const Result::Level Level = TLevel;
552 
553     template <Result::Summary TSummary, Result::Module TModule, int TDescription>
554     struct Const : public Result::Const<TLevel, TSummary, TModule, TDescription> {};
555 
Const_LConst_L556     Const_L(Result::Summary summary, Result::Module module, int description) : Result(TLevel, summary, module, description) {}
557 };
558 
559 #define NN_DEFINE_RESULT_CONST(name, level, summary, module, description) \
560     typedef ::nn::Result::Const<(level), (summary), (module), (description)> name
561 
562 #define NN_DEFINE_RESULT_CONST_RANGE(name, level, summary, module, description, descriptionMin, descriptionMax) \
563     typedef ::nn::Result::ConstRange<(level), (summary), (module), (description), (descriptionMin), (descriptionMax)> name
564 
565 NN_DEFINE_RESULT_CONST(ResultSuccess, Result::LEVEL_SUCCESS, Result::SUMMARY_SUCCESS, Result::MODULE_COMMON, Result::DESCRIPTION_SUCCESS);
566 
567 #define NN_DEFINE_RESULT_FUNC_LSM(name, level, summary, module) \
568     typedef ::nn::Result::Const_LSM<(level), (summary), (module)> name
569 
570 #define NN_DEFINE_RESULT_CONST_LSM(name, f, description) \
571     typedef f::Const<(description)> name
572 
573 #define NN_DEFINE_RESULT_FUNC_LM(name, level, module) \
574     typedef ::nn::Result::Const_LM<(level), (module)> name
575 
576 #define NN_DEFINE_RESULT_CONST_LM(name, f, summary, description) \
577     typedef f::Const<(summary), (description)> name
578 
579 #define NN_DEFINE_RESULT_FUNC_L(name, level) \
580     typedef ::nn::Result::Const_L<(level)> name
581 
582 #define NN_DEFINE_RESULT_CONST_L(name, f, summary, module, description) \
583     typedef f::Const<(summary), (module), (description)> name
584 
MakeInfoResult(Result::Summary summary,Result::Module module,int description)585 inline Result MakeInfoResult(Result::Summary summary, Result::Module module, int description)
586     { return Result(Result::LEVEL_INFO, summary, module, description); }
MakeFatalResult(Result::Summary summary,Result::Module module,int description)587 inline Result MakeFatalResult(Result::Summary summary, Result::Module module, int description)
588     { return Result(Result::LEVEL_FATAL, summary, module, description); }
MakeResetResult(Result::Summary summary,Result::Module module,int description)589 inline Result MakeResetResult(Result::Summary summary, Result::Module module, int description)
590     { return Result(Result::LEVEL_RESET, summary, module, description); }
MakeReInitResult(Result::Summary summary,Result::Module module,int description)591 inline Result MakeReInitResult(Result::Summary summary, Result::Module module, int description)
592     { return Result(Result::LEVEL_REINIT, summary, module, description); }
MakeUsageResult(Result::Summary summary,Result::Module module,int description)593 inline Result MakeUsageResult(Result::Summary summary, Result::Module module, int description)
594     { return Result(Result::LEVEL_USAGE, summary, module, description); }
MakePermanentResult(Result::Summary summary,Result::Module module,int description)595 inline Result MakePermanentResult(Result::Summary summary, Result::Module module, int description)
596     { return Result(Result::LEVEL_PERMANENT, summary, module, description); }
MakeTemporaryResult(Result::Summary summary,Result::Module module,int description)597 inline Result MakeTemporaryResult(Result::Summary summary, Result::Module module, int description)
598     { return Result(Result::LEVEL_TEMPORARY, summary, module, description); }
MakeStatusResult(Result::Summary summary,Result::Module module,int description)599 inline Result MakeStatusResult(Result::Summary summary, Result::Module module, int description)
600     { return Result(Result::LEVEL_STATUS, summary, module, description); }
601 
602 }
603 
604 
605 #endif // __cplusplus
606 
607 #endif /* NN_RESULT_H_ */
608