Project

General

Profile

Actions

Bug #5461

closed

[arrays] Insufficient arrays support

Added by Sergey Smolov almost 10 years ago. Updated almost 10 years ago.

Status:
Closed
Priority:
High
Category:
-
Target version:
Start date:
12/04/2014
Due date:
% Done:

100%

Estimated time:
Detected in build:
svn
Platform:
Published in build:
141226

Description

Реализованная в проекте поддержка массивов имеет два существенных ограничения.

1) radix элементов массива должен совпадать с radix индексов;

2) метод getTypeRadix для MAP всегда возвращает 10.

Эти ограничения, в частности, не позволяют создавать массивы битовых векторов (очень распространенный объект в HDL-описаниях), а также получить для них radix элементов массива.

Проблема 1) частично решена ревизией r715 (теперь все массивы имеют radix=10 для индексов - см. блок TODO), что позволяет успешно обрабатывать код HDL-описаний. Если решение устраивает - можно блок TODO удалить. Если есть необходимость создавать массивы, у которых radix индексов не всегда равен 10, то нужно эту возможность учитывать.

Actions #1

Updated by Artem Kotsynyak almost 10 years ago

Проблема решится, если использовать основания по умолчанию как определено DataTypeId.radix() (2 for bv and bool, 10 for int and real)? Другими словами, используется ли где-нибудь возможность использовать другие основания при конвертации в строки? Для решения #5462 написан тип, реализующий интерфейс Map<Data, Data>, при использовании которого можно будет гарантировать, что используются основания по умолчанию.

Actions #2

Updated by Sergey Smolov almost 10 years ago

На данный момент были отмечены только массивы из integer'ов с основанием 10 и битовых векторов с основанием 2. Но, чисто теоретически, HDL-описания могут содержать значения с произвольными натуральными основаниями >= 2. Это задача парсера - определить, какое основание используется в данный момент. В Проблеме 2 меня смутило то, что метод всегда возвращает 10.

Actions #3

Updated by Artem Kotsynyak almost 10 years ago

Издержка интерфейса DataTypeId, так как он требует указание основания для чтения значения из строки и был изначально рассчитан на единственное значение. При использовании оснований по умолчанию MAP.radix() вообще теряет смысл, так как не будет использоваться. Насколько я понимаю, проблемы возникают непосредственно из-за необходимости работы со строками и окажутся скрытыми, если использовать Map для работы с массивами.

Actions #4

Updated by Sergey Smolov almost 10 years ago

Метод radix() вызывается в методе getTypeRadix(), который, собственно, я и пытался использовать (что было, вообще говоря, неверно - он не для моих задач сделан). Раз код метода для MAP - заглушечный - то стоило бы отметить сей факт комментарием. Этим тогда Проблема 2 исчерпывается.

В данном тикете главная и самая существенная проблема - Проблема 1. Она костыльным образом сейчас мной решена. Если решение тебе, как специалисту по массивам, кажется нормальным - то задачу можно считать решенной (меня оно устраивает - в HDL-описаниях не встречаются массивы, у которых индексы не Integer). Если нет - то, видимо, при инициализации массивов надо отдельно передавать основания для индексов и для элементов.

Actions #5

Updated by Sergey Smolov almost 10 years ago

  • Priority changed from Normal to High

Что с этой задачей?

В преддверии выпуска нового Fortress настаиваю на её скорейшем решении.

Actions #6

Updated by Artem Kotsynyak almost 10 years ago

  • Status changed from New to Resolved

При инициализации массива из строкового представления используются основания по умолчанию для типов ключей и значений. Основание для составных типов вроде массивов считается неопределённым, методы radix() и getTypeRadix() всегда возвращают 0. Для инициализации массивов рекомендуется использовать класс DataMap (#5462).

Actions #7

Updated by Sergey Smolov almost 10 years ago

  • Status changed from Resolved to Verified
Actions #8

Updated by Andrei Tatarnikov almost 10 years ago

  • Status changed from Verified to Closed
  • % Done changed from 0 to 100
  • Published in build set to 141226
Actions

Also available in: Atom PDF