📄 slog2toslog2.java
字号:
/* * (C) 2001 by Argonne National Laboratory * See COPYRIGHT in top-level directory. *//* * @author Anthony Chan */package logformat.slog2.pipe;import base.drawable.Kind;import base.drawable.Topology;import base.drawable.Category;import base.drawable.Drawable;import base.drawable.Primitive;import base.drawable.Composite;import base.drawable.YCoordMap;import logformat.slog2.LineIDMap;import logformat.slog2.CategoryMap;import logformat.slog2.LineIDMapList;import logformat.slog2.TraceName;import logformat.slog2.output.TreeTrunk;import logformat.slog2.output.OutputLog;import java.util.Date;import java.util.Arrays;import java.util.Map;import java.util.HashMap;import java.util.StringTokenizer;public class Slog2ToSlog2{ private static short num_children_per_node = 0; private static int leaf_bytesize = 0; private static String in_filename, out_filename; private static boolean enable_endtime_check; private static boolean continue_when_violation; // Category indexes to be deleted private static int[] del_iobjdefs; public static final void main( String[] args ) { PipedInputLog dobj_ins; OutputLog slog_outs; Kind next_kind; Topology topo; CategoryMap objdefs; // Drawable def'n Map shadefs; // Shadow def'n Category objdef; LineIDMapList lineIDmaps; LineIDMap lineIDmap; Primitive prime_obj; Composite cmplx_obj; long Nobjs; TreeTrunk treetrunk; double prev_dobj_endtime; double curr_dobj_endtime; long offended_Nobjs; Drawable offended_dobj; // Initialize prev_dobj_endtime to avoid complaint by compiler prev_dobj_endtime = Double.NEGATIVE_INFINITY; offended_Nobjs = Integer.MIN_VALUE; offended_dobj = null; out_filename = null; del_iobjdefs = null; parseCmdLineArgs( args ); if ( out_filename == null ) out_filename = TraceName.getDefaultSLOG2Name( in_filename ); objdefs = new CategoryMap(); shadefs = new HashMap(); lineIDmaps = new LineIDMapList(); Nobjs = 0; // Initialize the SLOG-2 file for piped-input, output for this program. dobj_ins = new PipedInputLog( in_filename ); if ( dobj_ins == null ) { System.err.println( "Null input logfile!" ); System.exit( 1 ); } if ( ! dobj_ins.isSLOG2() ) { System.err.println( in_filename + " is NOT SLOG-2 file!." ); System.exit( 1 ); } String err_msg; if ( (err_msg = dobj_ins.getCompatibleHeader()) != null ) { System.err.print( err_msg ); PipedInputLog.stdoutConfirmation(); } dobj_ins.initialize(); /* */ Date time1 = new Date(); slog_outs = new OutputLog( out_filename ); // Set Tree properties, !optional! // TreeNode's minimum size, without any drawable/shadow, is 38 bytes. // Drawable;s minimum size is 32 bytes, whether it is state/arrow. // Arrow( with 2 integer infovalues ) is 40 bytes long. // So, for 1 state primitive leaf, the size is 38 + 40 = 78 . if ( leaf_bytesize > 0 ) slog_outs.setTreeLeafByteSize( leaf_bytesize ); else slog_outs.setTreeLeafByteSize( dobj_ins.getTreeLeafByteSize() ); if ( num_children_per_node > 0 ) slog_outs.setNumChildrenPerNode( num_children_per_node ); else slog_outs.setNumChildrenPerNode( dobj_ins.getNumChildrenPerNode() ); treetrunk = new TreeTrunk( slog_outs, shadefs ); /* */ Date time2 = new Date(); while ( ( next_kind = dobj_ins.peekNextKind() ) != Kind.EOF ) { if ( next_kind == Kind.TOPOLOGY ) { topo = dobj_ins.getNextTopology(); // Put in the default Shadow categories in case the original // does not have any shadow categories, i.e no shadows. objdef = Category.getShadowCategory( topo ); objdefs.put( new Integer( objdef.getIndex() ), objdef ); shadefs.put( topo, objdef ); } else if ( next_kind == Kind.YCOORDMAP ) { lineIDmap = new LineIDMap( dobj_ins.getNextYCoordMap() ); lineIDmaps.add( lineIDmap ); } else if ( next_kind == Kind.CATEGORY ) { objdef = dobj_ins.getNextCategory(); if ( objdef.isShadowCategory() ) { objdefs.put( new Integer( objdef.getIndex() ), objdef ); shadefs.put( objdef.getTopology(), objdef ); } // Category can be removed here for efficiency reason. // Instead let CategoryMap.removeUnusedCategories() do the work. // if ( isCategoryToBeRemoved( objdef.getIndex() ) ) // continue; objdefs.put( new Integer( objdef.getIndex() ), objdef ); objdef.setUsed( false ); } else if ( next_kind == Kind.PRIMITIVE ) { prime_obj = dobj_ins.getNextPrimitive(); // Undo InfoBox.resolveCategory() when the Drawable is read. prime_obj.releaseCategory(); if ( isCategoryToBeRemoved( prime_obj.getCategoryIndex() ) ) { // System.out.println( "Removing ... " + prime_obj ); continue; } prime_obj.resolveCategory( objdefs ); // postponed, wait till on-demand decoding of InfoBuffer // prime_obj.decodeInfoBuffer(); Nobjs++; // System.out.println( Nobjs + " : " + prime_obj ); if ( enable_endtime_check ) { if ( ! prime_obj.isTimeOrdered() ) { System.out.println( "**** Primitive Time Error ****" ); if ( ! continue_when_violation ) System.exit( 1 ); } curr_dobj_endtime = prime_obj.getLatestTime(); if ( prev_dobj_endtime > curr_dobj_endtime ) { System.err.println( "**** Violation of " + "Increasing Endtime Order ****\n" + "\t Offended Drawable -> " + offended_Nobjs + " : " + offended_dobj + "\n" + "\t Offending Primitive -> " + Nobjs + " : " + prime_obj + "\n" + " previous drawable endtime ( " + prev_dobj_endtime + " ) " + " > current drawable endtiime ( " + curr_dobj_endtime + " ) " ); if ( ! continue_when_violation ) System.exit( 1 ); } offended_Nobjs = Nobjs; offended_dobj = prime_obj; prev_dobj_endtime = curr_dobj_endtime; } treetrunk.addDrawable( prime_obj ); } else if ( next_kind == Kind.COMPOSITE ) { cmplx_obj = dobj_ins.getNextComposite(); // Undo InfoBox.resolveCategory() when the Drawable is read. cmplx_obj.releaseCategory(); if ( isCategoryToBeRemoved( cmplx_obj.getCategoryIndex() ) ) { // System.out.println( "Removing ... " + cmplx_obj ); continue; } cmplx_obj.resolveCategory( objdefs ); // postponed, wait till on-demand decoding of InfoBuffer // cmplx_obj.decodeInfoBuffer(); Nobjs++; // System.out.println( Nobjs + " : " + cmplx_obj ); if ( enable_endtime_check ) { if ( ! cmplx_obj.isTimeOrdered() ) { System.out.println( "**** Composite Time Error ****" ); if ( ! continue_when_violation ) System.exit( 1 ); } curr_dobj_endtime = cmplx_obj.getLatestTime(); if ( prev_dobj_endtime > curr_dobj_endtime ) { System.err.println( "***** Violation of " + "Increasing Endtime Order! *****\n" + "\t Offended Drawable -> " + offended_Nobjs + " : " + offended_dobj + "\n" + "\t Offending Composite -> " + Nobjs + " : " + cmplx_obj + "\n" + " previous drawable endtime ( " + prev_dobj_endtime + " ) " + " > current drawable endtiime ( " + curr_dobj_endtime + " ) " ); if ( ! continue_when_violation ) System.exit( 1 ); } offended_Nobjs = Nobjs; offended_dobj = cmplx_obj; prev_dobj_endtime = curr_dobj_endtime;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -