示例#1
0
 /**
  * Creates a new <b>basic_indent_streambuf</b> instance.
  *
  * @param indent_size		a <b>size_t</b> value of the number of spaces for each indentation
  *                            level. 
  *
  * @param flags		an <b>unsigned int</b> value of Flags to enable or disable
  *                            BLANK_LINES and BRACES.
  *
  */
 explicit basic_indent_streambuf(std::basic_streambuf<Ch, Tr> *stream_buffer, size_t indent_size = 2, unsigned flags = BRACES)
   : m_streamBuffer(stream_buffer),
     m_atLineBegin(true),
     m_leftJustify(false),
     m_indentLevel(0),
     m_nextIndentLevel(0),
     m_indentSize(indent_size),
     m_flags((Flags) flags),
     m_indentString(0)
 {
   set_indent_size(indent_size);
 }
示例#2
0
/**Function********************************************************************

  Synopsis           [Goes to a given state of a trace]

  CommandName        [goto_state]

  CommandSynopsis    [Goes to a given state of a trace]

  CommandArguments   [\[-h\] state]

  CommandDescription [Makes <tt>state</tt> the <em>current
  state</em>. This command is used to navigate alongs traces
  produced by NuSMV. During the navigation, there is a <em>current
  state</em>, and the <em>current trace</em> is the trace the
  <em>current state</em> belongs to.
    Command options:<p>
    <dl>
      <dt><tt>state: </tt>
      <dd> The state of a trace (trace.state) to be picked.
    </dl>
    ]

  SideEffects        [<em>state</em> became the current state.]

******************************************************************************/
int CommandGotoState(int argc, char **argv)
{
  int c;
  int status = 0;
  util_getopt_reset();
  while ((c = util_getopt(argc,argv,"h")) != EOF) {
    switch (c) {
    case 'h': return UsageGotoState();
    default:  return UsageGotoState();
    }
  }
  if (argc == 1) return UsageGotoState();

  /* pre-conditions */
  if (Compile_check_if_model_was_built(nusmv_stderr, true)) return 1;

  {
    TraceLabel label;

    argv += util_optind-1;
    argc -= util_optind-1;
    label = TraceLabel_create_from_string(argv[1]);

    if (label != TRACE_LABEL_INVALID) {
      if (TraceManager_is_label_valid(global_trace_manager, label)) {
        Trace_ptr from_trace, new_trace;
        TraceIter iter;
        bdd_ptr state;
        int new_trace_id;
        node_ptr new_label;
        int from_trace_no = TraceLabel_get_trace(label);
        BddEnc_ptr enc = Enc_get_bdd_encoding();
        PropDb_ptr propDB = PropPkg_get_prop_database();
        SexpFsm_ptr scalar_fsm = PropDb_master_get_scalar_sexp_fsm(propDB);

        from_trace = TraceManager_get_trace_at_index(global_trace_manager,
                                                     from_trace_no);
        iter = TraceManager_get_iterator_from_label(global_trace_manager,
                                                    label);

        state = TraceUtils_fetch_as_bdd(from_trace, iter,
                                        TRACE_ITER_SF_VARS, enc);

        /* create new trace copying from given one up to given iter */
        new_trace = Trace_copy(from_trace, iter, false);
        Trace_set_desc(new_trace, "Simulation Trace");
        Trace_set_type(new_trace, TRACE_TYPE_SIMULATION);

        /* Now the new label we get would be the label of the next
         * trace that is going to be registered. */
        new_label = TraceLabel_create(
           TraceManager_get_size(global_trace_manager),
           TraceManager_get_abs_index_from_label(global_trace_manager, label));

        new_trace_id = TraceManager_register_trace(global_trace_manager,
                                                   new_trace);
        TraceManager_set_current_trace_number(global_trace_manager,
                                              new_trace_id);
        current_state_set(state, new_label);

        fprintf(nusmv_stdout, "The current state for new trace is:\n");

        fprintf(nusmv_stdout, "-> State %d.%d <-\n",
                TraceLabel_get_trace(new_label)+1,
                TraceLabel_get_state(new_label)+1);

        BddEnc_print_bdd_begin(enc, SexpFsm_get_vars_list(scalar_fsm), true);
        set_indent_size(2);
        BddEnc_print_bdd(enc, state, (VPFNNF) NULL, nusmv_stdout);
        reset_indent_size();
        BddEnc_print_bdd_end(enc);
      }
      else {
        fprintf(nusmv_stderr, "The label %d.%d is invalid.\n",
                TraceLabel_get_trace(label) + 1,
                TraceLabel_get_state(label) + 1);
      }
    }
    else {
      fprintf(nusmv_stderr, "Parsing error: expected "                  \
              "\"goto_state <trace_number>.<state_number>\".\n");
      status = 1;
    }
  }
  return status;
}