001: // ============================================================================
002: // $Id: GenerateBinary.java,v 1.7 2006/08/16 03:04:11 davidahall Exp $
003: // Copyright (c) 2004-2005 David A. Hall
004: // ============================================================================
005: // The contents of this file are subject to the Common Development and
006: // Distribution License (CDDL), Version 1.0 (the License); you may not use this
007: // file except in compliance with the License. You should have received a copy
008: // of the the License along with this file: if not, a copy of the License is
009: // available from Sun Microsystems, Inc.
010: //
011: // http://www.sun.com/cddl/cddl.html
012: //
013: // From time to time, the license steward (initially Sun Microsystems, Inc.) may
014: // publish revised and/or new versions of the License. You may not use,
015: // distribute, or otherwise make this file available under subsequent versions
016: // of the License.
017: //
018: // Alternatively, the contents of this file may be used under the terms of the
019: // GNU Lesser General Public License Version 2.1 or later (the "LGPL"), in which
020: // case the provisions of the LGPL are applicable instead of those above. If you
021: // wish to allow use of your version of this file only under the terms of the
022: // LGPL, and not to allow others to use your version of this file under the
023: // terms of the CDDL, indicate your decision by deleting the provisions above
024: // and replace them with the notice and other provisions required by the LGPL.
025: // If you do not delete the provisions above, a recipient may use your version
026: // of this file under the terms of either the CDDL or the LGPL.
027: //
028: // This library is distributed in the hope that it will be useful,
029: // but WITHOUT ANY WARRANTY; without even the implied warranty of
030: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
031: // ============================================================================
032:
033: package net.sf.jga.fn.adaptor;
034:
035: import net.sf.jga.fn.BinaryFunctor;
036: import net.sf.jga.fn.Generator;
037: import net.sf.jga.fn.BinaryFunctor;
038:
039: /**
040: * BinaryFunctor that returns the result of a nested Generator. The arguments
041: * to the BinaryFunctor are ignored.
042: * <p>
043: * Copyright © 2004-2005 David A. Hall
044: * @author <a href="mailto:davidahall@users.sf.net">David A. Hall</a>
045: */
046:
047: public class GenerateBinary<T1, T2, R> extends BinaryFunctor<T1, T2, R> {
048:
049: static final long serialVersionUID = -6202505725582800051L;
050:
051: // The Nested Generator
052: private Generator<R> _gen;
053:
054: public GenerateBinary(Generator<R> gen) {
055: _gen = gen;
056: }
057:
058: /**
059: * Returns the generator whose results are returned.
060: */
061:
062: public Generator<R> getGenerator() {
063: return _gen;
064: }
065:
066: /**
067: * Returns the results of invoking the generator. The arguments are
068: * ignored.
069: */
070: public R fn(T1 arg1, T2 arg2) {
071: return _gen.gen();
072: }
073:
074: /**
075: * Calls the Visitor's <code>visit(GenerateBinary)</code> method, if it
076: * implements the nested Visitor interface.
077: */
078: public void accept(net.sf.jga.fn.Visitor v) {
079: if (v instanceof GenerateBinary.Visitor)
080: ((GenerateBinary.Visitor) v).visit(this );
081: else
082: v.visit(this );
083: }
084:
085: // Object overrides
086:
087: public String toString() {
088: return _gen.toString();
089: }
090:
091: // Acyclic Visitor
092:
093: /**
094: * Interface for classes that may interpret a <b>GenerateBinary</b>
095: * functor.
096: */
097: public interface Visitor extends net.sf.jga.fn.Visitor {
098: public void visit(GenerateBinary host);
099: }
100: }
|