// Copyright 2002, SLAC, Stanford University, U.S.A. package org.freehep.aid; import org.freehep.rtti.IType; /** * @author Mark Donszelmann * @version $Id: PrimitiveArrayToPrimitiveVector.java 8584 2006-08-10 23:06:37Z duns $ */ public class PrimitiveArrayToPrimitiveVector extends JNITypeConversion { public PrimitiveArrayToPrimitiveVector(String indent, String cr) { super(indent, cr); } public String convertToJava(JNITypeConverter converter, int scope, IType type, int dimension, String nameSpace, String src, String dst) { String primitive = type.getName(); StringBuffer s = new StringBuffer(); s.append(indent(scope)); s.append("// convert vector<"); s.append(primitive); s.append("> to "); s.append(primitive); s.append("[]"); s.append(cr); s.append(indent(scope)); s.append(dst); s.append(" = env->New"); s.append(converter.jniCall(type, dimension-1)); s.append("Array("); s.append(src); s.append(".size());"); s.append(cr); s.append(indent(scope)); s.append("for (int i"); s.append(scope); s.append("=0; i"); s.append(scope); s.append("<"); s.append(src); s.append(".size(); i"); s.append(scope); s.append("++) {"); s.append(cr); s.append(indent(scope+1)); s.append(converter.jniType(type, dimension-1)); s.append(" buf"); s.append(scope+1); s.append(" = "); s.append(src); s.append("[i"); s.append(scope); s.append("];"); s.append(cr); s.append(indent(scope+1)); s.append("env->Set"); s.append(converter.jniCall(type, dimension-1)); s.append("ArrayRegion("); s.append(dst); s.append(", i"); s.append(scope); s.append(", 1, &buf"); s.append(scope+1); s.append(");"); s.append(cr); s.append(indent(scope)); s.append("}"); s.append(cr); return s.toString(); } public String convertToCPP(JNITypeConverter converter, int scope, IType type, int dimension, String nameSpace, String src, String dst) { String primitive = type.getName(); StringBuffer s = new StringBuffer(); s.append(indent(scope)); s.append("// convert "); s.append(primitive); s.append("[] to vector<"); s.append(primitive); s.append(">"); s.append(cr); s.append(indent(scope)); s.append("unsigned int len"); s.append(scope); s.append(" = env->GetArrayLength("); s.append(src); s.append(");"); s.append(cr); s.append(indent(scope)); s.append("for (unsigned int i"); s.append(scope); s.append("=0; i"); s.append(scope); s.append("<len"); s.append(scope); s.append("; i"); s.append(scope); s.append("++) {"); s.append(cr); s.append(indent(scope+1)); s.append("jdouble d"); s.append(scope+1); s.append(";"); s.append(cr); s.append(indent(scope+1)); s.append("env->Get"); s.append(Character.toUpperCase(primitive.charAt(0))+primitive.substring(1)); s.append("ArrayRegion("); s.append(src); s.append(", i"); s.append(scope); s.append(", 1, &d"); s.append(scope+1); s.append(");"); s.append(cr); s.append(indent(scope+1)); s.append(dst); s.append(".push_back(d"); s.append(scope+1); s.append(");"); s.append(cr); s.append(indent(scope)); s.append("}"); s.append(cr); return s.toString(); } }