/*
|
*
|
* 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 Lao wen bo
|
|
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.
|
|
Lao wen bo
|
viewpl(at)gmail.com
|
*/
|
|
#include "c_function.h"
|
#include "c_pair.h"
|
|
static c_bool _c_unary_negate_impl(c_unary_predicate * thiz, value_type val)
|
{
|
return !((UNARY_PREDICATE)(thiz->_l))(val);
|
}
|
|
c_unary_predicate c_unary_negate(UNARY_PREDICATE unary_pred)
|
{
|
c_unary_predicate up;
|
up.O = _c_unary_negate_impl;
|
up._l = unary_pred;
|
return up;
|
}
|
|
static c_bool _c_binary_negate_impl(c_binary_predicate * thiz, value_type val1, value_type val2)
|
{
|
return !((BINARY_PREDICATE)(thiz->_l))(val1, val2);
|
}
|
|
c_binary_predicate c_binary_negate(BINARY_PREDICATE binary_pred)
|
{
|
c_binary_predicate bp;
|
bp.O = _c_binary_negate_impl;
|
bp._l = binary_pred;
|
return bp;
|
}
|
|
static value_type _c_identity_impl(c_unary_function * thiz, value_type val)
|
{
|
return val;
|
}
|
|
c_unary_function c_identity()
|
{
|
c_unary_function uf;
|
uf.O = _c_identity_impl;
|
uf._l = NULL;
|
return uf;
|
}
|
|
static value_type _c_select1st_impl(c_unary_function * thiz, value_type val)
|
{
|
return ((c_ppair)(val))->first;
|
}
|
|
c_unary_function c_select1st()
|
{
|
c_unary_function uf;
|
uf.O = _c_select1st_impl;
|
uf._l = NULL;
|
return uf;
|
}
|
|
static value_type _c_select1stptr_impl(c_unary_function * thiz, value_type val)
|
{
|
return (value_type)(&((c_ppair)(val))->first);
|
}
|
|
c_unary_function c_select1stptr()
|
{
|
c_unary_function uf;
|
uf.O = _c_select1stptr_impl;
|
uf._l = NULL;
|
return uf;
|
}
|
|
static c_bool _c_unary_adapt_impl(c_unary_predicate * thiz, value_type val)
|
{
|
return ((UNARY_PREDICATE)(thiz->_l))(val);
|
}
|
|
c_unary_predicate c_unary_adapt(UNARY_PREDICATE unary_pred)
|
{
|
c_unary_predicate up;
|
up.O = _c_unary_adapt_impl;
|
up._l = unary_pred;
|
return up;
|
}
|
|
static c_bool _c_binary_adapt_impl(c_binary_predicate * thiz, value_type val1, value_type val2)
|
{
|
return ((BINARY_PREDICATE)(thiz->_l))(val1, val2);
|
}
|
|
c_binary_predicate c_binary_adapt(BINARY_PREDICATE binary_pred)
|
{
|
c_binary_predicate bp;
|
bp.O = _c_binary_adapt_impl;
|
bp._l = binary_pred;
|
return bp;
|
}
|