~ubuntu-branches/ubuntu/utopic/gridengine/utopic

« back to all changes in this revision

Viewing changes to source/libs/uti/sge_bitfield.h

  • Committer: Bazaar Package Importer
  • Author(s): Mark Hymers
  • Date: 2008-06-25 22:36:13 UTC
  • Revision ID: james.westby@ubuntu.com-20080625223613-tvd9xlhuoct9kyhm
Tags: upstream-6.2~beta2
ImportĀ upstreamĀ versionĀ 6.2~beta2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef __SGE_BITFIELD_H
 
2
#define __SGE_BITFIELD_H
 
3
/*___INFO__MARK_BEGIN__*/
 
4
/*************************************************************************
 
5
 * 
 
6
 *  The Contents of this file are made available subject to the terms of
 
7
 *  the Sun Industry Standards Source License Version 1.2
 
8
 * 
 
9
 *  Sun Microsystems Inc., March, 2001
 
10
 * 
 
11
 * 
 
12
 *  Sun Industry Standards Source License Version 1.2
 
13
 *  =================================================
 
14
 *  The contents of this file are subject to the Sun Industry Standards
 
15
 *  Source License Version 1.2 (the "License"); You may not use this file
 
16
 *  except in compliance with the License. You may obtain a copy of the
 
17
 *  License at http://gridengine.sunsource.net/Gridengine_SISSL_license.html
 
18
 * 
 
19
 *  Software provided under this License is provided on an "AS IS" basis,
 
20
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 
21
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 
22
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 
23
 *  See the License for the specific provisions governing your rights and
 
24
 *  obligations concerning the Software.
 
25
 * 
 
26
 *   The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 
27
 * 
 
28
 *   Copyright: 2001 by Sun Microsystems, Inc.
 
29
 * 
 
30
 *   All Rights Reserved.
 
31
 * 
 
32
 ************************************************************************/
 
33
/*___INFO__MARK_END__*/
 
34
 
 
35
#include <stdio.h>
 
36
 
 
37
#include "basis_types.h"
 
38
 
 
39
/****** uti/bitfield/BIT_MANIPULATION_MAKROS() ********************************
 
40
*  NAME
 
41
*     ISSET(),VALID(),SETBIT(),CLEARBIT() - Bit manipulation makros 
 
42
*
 
43
*  SYNOPSIS
 
44
*     #define ISSET(a,b)      ((a&b)==b)
 
45
*     #define VALID(a,b)      ((a|b)==b)
 
46
*     #define SETBIT(a,b)     (b=(a)|b);
 
47
*     #define CLEARBIT(a,b)   (b &= (~(a)));
 
48
*
 
49
*  FUNCTION
 
50
*     Makros to get/set/clear bits in native variables. 
 
51
*
 
52
*  INPUTS
 
53
*     int,long,u_long32... a - Bitmask
 
54
*     int,long,u_long32... b - Variable 
 
55
*
 
56
*  RESULT
 
57
*     b will be modified
 
58
*
 
59
*  NOTE
 
60
*     These Makros can't be used in combination with the bitfield type.
 
61
*******************************************************************************/
 
62
#define ISSET(a,b)      ((a&b)==b)
 
63
#define VALID(a,b)      ((a|b)==b)
 
64
#define SETBIT(a,b)     (b=(a)|b);
 
65
#define CLEARBIT(a,b)   (b &= (~(a)));
 
66
 
 
67
typedef struct {
 
68
   unsigned int size;
 
69
   union {
 
70
      char fix[sizeof(char *)];  /* fixed size buffer for small bitfields */
 
71
      char *dyn;                 /* dynamic size buffer for large bitfields */
 
72
   } bf;
 
73
} bitfield;
 
74
 
 
75
bitfield *
 
76
sge_bitfield_new(unsigned int size);
 
77
 
 
78
bitfield *
 
79
sge_bitfield_free(bitfield *bf);
 
80
 
 
81
bool 
 
82
sge_bitfield_init(bitfield *bf, unsigned int size);
 
83
 
 
84
bool 
 
85
sge_bitfield_free_data(bitfield *bf);
 
86
 
 
87
bool 
 
88
sge_bitfield_copy(const bitfield *source, bitfield *target);
 
89
 
 
90
bool 
 
91
sge_bitfield_bitwise_copy(const bitfield *source, bitfield *target);
 
92
 
 
93
bool 
 
94
sge_bitfield_set(bitfield *bf, unsigned int bit);
 
95
 
 
96
bool 
 
97
sge_bitfield_get(const bitfield *bf, unsigned int bit);
 
98
 
 
99
bool 
 
100
sge_bitfield_clear(bitfield *bf, unsigned int bit);
 
101
 
 
102
bool 
 
103
sge_bitfield_reset(bitfield *source);
 
104
 
 
105
bool 
 
106
sge_bitfield_changed(const bitfield *source);
 
107
 
 
108
void 
 
109
sge_bitfield_print(const bitfield *bf, FILE *fd); 
 
110
 
 
111
#define fixed_bits (sizeof(char *) * 8)
 
112
#define sge_bitfield_get_size(bf) ((bf)->size)
 
113
#define sge_bitfield_get_size_bytes(size) ((size) / 8 + (((size) % 8) > 0 ? 1 : 0))
 
114
#define sge_bitfield_get_buffer(source) ((source)->size <= fixed_bits) ? (source)->bf.fix : (source)->bf.dyn
 
115
 
 
116
#endif /* __SGE_BITFIELD_H */