source: trunk/kStuff/kRdr/kRdrInternal.h@ 3543

Last change on this file since 3543 was 3543, checked in by bird, 18 years ago

kRdr hacking.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.8 KB
Line 
1/* $Id: kRdrInternal.h 3543 2007-08-25 06:10:29Z bird $ */
2/** @file
3 * kRdr - Internal Header.
4 */
5
6/*
7 * Copyright (c) 2007 knut st. osmundsen <bird-src-spam@anduin.net>
8 *
9 * This file is part of kStuff.
10 *
11 * kStuff is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License as published
13 * by the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * kStuff is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU Lesser General Public License for more details.
20 *
21 * You should have received a copy of the GNU Lesser General Public License
22 * along with kStuff; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 *
25 */
26
27#ifndef ___kRdrInternal_h__
28#define ___kRdrInternal_h__
29
30#include <k/kHlpAssert.h>
31#include <k/kMagics.h>
32
33#ifdef __cplusplus
34extern "C" {
35#endif
36
37/** @defgroup grp_kRdrInternal - Internals
38 * @addtogroup grp_kRdr
39 * @internal
40 * @{ */
41
42/** @def KRDR_STRICT
43 * If defined the kRdr assertions and other runtime checks will be enabled. */
44#ifdef K_ALL_STRICT
45# undef KRDR_STRICT
46# define KRDR_STRICT
47#endif
48
49/** @name Our Assert macros
50 * @{ */
51#ifdef KRDR_STRICT
52# define kRdrAssert(expr) kHlpAssert(expr)
53# define kRdrAssertReturn(expr, rcRet) kHlpAssertReturn(expr, rcRet)
54# define kRdrAssertMsg(expr, msg) kHlpAssertMsg(expr, msg)
55# define kRdrAssertMsgReturn(expr, msg, rcRet) kHlpAssertMsgReturn(expr, msg, rcRet)
56#else /* !KRDR_STRICT */
57# define kRdrAssert(expr) do { } while (0)
58# define kRdrAssertReturn(expr, rcRet) do { if (!(expr)) return (rcRet); } while (0)
59# define kRdrAssertMsg(expr, msg) do { } while (0)
60# define kRdrAssertMsgReturn(expr, msg, rcRet) do { if (!(expr)) return (rcRet); } while (0)
61#endif /* !KRDR_STRICT */
62
63#define kRdrAssertPtr(ptr) kRdrAssertMsg(K_VALID_PTR(ptr), ("%s = %p\n", #ptr, (ptr)))
64#define kRdrAssertPtrReturn(ptr, rcRet) kRdrAssertMsgReturn(K_VALID_PTR(ptr), ("%s = %p -> %d\n", #ptr, (ptr), (rcRet)), (rcRet))
65#define kRdrAssertPtrNull(ptr) kRdrAssertMsg(!(ptr) || K_VALID_PTR(ptr), ("%s = %p\n", #ptr, (ptr)))
66#define kRdrAssertPtrNullReturn(ptr, rcRet) kRdrAssertMsgReturn(!(ptr) || K_VALID_PTR(ptr), ("%s = %p -> %d\n", #ptr, (ptr), (rcRet)), (rcRet))
67#define kRdrAssertRC(rc) kRdrAssertMsg((rc) == 0, ("%s = %d\n", #rc, (rc)))
68#define kRdrAssertRCReturn(rc, rcRet) kRdrAssertMsgReturn((rc) == 0, ("%s = %d -> %d\n", #rc, (rc), (rcRet)), (rcRet))
69#define kRdrAssertFailed() kRdrAssert(0)
70#define kRdrAssertFailedReturn(rcRet) kRdrAssertReturn(0, (rcRet))
71#define kRdrAssertMsgFailed(msg) kRdrAssertMsg(0, msg)
72#define kRdrAssertMsgFailedReturn(msg, rcRet) kRdrAssertMsgReturn(0, msg, (rcRet))
73/** @} */
74
75/** Return / crash validation of a reader argument. */
76#define KRDR_VALIDATE_EX(pRdr, rc) \
77 do { \
78 if ( (pRdr)->u32Magic != KRDR_MAGIC \
79 || (pRdr)->pOps == NULL \
80 )\
81 { \
82 return (rc); \
83 } \
84 } while (0)
85
86/** Return / crash validation of a reader argument. */
87#define KRDR_VALIDATE(pRdr) \
88 KRDR_VALIDATE_EX(pRdr, KERR_INVALID_PARAMETER)
89
90/** Return / crash validation of a reader argument. */
91#define KRDR_VALIDATE_VOID(pRdr) \
92 do { \
93 if ( (pRdr)->u32Magic != KRDR_MAGIC \
94 || (pRdr)->pOps == NULL \
95 )\
96 { \
97 return; \
98 } \
99 } while (0)
100
101
102/** @name Built-in Providers
103 * @{ */
104extern const KRDROPS g_kRdrFileOps;
105/** @} */
106
107/** @} */
108
109#ifdef __cplusplus
110}
111#endif
112
113#endif
114
Note: See TracBrowser for help on using the repository browser.