Глобальные таблицы Lua на C++

Страницы: 1
RSS
Глобальные таблицы Lua на C++
 
Прошу подсказать какой аналог глобальной таблицы Луа для Си++
Совсем точноЙ формулировкой вопроса будет, как то же самое написать на Си++
Код
ticker_list="GAZP,SBER,GMKN"
period_muvinga={}
period_muvinga.GAZP=23
period_muvinga.SBER=19
period_muvinga.GMKN=20
for sec in string.gmatch(ticker_list,"%a+") do
   local period=period_muvinga[sec]
end
и второй вопрос.
Когда дойдёт дело до объявления чего-то глобального в Си++ (то что является ответом на первый вопрос), в какой части кода это объявлять?
Я пока не могу придумать ничего лучше кроме как здесь. Речь идёт про dll, написанную на Си++:
Код
// стандартная точка входа для DLL
BOOL APIENTRY DllMain(HANDLE hModule,
   DWORD  ul_reason_for_call,
   LPVOID lpReserved
)
{
        //ОБЪЯВЛЕНИЕ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ
   return TRUE;
}
 
Цитата
Let_it_go написал:
Прошу подсказать какой аналог глобальной таблицы Луа для Си++
по индексу LUA_GLOBALSINDEX лежит адрес таблицы
Код
//ticker_list="GAZP,SBER,GMKN" -- остальное аналогично
lua_pushstring(L, "GAZP,SBER,GMKN");
lua_setfield(L, LUA_GLOBALSINDEX, "ticker_list");
Цитата
Let_it_go написал:
в какой части кода это объявлять?
в любой где есть lua_State.(как и в скрипте). Как вообще можно было придумать dllmain, если там вообще нету стейта луа.
например инициализация переменных в OnInit:
делается аналогично верхнему коду
Код
static int onInit(lua_State* L) {    
    lua_pushstring(L, "GAZP,SBER,GMKN");
    lua_setfield(L, LUA_GLOBALSINDEX, "ticker_list");
}

extern "C" __declspec(dllexport) int luaopen_plugin(lua_State *L) {
    lua_pushcfunction(L, onInit);
    lua_setfield(L, LUA_GLOBALSINDEX, "onInit");
    return 0;
}
советую почитать на досуге все ответы практически там есть
http://www.lua.org/manual/5.1/manual.html
 
Антон, с этим я уже разобрался, и в первую очередь благодаря Вам ;)
Но я имел в виду другое. Уже внутри кода dll мне придётся работать с тем, что в Луа мне знакомо как таблицы.
У меня 55 инструментов.
Я хочу посчитать по ним средний бид за 100 итераций (за 100 колебаний стакана).
Принимать этот бид в dll я уже могу. Но теперь мне надо где-то накапливать данные по каждой бумаге.
В Луа я бы это делал в таблицах типа:
average_bid[sec]
А в Си++ где их хранить?
 
На stackoverflow ответили:
Надо использовать map
Код
#include <iostream>#include <map>
#include <string>

int main ()
{
  std::map<std::string, int> period_muvinga;

  period_muvinga["GAZP"] = 23;
  period_muvinga["SBER"] = 19;
  period_muvinga["GMKN"] = 20;

  //  Iterate over all the key,value pairs in map
  //
  for (const auto & p: period_muvinga)
    {
      // Extract key from pair
      std::string ticker = p.first;

      // Extract value from pair
      int period = p.second;

      std::cout << ticker << " = " << period << std::endl;
    }
  return 0;
}

Для других целей - более сложных - мне остаётся не понятным в какой части dll объявлять этот массив.
Замысел вкратце.
Объявить массив map с названием average_bid. Вопрос где это делать?
Ключи массива - тикеры акций. объявляются вместе с массивом.
Значения массива - векторы, накапливающие биды за 100 колбеков OnQuote. Это я умею. Цель - посчитать среднее арифметическое бидов за 100 приходов колбека.
---
Использовать OnInit пока не хочу, потому что у меня в нём и так уже в Луа 50 строчек кода, объявляющих таблицы и переменные.
 
Яндекс такси ведёт активный набор водителей!
Практически по всей России!!!
З/П 90-120Т.Р./МЕС.



Только города: Барнаул, Белгород, Владимир, Волгоград, Воронеж, Дзержинск, Екатеринбург, Ижевск, Иркутск, Кострома, Краснодар, Красноярск, Курган, Ленинградская область, Магнитогорск, Москва, Московская область, Нижневартовск, Нижний Новгород, Новосибирск, Омск, Пермь, Рязань, Самара, Санкт-Петербург, Сургут, Тольятти, Томск, Тюмень, Ханты-Мансийский автономный округ, Челябинск, Ярославль.

Оформление заявки занимает 20сек.
 
Цитата
Let_it_go написал:
На stackoverflow ответили:
Надо использовать map
Код
   # include  < iostream >  # include  < map > 
 # include  < string > 

int main ()
{
  std::map < std::string, int >  period_muvinga;

  period_muvinga[ "GAZP" ]  =   23 ;
  period_muvinga[ "SBER" ]  =   19 ;
  period_muvinga[ "GMKN" ]  =   20 ;

  //  Iterate over all the key,value pairs  in  map
  //
   for  (const auto  &  p: period_muvinga)
    {
      // Extract key from pair
      std::string ticker  =  p.first;

      // Extract value from pair
      int period  =  p.second;

      std::cout  <  <  ticker  <  <   " = "   <  <  period  <  <  std::endl;
    }
   return   0 ;
}  

Для других целей - более сложных - мне остаётся не понятным в какой части dll объявлять этот массив.
Замысел вкратце.
Объявить массив map с названием average_bid. Вопрос где это делать?
Ключи массива - тикеры акций. объявляются вместе с массивом.
Значения массива - векторы, накапливающие биды за 100 колбеков OnQuote. Это я умею. Цель - посчитать среднее арифметическое бидов за 100 приходов колбека.
---
Использовать OnInit пока не хочу, потому что у меня в нём и так уже в Луа 50 строчек кода, объявляющих таблицы и переменные.
Вы удивитесь, но с большой вероятностью у вас обработка таблиц будет медленнее, чем в луа.
Причина тому в индексе У вас - стринг, а в луа хеш.
 
Цитата
Вы удивитесь, но с большой вероятностью у вас обработка таблиц будет медленнее, чем в луа.
Причина тому в индексе У вас - стринг, а в луа хеш.
Как тогда быть? Может быть использовать другой контейнер?
 
Цитата
Вы удивитесь, но с большой вероятностью у вас обработка таблиц будет медленнее, чем в луа.
Причина тому в индексе У вас - стринг, а в луа хеш.

Вернулся к этой теме. Прошу пояснить эту реплику Николая.
Вот мап на Си++:
Код
  std::map < std::string, int >  period_muvinga;
  period_muvinga[ "GAZP" ]  =   23 ;
  period_muvinga[ "SBER" ]  =   19 ;
  period_muvinga[ "GMKN" ]  =   20 ;
Стринг в роли индекса. Николай пишет, что это медленно.
ОК. А что если каждой акции задать число? Ну например:
Код
  period_muvinga[ 1 ]  =   23 ; 
  period_muvinga[ 2 ]  =   19 ;
  period_muvinga[ 3 ]  =   20 ;
Так будет быстрее?
 
Цитата
Let_it_go написал:
Ну например:
enum {};
Страницы: 1
Читают тему
Наверх