tracesrv/tracecompiler/src/com.nokia.tracecompiler/src/com/nokia/tracecompiler/engine/rules/ParameterTypeMappingRule.java
author hgs
Fri, 08 Oct 2010 14:56:39 +0300
changeset 56 aa2539c91954
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
* Trace parameter rule for adding casting and pointer operations to source code
hgs
parents:
diff changeset
    17
*
hgs
parents:
diff changeset
    18
*/
hgs
parents:
diff changeset
    19
package com.nokia.tracecompiler.engine.rules;
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
import com.nokia.tracecompiler.model.TraceModelPersistentExtension;
hgs
parents:
diff changeset
    22
import com.nokia.tracecompiler.model.TraceParameter;
hgs
parents:
diff changeset
    23
import com.nokia.tracecompiler.source.SourceConstants;
hgs
parents:
diff changeset
    24
import com.nokia.tracecompiler.source.SourceUtils;
hgs
parents:
diff changeset
    25
import com.nokia.tracecompiler.source.TypeMapping;
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
/**
hgs
parents:
diff changeset
    28
 * Trace parameter rule for adding casting and pointer operations to source code
hgs
parents:
diff changeset
    29
 * 
hgs
parents:
diff changeset
    30
 */
hgs
parents:
diff changeset
    31
final class ParameterTypeMappingRule extends TraceParameterFormattingRuleBase
hgs
parents:
diff changeset
    32
		implements TraceModelPersistentExtension {
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
	/**
hgs
parents:
diff changeset
    35
	 * TTime.Int64() function
hgs
parents:
diff changeset
    36
	 */	
hgs
parents:
diff changeset
    37
	private static final String INT64_FUNCTION = ".Int64()"; //$NON-NLS-1$
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
	/**
hgs
parents:
diff changeset
    40
	 * The type mapping
hgs
parents:
diff changeset
    41
	 */
hgs
parents:
diff changeset
    42
	private TypeMapping typeMapping;
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
	/**
hgs
parents:
diff changeset
    45
	 * Storage name for this parameter
hgs
parents:
diff changeset
    46
	 */
hgs
parents:
diff changeset
    47
	static String STORAGE_NAME = "TypeMapping"; //$NON-NLS-1$
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
	/**
hgs
parents:
diff changeset
    50
	 * Constructor for reflection
hgs
parents:
diff changeset
    51
	 */
hgs
parents:
diff changeset
    52
	ParameterTypeMappingRule() {
hgs
parents:
diff changeset
    53
		typeMapping = new TypeMapping(null);
hgs
parents:
diff changeset
    54
	}
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
	/**
hgs
parents:
diff changeset
    57
	 * Creates a new type mapping rule
hgs
parents:
diff changeset
    58
	 * 
hgs
parents:
diff changeset
    59
	 * @param mapping
hgs
parents:
diff changeset
    60
	 *            the type mapping to be used
hgs
parents:
diff changeset
    61
	 */
hgs
parents:
diff changeset
    62
	ParameterTypeMappingRule(TypeMapping mapping) {
hgs
parents:
diff changeset
    63
		this.typeMapping = mapping;
hgs
parents:
diff changeset
    64
	}
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
	/*
hgs
parents:
diff changeset
    67
	 * (non-Javadoc)
hgs
parents:
diff changeset
    68
	 * 
hgs
parents:
diff changeset
    69
	 * @see com.nokia.tracecompiler.engine.rules.TraceParameterFormattingRuleBase#
hgs
parents:
diff changeset
    70
	 *      mapNameToSource(java.lang.String)
hgs
parents:
diff changeset
    71
	 */
hgs
parents:
diff changeset
    72
	@Override
hgs
parents:
diff changeset
    73
	public String mapNameToSource(String originalName) {
hgs
parents:
diff changeset
    74
		StringBuffer source = new StringBuffer();
hgs
parents:
diff changeset
    75
		if (typeMapping.type.equals(TraceParameter.TIME)) {
hgs
parents:
diff changeset
    76
			source.append(originalName);
hgs
parents:
diff changeset
    77
			source.append(INT64_FUNCTION);
hgs
parents:
diff changeset
    78
		} else {
hgs
parents:
diff changeset
    79
			if (typeMapping.needsCasting) {
hgs
parents:
diff changeset
    80
				source.append(SourceConstants.START_PARAMETERS);
hgs
parents:
diff changeset
    81
				TraceParameter param = (TraceParameter) getOwner();
hgs
parents:
diff changeset
    82
				source.append(SourceUtils.mapParameterTypeToSymbianType(param));
hgs
parents:
diff changeset
    83
				source.append(SourceConstants.END_PARAMETERS);
hgs
parents:
diff changeset
    84
			}
hgs
parents:
diff changeset
    85
			if (typeMapping.valueToPointer) {
hgs
parents:
diff changeset
    86
				source.append('&');
hgs
parents:
diff changeset
    87
			}
hgs
parents:
diff changeset
    88
			source.append(SourceConstants.START_PARAMETERS);
hgs
parents:
diff changeset
    89
			source.append(originalName);
hgs
parents:
diff changeset
    90
			source.append(SourceConstants.END_PARAMETERS);
hgs
parents:
diff changeset
    91
		}
hgs
parents:
diff changeset
    92
		return source.toString();
hgs
parents:
diff changeset
    93
	}
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
	/*
hgs
parents:
diff changeset
    96
	 * (non-Javadoc)
hgs
parents:
diff changeset
    97
	 * 
hgs
parents:
diff changeset
    98
	 * @see com.nokia.tracecompiler.model.TraceModelPersistentExtension#getData()
hgs
parents:
diff changeset
    99
	 */
hgs
parents:
diff changeset
   100
	public String getData() {
hgs
parents:
diff changeset
   101
		StringBuffer sb = new StringBuffer();
hgs
parents:
diff changeset
   102
		if (typeMapping.needsCasting) {
hgs
parents:
diff changeset
   103
			sb.append('C');
hgs
parents:
diff changeset
   104
		}
hgs
parents:
diff changeset
   105
		if (typeMapping.valueToPointer) {
hgs
parents:
diff changeset
   106
			sb.append('V');
hgs
parents:
diff changeset
   107
		}
hgs
parents:
diff changeset
   108
		return sb.toString();
hgs
parents:
diff changeset
   109
	}
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
	/*
hgs
parents:
diff changeset
   112
	 * (non-Javadoc)
hgs
parents:
diff changeset
   113
	 * 
hgs
parents:
diff changeset
   114
	 * @see com.nokia.tracecompiler.model.TraceModelPersistentExtension#getStorageName()
hgs
parents:
diff changeset
   115
	 */
hgs
parents:
diff changeset
   116
	public String getStorageName() {
hgs
parents:
diff changeset
   117
		return STORAGE_NAME;
hgs
parents:
diff changeset
   118
	}
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
	/*
hgs
parents:
diff changeset
   121
	 * (non-Javadoc)
hgs
parents:
diff changeset
   122
	 * 
hgs
parents:
diff changeset
   123
	 * @see com.nokia.tracecompiler.model.TraceModelPersistentExtension#setData(java.lang.String)
hgs
parents:
diff changeset
   124
	 */
hgs
parents:
diff changeset
   125
	public boolean setData(String data) {
hgs
parents:
diff changeset
   126
		boolean retval = false;
hgs
parents:
diff changeset
   127
		if (data != null) {
hgs
parents:
diff changeset
   128
			for (int i = 0; i < data.length(); i++) {
hgs
parents:
diff changeset
   129
				char c = data.charAt(i);
hgs
parents:
diff changeset
   130
				switch (c) {
hgs
parents:
diff changeset
   131
				case 'C':
hgs
parents:
diff changeset
   132
					typeMapping.needsCasting = true;
hgs
parents:
diff changeset
   133
					retval = true;
hgs
parents:
diff changeset
   134
					break;
hgs
parents:
diff changeset
   135
				case 'V':
hgs
parents:
diff changeset
   136
					typeMapping.valueToPointer = true;
hgs
parents:
diff changeset
   137
					retval = true;
hgs
parents:
diff changeset
   138
					break;
hgs
parents:
diff changeset
   139
				}
hgs
parents:
diff changeset
   140
			}
hgs
parents:
diff changeset
   141
		}
hgs
parents:
diff changeset
   142
		return retval;
hgs
parents:
diff changeset
   143
	}
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
}