示例#1
0
/** CodeCloner is set up so that this is called only for reference pointers
  * only.
  */
void CodeCloner::object_enquiry(Object *obj,
				CloneStreamObjectInstance *co,
				PTR_TYPE ptr_type)
{
  if (is_kind_of<SymbolTableObject>(obj)) {
    if (_new_table->has_symbol_table_object_member(to<SymbolTableObject>(obj)))
      set_reference(co);
    else
      set_clone_object(co);
  } else if (is_kind_of<SymbolTable>(obj)) { // ???
    set_replacement(co, _new_table);
  } else {
    set_reference(co);
  }
}
示例#2
0
void PseudoStateData::read(char * & st, char * & k) {
  if (!strcmp(k, "reference")) {
    set_reference(BrowserPseudoState::read_ref(st));
    k = read_keyword(st);
  }
  
  BasicData::read(st, k);	// updates k
}
示例#3
0
void StateData::read(char * & st, char * & k) {
  BasicData::read(st, k);	// updates k
  uml.read(st, k, "uml");	// updates k
  cpp.read(st, k, "cpp");	// updates k
  java.read(st, k, "java");	// updates k
  
  if (!strcmp(k, "active")) {
    is_active = TRUE;
    k = read_keyword(st);
  }
  
  if (! strcmp(k, "specification")) {
    set_specification(BrowserOperation::read_ref(st));
    k = read_keyword(st);
  }
  
  if (! strcmp(k, "reference")) {
    set_reference(BrowserState::read_ref(st));
    k = read_keyword(st);
  }
}
示例#4
0
bool PseudoStateData::tool_cmd(ToolCom * com, const char * args,
			       BrowserNode * bn, const QString & comment) {
  if (((unsigned char) args[-1]) >= firstSetCmd) {
    if (!bn->is_writable() && !root_permission())
      com->write_ack(FALSE);
    else {
      switch ((unsigned char) args[-1]) {
      case setDerivedCmd:
	{
	  BrowserPseudoState * st = (BrowserPseudoState *) com->get_id(args);

	  if (st == reference) {
	    com->write_ack(TRUE);
	    return TRUE;
	  }
	  if ((st != 0) &&
	      !((BrowserPseudoState *) browser_node)->can_reference(st)) {
	    com->write_ack(FALSE);
	    return TRUE;
	  }
	  set_reference(st);
	}
	break;
      default:
	return BasicData::tool_cmd(com, args, bn, comment);
      }
      
      // ok case
      bn->modified();
      modified();
      com->write_ack(TRUE);
    }
  }
  else
    return BasicData::tool_cmd(com, args, bn, comment);
  
  return TRUE;
}
示例#5
0
bool StateData::tool_cmd(ToolCom * com, const char * args,
                         BrowserNode * bn,
                         const QString & comment)
{
    if (((unsigned char) args[-1]) >= firstSetCmd) {
        bool ok = TRUE;

        if (!bn->is_writable() && !root_permission())
            ok = FALSE;
        else {
            switch ((unsigned char) args[-1]) {
            case setUmlEntryBehaviorCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    uml.on_entry = args;

                break;

            case setUmlExitBehaviorCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    uml.on_exit = args;

                break;

            case setUmlActivityCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    uml.do_activity = args;

                break;

            case setCppEntryBehaviorCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    cpp.on_entry = args;

                break;

            case setCppExitBehaviorCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    cpp.on_exit = args;

                break;

            case setCppActivityCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    cpp.do_activity = args;

                break;

            case setJavaEntryBehaviorCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    java.on_entry = args;

                break;

            case setJavaExitBehaviorCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    java.on_exit = args;

                break;

            case setJavaActivityCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    java.do_activity = args;

                break;

            case setDefCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    set_specification((BrowserOperation *) com->get_id(args));

                break;

            case setActiveCmd:
                if (reference != 0)
                    ok = FALSE;
                else
                    is_active = (*args != 0);

                break;

            case setDerivedCmd: {
                BrowserState * st = (BrowserState *) com->get_id(args);

                if (st == reference) {
                    com->write_ack(TRUE);
                    return TRUE;
                }

                if ((st != 0) &&
                    (!((BrowserState *) bn)->can_reference() ||
                     !((BrowserState *) browser_node)->can_reference(st)))
                    ok = FALSE;
                else
                    set_reference(st);
            }
            break;

            default:
                return BasicData::tool_cmd(com, args, bn, comment);
            }
        }

        if (ok) {
            bn->package_modified();
            modified();
        }

        com->write_ack(ok);
        return TRUE;
    }
    else
        return BasicData::tool_cmd(com, args, bn, comment);
}