OSSP CVS Repository

ossp - ossp-pkg/act/act.h.in
Not logged in
[Honeypot]  [Browse]  [Directory]  [Home]  [Login
[Reports]  [Search]  [Ticket]  [Timeline
  [Raw

ossp-pkg/act/act.h.in
/*
**  OSSP act - Abstract Container Types
**  Copyright (c) 1999-2003 Ralf S. Engelschall <rse@engelschall.com>
**  Copyright (c) 1999-2003 The OSSP Project <http://www.ossp.org/>
**
**  This file is part of OSSP act, an abstract container type library
**  which can be found at http://www.ossp.org/pkg/lib/act/.
**
**  Permission to use, copy, modify, and distribute this software for
**  any purpose with or without fee is hereby granted, provided that
**  the above copyright notice and this permission notice appear in all
**  copies.
**
**  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
**  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
**  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
**  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
**  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
**  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
**  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
**  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
**  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
**  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
**  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
**  SUCH DAMAGE.
**
**  act.h: public Application Programming Interface (API)
*/

#ifndef _ACT_H_
#define _ACT_H_

    /* the library version */
#ifndef ACT_VERSION
#define ACT_VERSION @ACT_VERSION_HEX@
#endif

    /* essential headers */
#include <sys/types.h>     /* for ssize_t, off_t */

    /* essential typedefs */
@HAVE_ACT_UINT8_T@
@HAVE_ACT_UINT16_T@
@HAVE_ACT_UINT32_T@
@HAVE_ACT_UINT64_T@
@HAVE_ACT_SIZE_T@
typedef @ACT_UINT8_T@ act_uint8_t;
typedef @ACT_UINT16_T@ act_uint16_t;
typedef @ACT_UINT32_T@ act_uint32_t;
typedef @ACT_UINT64_T@ act_uint64_t;
typedef @ACT_SIZE_T@ act_size_t;

    /* C++ support */
#ifdef __cplusplus
#define BEGIN_DECLARATION extern "C" {
#define END_DECLARATION   }
#else
#define BEGIN_DECLARATION /*nop*/
#define END_DECLARATION   /*nop*/
#endif

/* true and false boolean values */
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
/* Do not depend on the exact TRUE value, i.e. never do: x == TRUE.
   Use TRUE only for return or assignment.  */
#define TRUE  !FALSE
#endif

/* null values for pointers and characters */
#ifndef NULL
#define NULL ((void *)0)
#endif
#ifndef NUL
#define NUL '\0'
#endif

/*
 *  Internal Bitmask Calculation Macros
 *  (Notice: bit positions are counted n...0, i.e. lowest bit is position 0)
 */

/* generate a bitmask consisting of 1 bits from (and including)
   bit position `l' (left) to (and including) bit position `r' */
#define _BM_MASK(l,r) (((1<<((l)-(r)+1))-1)<<(r))

/* extract a value v from a word w at position `l' to `r' and return value */
#define _BM_GET(w,l,r) (((w)>>(r))&_BM_MASK((l)-(r),0))

/* insert a value v into a word w at position `l' to `r' and return word */
#define _BM_SET(w,l,r,v) ((w)|(((v)&_BM_MASK((l)-(r),0))<<(r)))

/* generate a single bit `b' (0 or 1) at bit position `n' */
#define _BM_BIT(n,b) ((b)<<(n))

/* generate a quad word octet of bits (a half byte, i.e. bit positions 3 to 0) */
#define _BM_QUAD(b3,b2,b1,b0) (_BM_BIT(3,(b3))|_BM_BIT(2,(b2))|_BM_BIT(1,(b1))|_BM_BIT(0,(b0)))

/* generate an octet word of bits (a byte, i.e. bit positions 7 to 0) */
#define _BM_OCTET(b7,b6,b5,b4,b3,b2,b1,b0) ((_BM_QUAD(b7,b6,b5,b4)<<4)|_BM_QUAD(b3,b2,b1,b0))

/* generate the value 2^n */
#define _BM_POW2(n) _BM_BIT(1,n)

/* shift word w k bits to the left or to the right */
#define _BM_SHL(w,k) ((w)<<(k))
#define _BM_SHR(w,k) ((w)>>(k))

/* rotate word w (of bits n..0) k bits to the left or to the right */
#define _BM_ROL(w,n,k) (_BM_SHL((w),(k))&_BM_MASK(n,0))|_BM_SHR(((w)&_BM_MASK(n,0)),(n)-(k))
#define _BM_ROR(w,n,k) (_BM_SHR(((w)&_BM_MASK(n,0)),(k)))|_BM_SHL(((w),(n)-(k))&_BM_MASK(n,0))

/*
 * Some math functions
 */
#ifndef _M_MIN
#define _M_MIN(a,b) (((a)<(b)) ? (a) : (b))
#endif
#ifndef _M_MAX
#define _M_MAX(a,b) (((a)>(b)) ? (a) : (b))
#endif
#ifndef _M_ABS
#define _M_ABS(a)   (((a)>0) ? (a) : -(a))
#endif
#ifndef _M_ALIGN
#define _M_ALIGN(a) (((unsigned long int)(a)+(sizeof((void *)-1)))&(~(sizeof((void *)-1))))
#endif

/*
 * A hacker macro for finding the offset of a `field'
 * in a structure of type `type'.
 */
#define _OffsetOf(type,s_field) \
    ((unsigned int)(((char *)(&(((type *)0)->field)))-((char *)0)))

/*
 *  ACT data types
 */

enum act_type_en {
    act_type_ptr,
    act_type_int,
    act_type_long,
    act_type_double
};
typedef enum act_type_en act_type_t;

/*
 * Act return types
 */
typedef enum {
    ACT_OK = 0,
    ACT_ERR_ARG,
    ACT_ERR_USE,
    ACT_ERR_INT,
    ACT_ERR_IMP,
    ACT_ERR_SYS
} act_rc_t;

/*
 * ???
 */

/* additional errno values */
#define ACT_E_NOMEM  0
#define ACT_E_INVAL  0
#define ACT_E_INTERN 0

/* positions */
#define ACT_POS_ABOVE  0
#define ACT_POS_BELOW  0
#define ACT_POS_BEFORE 0
#define ACT_POS_AFTER  0

/* walking */
#define ACT_MOV_PARENT   0
#define ACT_MOV_CHILD(n) 0
#define ACT_MOV_PREV     0
#define ACT_MOV_NEXT     0

/* boolean type */
typedef unsigned short int act_bool_t;

#define ACT_CTX_KEY_SIZE    ACT_CTX_ID(int,COMMON,0)
#define ACT_CTX_KEY_LOAN    ACT_CTX_ID(int,COMMON,1)
#define ACT_CTX_KEY_ISPTR   ACT_CTX_ID(int,COMMON,2)
#define ACT_CTX_VAL_SIZE    ACT_CTX_ID(int,COMMON,3)
#define ACT_CTX_VAL_LOAN    ACT_CTX_ID(int,COMMON,4)
#define ACT_CTX_VAL_ISPTR   ACT_CTX_ID(int,COMMON,5)
#define ACT_CTX_VAL_EXPECT  ACT_CTX_ID(int,COMMON,6)

#include "act_lib.h"
#include "act_ctx.h"

#endif /* _ACT_H_ */

CVSTrac 2.0.1