org.glassfish.pfl.ff
Class Factory

java.lang.Object
  extended by org.glassfish.pfl.ff.Factory

public class Factory
extends java.lang.Object

Factory for constructing very simple functions. Note that this does not deal with tail-call elimination, or any optimization: it simply generates functions. Much more sophisticated implementations are possible, starting with the construction of an AST (or some other variation on double dispatching). This is a higher-level function facility which will use facilities such as codegen, which itself uses the lower-level pfl code. AST representation Each node: - Return type - Combinator name (or object?) - list of argument functions

Author:
ken_admin

Nested Class Summary
static class Factory.BinaryFunctionAlias<S,T,R>
           
static class Factory.BinaryFunctionBind1Impl<S,T,R>
           
static class Factory.BinaryFunctionBind2Impl<S,T,R>
           
static class Factory.BinaryPredicateBind1Impl<S,T>
           
static class Factory.BinaryPredicateBind2Impl<S,T>
           
static class Factory.BinaryVoidFunctionBind1Impl<S,T>
           
static class Factory.BinaryVoidFunctionBind2Impl<S,T>
           
static class Factory.Equal<S,T>
           
static class Factory.NullaryFunctionConstantImpl<T>
           
static class Factory.NullaryFunctionDropImpl<T>
           
static class Factory.NullaryPredicateConstantImpl
           
static class Factory.NullaryPredicateDropImpl
           
static class Factory.NullaryPredicateStaticFromImpl
           
static class Factory.UnaryFunctionAlias<S,R>
           
static class Factory.UnaryFunctionBindImpl<S,R>
           
static class Factory.UnaryFunctionCompImpl<S,T,R>
           
static class Factory.UnaryPredicateBindImpl<S>
           
static class Factory.UnaryVoidFunctionBindImpl<S>
           
 
Field Summary
static BinaryFunction<java.lang.Long,java.lang.Long,java.lang.Long> div
           
static BinaryFunction<java.lang.Long,java.lang.Long,java.lang.Long> minus
           
static BinaryFunction<java.lang.Long,java.lang.Long,java.lang.Long> mod
           
static BinaryFunction<java.lang.Long,java.lang.Long,java.lang.Long> plus
           
static BinaryFunction<java.lang.Long,java.lang.Long,java.lang.Long> times
           
 
Method Summary
static
<S,R> NullaryFunction<R>
bind(S value, UnaryFunction<S,R> func)
           
static
<S> NullaryPredicate
bind(S value, UnaryPredicate<S> func)
           
static
<S> NullaryVoidFunction
bind(S value, UnaryVoidFunction<S> func)
           
static
<S,T,R> UnaryFunction<T,R>
bind1(S value, BinaryFunction<S,T,R> func)
           
static
<S,T> UnaryPredicate<T>
bind1(S value, BinaryPredicate<S,T> func)
           
static
<S,T> UnaryVoidFunction<T>
bind1(S value, BinaryVoidFunction<S,T> func)
           
static
<S,T,R> UnaryFunction<S,R>
bind2(T value, BinaryFunction<S,T,R> func)
           
static
<S,T> UnaryPredicate<S>
bind2(T value, BinaryPredicate<S,T> func)
           
static
<S,T> UnaryVoidFunction<S>
bind2(T value, BinaryVoidFunction<S,T> func)
           
static
<S,R> UnaryFunction<S,R>
combine(BinaryFunction<S,S,R> func)
           
static
<S,T,R> UnaryFunction<S,R>
comp(UnaryFunction<S,T> first, UnaryFunction<T,R> second)
           
static
<S,T,U,V,R>
BinaryFunction<S,T,R>
comp(UnaryFunction<S,U> f1, UnaryFunction<T,V> f2, BinaryFunction<U,V,R> bin)
           
static
<S,T,R> BinaryFunction<S,T,R>
cond(BinaryPredicate<S,T> c, BinaryFunction<S,T,R> t, BinaryFunction<S,T,R> f)
           
static
<S,R> UnaryFunction<S,R>
cond(UnaryPredicate<S> c, UnaryFunction<S,R> t, UnaryFunction<S,R> f)
           
static
<S,T,R> UnaryFunction<S,UnaryFunction<T,R>>
curry(BinaryFunction<S,T,R> func)
           
static
<S,T,R> BinaryVoidFunction<S,T>
drop(BinaryFunction<S,T,R> func)
           
static
<S,T> BinaryVoidFunction<S,T>
drop(BinaryPredicate<S,T> func)
           
static
<T> NullaryVoidFunction
drop(NullaryFunction<T> func)
           
static NullaryVoidFunction drop(NullaryPredicate func)
           
static
<S,R> UnaryVoidFunction<S>
drop(UnaryFunction<S,R> func)
           
static
<S> UnaryVoidFunction<S>
drop(UnaryPredicate<S> func)
           
static
<S,T> BinaryPredicate<S,T>
equal()
           
static NullaryPredicate FALSE()
           
static
<S> UnaryPredicate<S>
from(java.lang.Class<S> cls, java.lang.String mname)
          Create a unary predicate from a non-static method on class cls that returns a boolean and takes no arguments.
static
<S,T> BinaryPredicate<S,T>
from(java.lang.Class<S> cls, java.lang.String mname, java.lang.Class<T> arg1)
          Create a binary predicate from a static method on class cls that returns a boolean and calls two arguments.
static NullaryPredicate froms(java.lang.Class<?> cls, java.lang.String mname)
          Create a nullary predicate from a static method on class cls that returns a boolean.
static
<S> UnaryPredicate<S>
froms(java.lang.Class<?> cls, java.lang.String mname, java.lang.Class<S> arg1)
          Create a unary predicate from a static method on class cls that returns a boolean and takes one argument.
static
<S,T> BinaryPredicate<S,T>
froms(java.lang.Class<?> cls, java.lang.String mname, java.lang.Class<S> arg1, java.lang.Class<T> arg2)
          Create a binary predicate from a static method on class cls that returns a boolean and calls two arguments.
static
<T,R> UnaryFunction<T,R>
getField(java.lang.Class<? extends T> cls, java.lang.String fname)
           
static
<S,R> UnaryFunction<S,R>
inject(NullaryFunction<R> func, java.lang.Class<S> cls)
           
static
<S,R> UnaryFunction<S,R>
inject(R val, java.lang.Class<S> cls)
           
static
<S,T,R> BinaryFunction<S,T,R>
inject1(UnaryFunction<T,R> func, java.lang.Class<S> cls)
           
static
<S,T,R> BinaryFunction<S,T,R>
inject2(UnaryFunction<S,R> func, java.lang.Class<T> cls)
           
static void main(java.lang.String[] args)
           
static NullaryFunction<java.lang.Long> NUM(int value)
           
static
<T> NullaryFunction<T>
OBJ(T value)
           
static NullaryPredicate TRUE()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

plus

public static final BinaryFunction<java.lang.Long,java.lang.Long,java.lang.Long> plus

minus

public static final BinaryFunction<java.lang.Long,java.lang.Long,java.lang.Long> minus

times

public static final BinaryFunction<java.lang.Long,java.lang.Long,java.lang.Long> times

div

public static final BinaryFunction<java.lang.Long,java.lang.Long,java.lang.Long> div

mod

public static final BinaryFunction<java.lang.Long,java.lang.Long,java.lang.Long> mod
Method Detail

froms

public static NullaryPredicate froms(java.lang.Class<?> cls,
                                     java.lang.String mname)
Create a nullary predicate from a static method on class cls that returns a boolean.

Parameters:
cls - The class containing method boolean [mname]().
mname - The name of the method in cls.
Returns:
A NullaryPredicate that call cls.mname() when evaluated.

froms

public static <S> UnaryPredicate<S> froms(java.lang.Class<?> cls,
                                          java.lang.String mname,
                                          java.lang.Class<S> arg1)
Create a unary predicate from a static method on class cls that returns a boolean and takes one argument.

Parameters:
cls - The class containing method boolean [mname]( arg1 ).
arg1 - The type of the argument to the method
mname - The name of the method in cls.
Returns:
A UnaryPredicate that callx cls.mname() when evaluated.

froms

public static <S,T> BinaryPredicate<S,T> froms(java.lang.Class<?> cls,
                                               java.lang.String mname,
                                               java.lang.Class<S> arg1,
                                               java.lang.Class<T> arg2)
Create a binary predicate from a static method on class cls that returns a boolean and calls two arguments.

Parameters:
cls - The class containing method boolean [mname]( arg1 ).
arg1 - The type of the argument to the method
mname - The name of the method in cls.
Returns:
A UnaryPredicate that callx cls.mname() when evaluated.

from

public static <S> UnaryPredicate<S> from(java.lang.Class<S> cls,
                                         java.lang.String mname)
Create a unary predicate from a non-static method on class cls that returns a boolean and takes no arguments.

Parameters:
cls - The class containing method boolean [mname]( arg1 ).
mname - The name of the method in cls.
Returns:
A UnaryPredicate that callx cls.mname() when evaluated.

from

public static <S,T> BinaryPredicate<S,T> from(java.lang.Class<S> cls,
                                              java.lang.String mname,
                                              java.lang.Class<T> arg1)
Create a binary predicate from a static method on class cls that returns a boolean and calls two arguments.

Parameters:
cls - The class containing method boolean [mname]( arg1 ).
arg1 - The type of the argument to the method
mname - The name of the method in cls.
Returns:
A UnaryPredicate that callx cls.mname() when evaluated.

FALSE

public static NullaryPredicate FALSE()

TRUE

public static NullaryPredicate TRUE()

NUM

public static NullaryFunction<java.lang.Long> NUM(int value)

OBJ

public static <T> NullaryFunction<T> OBJ(T value)

drop

public static <T> NullaryVoidFunction drop(NullaryFunction<T> func)

drop

public static NullaryVoidFunction drop(NullaryPredicate func)

drop

public static <S,R> UnaryVoidFunction<S> drop(UnaryFunction<S,R> func)

drop

public static <S> UnaryVoidFunction<S> drop(UnaryPredicate<S> func)

drop

public static <S,T,R> BinaryVoidFunction<S,T> drop(BinaryFunction<S,T,R> func)

drop

public static <S,T> BinaryVoidFunction<S,T> drop(BinaryPredicate<S,T> func)

bind1

public static <S,T,R> UnaryFunction<T,R> bind1(S value,
                                               BinaryFunction<S,T,R> func)

bind1

public static <S,T> UnaryVoidFunction<T> bind1(S value,
                                               BinaryVoidFunction<S,T> func)

bind1

public static <S,T> UnaryPredicate<T> bind1(S value,
                                            BinaryPredicate<S,T> func)

bind2

public static <S,T,R> UnaryFunction<S,R> bind2(T value,
                                               BinaryFunction<S,T,R> func)

bind2

public static <S,T> UnaryVoidFunction<S> bind2(T value,
                                               BinaryVoidFunction<S,T> func)

bind2

public static <S,T> UnaryPredicate<S> bind2(T value,
                                            BinaryPredicate<S,T> func)

bind

public static <S,R> NullaryFunction<R> bind(S value,
                                            UnaryFunction<S,R> func)

bind

public static <S> NullaryVoidFunction bind(S value,
                                           UnaryVoidFunction<S> func)

bind

public static <S> NullaryPredicate bind(S value,
                                        UnaryPredicate<S> func)

inject1

public static <S,T,R> BinaryFunction<S,T,R> inject1(UnaryFunction<T,R> func,
                                                    java.lang.Class<S> cls)

inject2

public static <S,T,R> BinaryFunction<S,T,R> inject2(UnaryFunction<S,R> func,
                                                    java.lang.Class<T> cls)

inject

public static <S,R> UnaryFunction<S,R> inject(NullaryFunction<R> func,
                                              java.lang.Class<S> cls)

inject

public static <S,R> UnaryFunction<S,R> inject(R val,
                                              java.lang.Class<S> cls)

comp

public static <S,T,R> UnaryFunction<S,R> comp(UnaryFunction<S,T> first,
                                              UnaryFunction<T,R> second)

comp

public static <S,T,U,V,R> BinaryFunction<S,T,R> comp(UnaryFunction<S,U> f1,
                                                     UnaryFunction<T,V> f2,
                                                     BinaryFunction<U,V,R> bin)

combine

public static <S,R> UnaryFunction<S,R> combine(BinaryFunction<S,S,R> func)

equal

public static <S,T> BinaryPredicate<S,T> equal()

cond

public static <S,T,R> BinaryFunction<S,T,R> cond(BinaryPredicate<S,T> c,
                                                 BinaryFunction<S,T,R> t,
                                                 BinaryFunction<S,T,R> f)

cond

public static <S,R> UnaryFunction<S,R> cond(UnaryPredicate<S> c,
                                            UnaryFunction<S,R> t,
                                            UnaryFunction<S,R> f)

curry

public static <S,T,R> UnaryFunction<S,UnaryFunction<T,R>> curry(BinaryFunction<S,T,R> func)

getField

public static <T,R> UnaryFunction<T,R> getField(java.lang.Class<? extends T> cls,
                                                java.lang.String fname)

main

public static void main(java.lang.String[] args)