Мой подход. Ядро - Движок. - страница 99

 
Реter Konow:
Короче говоря, на каждом изменении значения польз. параметра, это значение нужно приводить к значению переменной из юниона и сразу сохранять в общем массиве байтов, который потом перевести в uint и записать в ресурс.

Пользовательский параметр у тебя должен быть внутри union структуры. Когда ты изменишь параметр, то изменится структура с одновременным изменением массива int

union c
{
  uint i[2];
  long width;
}cc;
 
cс.width = 200;

 i[2] у тебя это пользовательский ресурс, который читает другая программа.

Одной строкой cc.width = 200 ты изменишь:

  1. Параметр, отвечающий за ширину,
  2. Структуру, cодержащую этот параметр,
  3. Массив ресурса, который читает сторонняя программа

И здесь нет ни одной конвертации и копирования, лишь отображение.
 
Vasiliy Sokolov:


Я могу изменить функции обертки в файле Connection Properties и сделать приведение каждого польз. значения к соответствующей переменной из юнион, и на ходу состовлять байтовый массив. Но, тектовые значения, которые тоже нужно передавать, переводить в массив байтов с помощью   StringToChar().

Однако, при этом, лишается смысла использование юнион. Ведь если я все равно должен использовать  StringToChar(), то почему бы не собрать все в строку, а потом всю строку перевести в байты с помощью StringToChar()?

 
Vasiliy Sokolov:

Пользовательский параметр у тебя должен быть внутри union структуры. Когда ты изменишь параметр, то изменится структура с одновременным изменением массива int

 i[2] у тебя это пользовательский ресурс, который читает другая программа.

Одной строкой cc.width = 200 ты изменишь:

  1. Параметр, отвечающий за ширину,
  2. Структуру, cодержащую этот параметр,
  3. Массив ресурса, который читает сторонняя программа

И здесь нет ни одной конвертации и копирования, лишь отображение.

Василий, ты забываешь, что речь о двустороннем взаимодействии. У себя в движке, я могу все завязать на юнионах, но я не могу отвечать за код пользователя. Я могу только придумать обертки и поместить их в подключаемые файлы.

Где гарантия, что пользователь тоже будет использовать юнион? Значит, когда он вызывает мои функции-обертки, я сам должен брать его значение и приводить к одной из своих переменных из моего юнион внутри его подключаемого файла.

 
Реter Konow:

Я могу изменить функции обертки в файле Connection Properties и сделать приведение каждого польз. значения к соответствующей переменной из юнион, и на ходу состовлять байтовый массив. Но, тектовые значения, которые тоже нужно передавать, переводить в массив байтов с помощью   StringToChar().

Однако, при этом, лишается смысла использование юнион. Ведь если я все равно должен использовать  StringToChar(), то почему бы не собрать все в строку, а потом всю строку перевести в байты с помощью StringToChar()?

Потому что у тебя двойной парсинг будет. Ты сконвертируешь все в строку, это очень медленно. Потом разобъешь строку на массив - это очень быстро. Потом соберешь все снова с троку - это быстро. Потом распарсишь строку на нужные типы - это очень медленно. 

 
Реter Konow:

Хорошо, но как быть с текстами?

Их нужно переводить в байты через StringToChar(). Ведь через юнион вроде нельзя?

Да, нужно переводить, но это быстро, в отличии от парсинга.

 

Например:

Вот функция обертки в подключаемом файле Connection Properties:

string E_Last_10_bars_2_Close_price(string n = rare_value,  int Property = -1){return(GET_N_SET(11,n,Property));}

Эта функция вызывается так: 

E_Last_10_bars_2_Close_price(Close[2]);

То есть, пользователь устанавливаем в ячейку таблицы значение Close[2].

Close[2] - это значение дабл.

Следовательно внутри своей функции обертки в его программе, я могу представить значение (Close[2]) как массив char.

Но, в эту же самую ячейку, пользователь может послать значение "Привет! :)", и как тогда быть?

E_Last_10_bars_2_Close_price("Привет! :)");
 
 

Ох, Петр не с того языка программирования ты начал. Тебе нужно было что то не строго типизированное изучать.

А вообще я тебя понял, ты придумал свой нетипизированный ЯП на базе MQL. А его строгую типизацию ты обошел используя строки. Это маневр!

 
Vasiliy Sokolov:

Ох, Петр не с того языка программирования ты начал. Тебе нужно было что то не строго типизированное изучать.

А вообще я тебя понял, ты придумал свой нетипизированный ЯП на базе MQL. А его строгую типизацию ты обошел используя строки. Это маневр!

Ага,)) Ход Конем!

 

Если ты используешь таблицу, ты должен определиться какие данные в ней ты отображаешь: строго числовые или текстовые. Если текстовые - то ты передаешь строки. Если вещественные, твоя функция должна иметь вид:

string E_Last_10_bars_2_Close_price(double n,  int Property = -1){return(GET_N_SET(11,n,Property));}