diff -r 07b41fa8d1dd -r ca8a1b6995f6 tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ParameterTypeMappingRule.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tracefw/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ParameterTypeMappingRule.java Tue Aug 31 16:45:49 2010 +0300 @@ -0,0 +1,145 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +* Trace parameter rule for adding casting and pointer operations to source code +* +*/ +package com.nokia.tracecompiler.engine.rules; + +import com.nokia.tracecompiler.model.TraceModelPersistentExtension; +import com.nokia.tracecompiler.model.TraceParameter; +import com.nokia.tracecompiler.source.SourceConstants; +import com.nokia.tracecompiler.source.SourceUtils; +import com.nokia.tracecompiler.source.TypeMapping; + +/** + * Trace parameter rule for adding casting and pointer operations to source code + * + */ +final class ParameterTypeMappingRule extends TraceParameterFormattingRuleBase + implements TraceModelPersistentExtension { + + /** + * TTime.Int64() function + */ + private static final String INT64_FUNCTION = ".Int64()"; //$NON-NLS-1$ + + /** + * The type mapping + */ + private TypeMapping typeMapping; + + /** + * Storage name for this parameter + */ + static String STORAGE_NAME = "TypeMapping"; //$NON-NLS-1$ + + /** + * Constructor for reflection + */ + ParameterTypeMappingRule() { + typeMapping = new TypeMapping(null); + } + + /** + * Creates a new type mapping rule + * + * @param mapping + * the type mapping to be used + */ + ParameterTypeMappingRule(TypeMapping mapping) { + this.typeMapping = mapping; + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.engine.rules.TraceParameterFormattingRuleBase# + * mapNameToSource(java.lang.String) + */ + @Override + public String mapNameToSource(String originalName) { + StringBuffer source = new StringBuffer(); + if (typeMapping.type.equals(TraceParameter.TIME)) { + source.append(originalName); + source.append(INT64_FUNCTION); + } else { + if (typeMapping.needsCasting) { + source.append(SourceConstants.START_PARAMETERS); + TraceParameter param = (TraceParameter) getOwner(); + source.append(SourceUtils.mapParameterTypeToSymbianType(param)); + source.append(SourceConstants.END_PARAMETERS); + } + if (typeMapping.valueToPointer) { + source.append('&'); + } + source.append(SourceConstants.START_PARAMETERS); + source.append(originalName); + source.append(SourceConstants.END_PARAMETERS); + } + return source.toString(); + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceModelPersistentExtension#getData() + */ + public String getData() { + StringBuffer sb = new StringBuffer(); + if (typeMapping.needsCasting) { + sb.append('C'); + } + if (typeMapping.valueToPointer) { + sb.append('V'); + } + return sb.toString(); + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceModelPersistentExtension#getStorageName() + */ + public String getStorageName() { + return STORAGE_NAME; + } + + /* + * (non-Javadoc) + * + * @see com.nokia.tracecompiler.model.TraceModelPersistentExtension#setData(java.lang.String) + */ + public boolean setData(String data) { + boolean retval = false; + if (data != null) { + for (int i = 0; i < data.length(); i++) { + char c = data.charAt(i); + switch (c) { + case 'C': + typeMapping.needsCasting = true; + retval = true; + break; + case 'V': + typeMapping.valueToPointer = true; + retval = true; + break; + } + } + } + return retval; + } + +} \ No newline at end of file