⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 relevantset.c

📁 这个工具集提供以下结构化分析和UML分析中所用的图形化绘图工具:ER-diagrams, data and event flow diagrams and state-transition diagr
💻 C
字号:
#include "relevantset.h"#include "string.h"#include <stdio.h>RelevantSet::RelevantSet(): EventSet() {	memset(RelevantFlag, '\0', sizeof(RelevantFlag));}unsigned RelevantSet::add(const string &event) {	unsigned u = EventSet::add(event);	RelevantFlag[u >> 3] |= 0200 >> (u & 07);	return u;}void RelevantSet::SetRelevant(const EventSet &relev) {	memcpy(RelevantFlag, relev.EventFlag, sizeof(RelevantFlag));}void RelevantSet::print() {	for ( int i = EventNames.count() ; i != 0 ; ) {		--i;		if ( EventFlag[i >> 3] & 0200 >> (i & 07) ||		     RelevantFlag[i >> 3] & 0200 >> (i & 07) )			printf("%c%s ",				EventFlag[i >> 3] & 0200 >> (i & 07) ? '+' : '-',				EventNames[i].getstr());	}}string RelevantSet::GetGuards() const {	/* calculates a string composed of all the guards */	string result;	for ( int i = EventNames.count() ; i != 0 ; ) {		--i;		const string *str = &EventNames[i];		if ( '[' == (*str)[0] && ']' == (*str)[str->length() - 1] &&		    RelevantFlag[i >> 3] & 0200 >> (i & 07) ) {			if ( result.length() )				result += " and ";			result += '(';			string ev;			ev.add(str->getstr() + 1,				str->length() - 2);			if ( 0 == (EventFlag[i >> 3] & 0200 >> (i & 07)) )				for ( int j = 0 ; ; j++ ) {					if ( j >= ev.length() ) {						result += "not ";						result += ev;						break;					}					if ( '<' == ev[j] || '=' == ev[j] || '>' == ev[j] ) {						result.add(ev.getstr(), j);						if ( '=' == ev[j] ) {							result += '<';							result += &(ev.getstr()[j+1]);							result += " or ";							result.add(ev.getstr(),j);							result += '>';						} else if ( '<' == ev[j] && '>' == ev[j+1] ) {							result += '=';							j++;						} else {							result += char('>' + '<' - ev[j]);							if ( '=' == ev[j+1] )								j++;							else								result += '=';						}						result += &(ev.getstr()[j+1]);						break;					}				}			else				for ( int j = 0 ; ; j++ ) {					if ( j >= ev.length() ) {						result += ev;						break;					}					if ( '<' == ev[j] && '>' == ev[j+1] ) {						result.add(ev.getstr(), j);						result += '<';						result += &(ev.getstr()[j+2]);						result += " or ";						result.add(ev.getstr(), j);						result += '>';						result += &(ev.getstr()[j+2]);						break;					}				}			result += ')';		}	}	return result;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -