Exemplo n.º 1
0
int ReminderGlue::FindReminder(lua_State* lua)
{
	CheckArgument(lua, 1, LUA_TSTRING);
	CheckArgument(lua, 2, LUA_TSTRING);
	CheckArgument(lua, 3, LUA_TSTRING);

	UnicodeString server = AsUnicode(lua_tostring(lua, 1));
	UnicodeString channel = AsUnicode(lua_tostring(lua, 2));
	UnicodeString searchString = AsUnicode(lua_tostring(lua, 3));

	ReminderManager::ReminderIteratorRange reminders =
			reminderManager_->FindReminders(server, channel, searchString);

	int reminderCount = std::distance(reminders.first, reminders.second);
	lua_createtable(lua, reminderCount, 0);
	int mainTableIndex = lua_gettop(lua);

	for (ReminderManager::ReminderIterator reminder = reminders.first; reminder
			!= reminders.second; ++reminder)
	{
		lua_createtable(lua, 2, 0);
		int subTableIndex = lua_gettop(lua);
		lua_pushinteger(lua, reminder->Timestamp - time(0));
		lua_rawseti(lua, subTableIndex, 1);
		lua_pushstring(lua, AsUtf8(reminder->Message).c_str());
		lua_rawseti(lua, subTableIndex, 2);
		int currentMainIndex = std::distance(reminders.first, reminder) + 1;
		lua_rawseti(lua, mainTableIndex, currentMainIndex);
	}
	return 1;
}