-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathc_function.h
126 lines (98 loc) · 3.85 KB
/
c_function.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
*
* Copyright (c) 1994
* Hewlett-Packard Company
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. Hewlett-Packard Company makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
*
* Copyright (c) 1996
* Silicon Graphics Computer Systems, Inc.
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. Silicon Graphics makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*/
/*
Copyright (c) 2007 Wenbo Lao(Rob Lao)
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
Wenbo Lao(Rob Lao)
viewpl(at)gmail.com
*/
/*
NOTE: This is an internal header file, You should not attempt to use it directly.
*/
#ifndef _C_FUNCTION_H
#define _C_FUNCTION_H
#include "c_iterator.h"
#define c_unary_function _c_unary_function
#define c_binary_function _c_binary_function
#define c_unary_predicate _c_unary_predicate
#define c_binary_predicate _c_binary_predicate
#define c_unary_negate _c_unary_negate
#define c_binary_negate _c_binary_negate
#define c_identity _c_identity
#define c_select1st _c_select1st
#define c_select1stptr _c_select1stptr
#define c_unary_adapt _c_unary_adapt
#define c_binary_adapt _c_binary_adapt
typedef value_type (*UNARY_FUNCTION)(value_type);
typedef value_type (*BINARY_FUNCTION)(value_type, value_type);
typedef c_bool (*UNARY_PREDICATE)(value_type);
typedef c_bool (*BINARY_PREDICATE)(value_type, value_type);
typedef c_bool (*PREDICATE)(value_type);
typedef struct c_unary_function c_unary_function;
typedef struct c_binary_function c_binary_function;
struct c_unary_function
{
value_type (*O)(c_unary_function * thiz, value_type val);
void * _l;
};
struct c_binary_fuction
{
value_type (*O)(c_binary_function * thiz, value_type val1, value_type val2);
void * _l;
};
typedef struct c_unary_predicate c_unary_predicate;
typedef struct c_binary_predicate c_binary_predicate;
struct c_unary_predicate
{
c_bool (*O)(c_unary_predicate * thiz, value_type val);
void * _l;
};
struct c_binary_predicate
{
c_bool (*O)(c_binary_predicate * thiz, value_type val1, value_type val2);
void * _l;
};
c_unary_predicate c_unary_negate(UNARY_PREDICATE unary_pred);
c_binary_predicate c_binary_negate(BINARY_PREDICATE binary_pred);
c_unary_function c_identity();
c_unary_function c_select1st();
c_unary_function c_select1stptr();
c_unary_predicate c_unary_adapt(UNARY_PREDICATE unary_pred);
c_binary_predicate c_binary_adapt(BINARY_PREDICATE binary_pred);
#endif /* _C_FUNCTION_H */