content: /*
   * Copyright (C) 2009 The Android Open Source Project
   *
   * Licensed 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.
   */
  
  import java.io.PrintStream;
  
  /**
   * Emits a Java interface and Java & C implementation for a C function.
   *
   * <p> The Java interface will have Buffer and array variants for functions that
   * have a typed pointer argument.  The array variant will convert a single "<type> *data"
   * argument to a pair of arguments "<type>[] data, int offset".
   */
  public class Jsr239CodeEmitter extends JniCodeEmitter implements CodeEmitter {
  
      PrintStream mJava10InterfaceStream;
      PrintStream mJava10ExtInterfaceStream;
      PrintStream mJava11InterfaceStream;
      PrintStream mJava11ExtInterfaceStream;
      PrintStream mJava11ExtPackInterfaceStream;
      PrintStream mJavaImplStream;
      PrintStream mCStream;
  
      PrintStream mJavaInterfaceStream;
  
      /**
       * @param java10InterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 functions
       * @param java10ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 extension functions
       * @param java11InterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 functions
       * @param java11ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension functions
       * @param java11ExtPackInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension Pack functions
       * @param javaImplStream the PrintStream to which to emit the Java implementation
       * @param cStream the PrintStream to which to emit the C implementation
       */
      public Jsr239CodeEmitter(String classPathName,
                            ParameterChecker checker,
                            PrintStream java10InterfaceStream,
                            PrintStream java10ExtInterfaceStream,
                            PrintStream java11InterfaceStream,
                            PrintStream java11ExtInterfaceStream,
                            PrintStream java11ExtPackInterfaceStream,
                            PrintStream javaImplStream,
                            PrintStream cStream,
                            boolean useContextPointer) {
          mClassPathName = classPathName;
          mChecker = checker;
          mJava10InterfaceStream = java10InterfaceStream;
          mJava10ExtInterfaceStream = java10ExtInterfaceStream;
          mJava11InterfaceStream = java11InterfaceStream;
          mJava11ExtInterfaceStream = java11ExtInterfaceStream;
          mJava11ExtPackInterfaceStream = java11ExtPackInterfaceStream;
          mJavaImplStream = javaImplStream;
          mCStream = cStream;
          mUseContextPointer = useContextPointer;
      }
  
      public void setVersion(int version, boolean ext, boolean pack) {
          if (version == 0) {
              mJavaInterfaceStream = ext ? mJava10ExtInterfaceStream :
                  mJava10InterfaceStream;
          } else if (version == 1) {
              mJavaInterfaceStream = ext ?
                  (pack ? mJava11ExtPackInterfaceStream :
                   mJava11ExtInterfaceStream) :
                  mJava11InterfaceStream;
          } else {
              throw new RuntimeException("Bad version: " + version);
          }
      }
  
      public void emitCode(CFunc cfunc, String original) {
          emitCode(cfunc, original, mJavaInterfaceStream, mJavaImplStream, mCStream);
      }
  
      public void emitNativeRegistration() {
          emitNativeRegistration("register_com_google_android_gles_jni_GLImpl", mCStream);
      }
  }
  