blob: f8aafccdc9fce8a1e2ce29989f0a0dbd28bcac70 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.drill.exec.compile.sig;
import org.apache.drill.exec.expr.ClassGenerator.BlockType;
import com.google.common.base.Preconditions;
/**
* The code generator works with four conceptual methods which can
* have any actual names. This class identify which conceptual methods
* are in use and their actual names. Callers obtain the method
* names generically using the {@link BlockType} enum. There is,
* however, no way to check which methods are in use; the user of
* this method must already know this information from another
* source.
* <table>
* <tr><th>Conceptual Method</th>
* <th>BlockType</th>
* <th>Typical Drill Name</th></tr>
* <tr><td>setup</td><td>SETUP</td><td>doSetup</td></tr>
* <tr><td>eval</td><td>EVAL</td><td>doEval</td></tr>
* <tr><td>reset</td><td>RESET</td><td>?</td></tr>
* <tr><td>cleanup</td><td>CLEANUP</td><td>?</td></tr>
* </table>
*/
public class GeneratorMapping {
static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(GeneratorMapping.class);
private final String setup;
private final String eval;
private final String reset;
private final String cleanup;
public GeneratorMapping(final String setup, final String eval, final String reset, final String cleanup) {
super();
this.setup = setup;
this.eval = eval;
this.reset = reset;
this.cleanup = cleanup;
}
public GeneratorMapping(final GeneratorMapping gm) {
super();
this.setup = gm.setup;
this.eval = gm.eval;
this.reset = gm.reset;
this.cleanup = gm.cleanup;
}
public static GeneratorMapping GM(final String setup, final String eval) {
return create(setup, eval, null, null);
}
public static GeneratorMapping GM(
final String setup, final String eval, final String reset, final String cleanup) {
return create(setup, eval, reset, cleanup);
}
public static GeneratorMapping create(
final String setup, final String eval, final String reset, final String cleanup) {
return new GeneratorMapping(setup, eval, reset, cleanup);
}
public String getMethodName(final BlockType type) {
switch(type) {
case CLEANUP:
Preconditions.checkNotNull(cleanup, "The current mapping does not have a cleanup method defined.");
return cleanup;
case EVAL:
Preconditions.checkNotNull(eval, "The current mapping does not have an eval method defined.");
return eval;
case RESET:
Preconditions.checkNotNull(reset, "The current mapping does not have a reset method defined.");
return reset;
case SETUP:
Preconditions.checkNotNull(setup, "The current mapping does not have a setup method defined.");
return setup;
default:
throw new IllegalStateException();
}
}
}