Project

General

Profile

Класс Event

Added by Igor Melnichenko almost 10 years ago

Предлагаю обсудить класс Event. Мне кажется, текущая реализация класса Event избыточна (особенно это почувствовалось при работе с XML-представлением). Действительно ли нужно хранить в Event'е какую-либо информацию, кроме типа события, названия сопоставленного с ним сигнала и Range'а?
Сейчас получается, что тест хранит обычные сигналы в виде пары "ключ-значение" (название сигнала - значение/ограничение), а событиям ставится в соответствие более обширный набор параметров:
EventType type;
Range range;
String name;
DataType type;
Object value;
ILocation location;
VariableType varType;
boolean isDefined;


Replies (5)

RE: Класс Event - Added by Sergey Smolov almost 10 years ago

Существующая реализация класса Event упрощает последующий анализ CfgModel. В частности, если хранить ссылку на RangedVariable, то при построении CGAA легко определять, например, является ли переменная синхросигналом.

Если же хранить в Event'е только имя и Range, то нужно также обеспечить удобный поиск переменной по имени в рамках модуля. Например, хранить список деклараций переменных отдельно.

RE: Класс Event - Added by Igor Melnichenko almost 10 years ago

Кстати, а что значит поле isDefined?

RE: Класс Event - Added by Sergey Smolov almost 10 years ago

Это поле показывает, используется ли данный экземпляр RangedVariable в соответствующем выражении (будь то инструкция, Event или что-то иное, isDefined - false), или ему наоборот присваивается значение (isDefined - true).

Меня самого смущает размещение данного поля. Да и обойтись без него совсем кажется вполне возможным.

Предлагаю в классе model.cfg.Module реализовать хранилище деклараций переменных.
Хранилище должно быть устроено таким образом, чтобы по имени переменной можно было получить связанные с ней данные (тип данных, тип переменной, ссылку на область памяти).
Также необходимо обеспечить возможность связывания переменных модуля с внешними выражениями, как это бывает при инстанциировании модулей.

При построении CFGModel все найденные в коде переменные должны добавляться в хранилище, если их там ещё нет.
Все инструкции, содержащие переменные, и являющиеся узлами графа потока управления, будут содержать не сами переменные, а ссылки на них.

При такой реализации Event можно сделать простым, т.е. содержащим только имя переменной, её поддиапазон и тип события.

RE: Класс Event - Added by Igor Melnichenko almost 10 years ago

Моё видение ситуации, кажется, похоже на твоё. Но учитывая, что я не знаком с тем, что творится за пределами EFSM, моё восприятие действительно может быть искажено :)
Общие для переменной во всех её проявлениях свойства:
String name;
DataType type;
Range range;
Остальные возникают только при использовании переменной в контексте какого-либо модуля. Поэтому предлагаю сделать для переменной один класс только с этими свойствами, а все остальные хранить на уровне тех сущностей, которые эти свойства вводят.
Например, если мы говорим о трассе сигналов, то там к переменной добавляется её значение (если это не событийная переменная) или тип события (если событийная); если о EFSM - значение + тип (in/out/inout) и т. д.

RE: Класс Event - Added by Sergey Smolov almost 10 years ago

Поле isDefined убрано. Перехожу к реализации хранилища деклараций переменных.

    (1-5/5)