Commit 018cd873 authored by Pavel Vainerman's avatar Pavel Vainerman

(SM): продолжение рефакторинга кода (удаление лишнего, оптимизация).

parent 56670e52
...@@ -108,7 +108,7 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std: ...@@ -108,7 +108,7 @@ SharedMemory::SharedMemory( ObjectId id, const std::string& datafile, const std:
// ---------------------- // ----------------------
buildHistoryList(confnode); buildHistoryList(confnode);
signal_change_value().connect(sigc::mem_fun(*this, &SharedMemory::updateHistory)); signal_change_value().connect(sigc::mem_fun(*this, &SharedMemory::checkFuse));
for( auto i = hist.begin(); i != hist.end(); ++i ) for( auto i = hist.begin(); i != hist.end(); ++i )
histmap[i->fuse_id].push_back(i); histmap[i->fuse_id].push_back(i);
...@@ -207,7 +207,7 @@ void SharedMemory::timerInfo( const TimerMessage* tm ) ...@@ -207,7 +207,7 @@ void SharedMemory::timerInfo( const TimerMessage* tm )
askTimer(tm->id, 0); askTimer(tm->id, 0);
} }
else if( tm->id == tmHistory ) else if( tm->id == tmHistory )
saveHistory(); saveToHistory();
else if( tm->id == tmPulsar ) else if( tm->id == tmPulsar )
{ {
if( sidPulsar != DefaultObjectId ) if( sidPulsar != DefaultObjectId )
...@@ -725,7 +725,7 @@ SharedMemory::HistorySlot SharedMemory::signal_history() ...@@ -725,7 +725,7 @@ SharedMemory::HistorySlot SharedMemory::signal_history()
return m_historySignal; return m_historySignal;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void SharedMemory::saveHistory() void SharedMemory::saveToHistory()
{ {
if( hist.empty() ) if( hist.empty() )
return; return;
...@@ -747,7 +747,7 @@ void SharedMemory::saveHistory() ...@@ -747,7 +747,7 @@ void SharedMemory::saveHistory()
} }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& usi, IOController* ) void SharedMemory::checkFuse( std::shared_ptr<USensorInfo>& usi, IOController* )
{ {
if( hist.empty() ) if( hist.empty() )
return; return;
...@@ -758,7 +758,6 @@ void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& usi, IOControlle ...@@ -758,7 +758,6 @@ void SharedMemory::updateHistory( std::shared_ptr<USensorInfo>& usi, IOControlle
HistoryItList& lst = *(static_cast<HistoryItList*>(usi->userdata[udataHistory])); HistoryItList& lst = *(static_cast<HistoryItList*>(usi->userdata[udataHistory]));
// auto i = histmap.find(s_it->si.id); // auto i = histmap.find(s_it->si.id);
//
// if( i == histmap.end() ) // if( i == histmap.end() )
// return; // return;
......
...@@ -387,14 +387,6 @@ class SharedMemory: ...@@ -387,14 +387,6 @@ class SharedMemory:
typedef std::list<History::iterator> HistoryItList; typedef std::list<History::iterator> HistoryItList;
typedef std::unordered_map<UniSetTypes::ObjectId, HistoryItList> HistoryFuseMap; typedef std::unordered_map<UniSetTypes::ObjectId, HistoryItList> HistoryFuseMap;
//! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет
//! использовать userdata[2]. (0,1 - использует IONotifyController)
// оптимизация с использованием userdata (IOController::USensorInfo::userdata) нужна
// чтобы не использовать поиск в HistoryFuseMap (см. updateHistory)
// т.к. 0,1 - использует IONotifyController (см. IONotifyController::UserDataID)
// то используем 2 - в качестве элемента userdata
static const size_t udataHistory = 2;
typedef sigc::signal<void, const HistoryInfo&> HistorySlot; typedef sigc::signal<void, const HistoryInfo&> HistorySlot;
HistorySlot signal_history(); /*!< сигнал о срабатывании условий "сброса" дампа истории */ HistorySlot signal_history(); /*!< сигнал о срабатывании условий "сброса" дампа истории */
...@@ -490,13 +482,21 @@ class SharedMemory: ...@@ -490,13 +482,21 @@ class SharedMemory:
virtual void dumpOrdersList( const UniSetTypes::ObjectId sid, const IONotifyController::ConsumerListInfo& lst ) override {}; virtual void dumpOrdersList( const UniSetTypes::ObjectId sid, const IONotifyController::ConsumerListInfo& lst ) override {};
virtual void dumpThresholdList( const UniSetTypes::ObjectId sid, const IONotifyController::ThresholdExtList& lst ) override {} virtual void dumpThresholdList( const UniSetTypes::ObjectId sid, const IONotifyController::ThresholdExtList& lst ) override {}
bool dblogging; bool dblogging = { false };
//! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет
//! использовать userdata[2]. (0,1 - использует IONotifyController)
// оптимизация с использованием userdata (IOController::USensorInfo::userdata) нужна
// чтобы не использовать поиск в HistoryFuseMap (см. checkFuse)
// т.к. 0,1 - использует IONotifyController (см. IONotifyController::UserDataID)
// то используем не занятый "2" - в качестве элемента userdata
static const size_t udataHistory = 2;
History hist; History hist;
HistoryFuseMap histmap; /*!< map для оптимизации поиска */ HistoryFuseMap histmap; /*!< map для оптимизации поиска */
virtual void updateHistory(std::shared_ptr<IOController::USensorInfo>& usi, IOController* ); virtual void checkFuse(std::shared_ptr<IOController::USensorInfo>& usi, IOController* );
virtual void saveHistory(); virtual void saveToHistory();
void buildHistoryList( xmlNode* cnode ); void buildHistoryList( xmlNode* cnode );
void checkHistoryFilter( UniXML::iterator& it ); void checkHistoryFilter( UniXML::iterator& it );
......
...@@ -302,7 +302,6 @@ class IONotifyController: ...@@ -302,7 +302,6 @@ class IONotifyController:
virtual void localSetValue( std::shared_ptr<USensorInfo>& usi, virtual void localSetValue( std::shared_ptr<USensorInfo>& usi,
CORBA::Long value, UniSetTypes::ObjectId sup_id ) override; CORBA::Long value, UniSetTypes::ObjectId sup_id ) override;
//! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет его использовать! //! \warning Оптимизация использует userdata! Это опасно, если кто-то ещё захочет его использовать!
// идентификаторы данные в userdata (см. USensorInfo::userdata) // идентификаторы данные в userdata (см. USensorInfo::userdata)
enum UserDataID enum UserDataID
......
...@@ -50,6 +50,8 @@ IONotifyController::IONotifyController(const string& name, const string& section ...@@ -50,6 +50,8 @@ IONotifyController::IONotifyController(const string& name, const string& section
trshMutex(name + "trshMutex"), trshMutex(name + "trshMutex"),
maxAttemtps(uniset_conf()->getPIntField("ConsumerMaxAttempts", 5)) maxAttemtps(uniset_conf()->getPIntField("ConsumerMaxAttempts", 5))
{ {
conUndef = signal_change_undefined_state().connect(sigc::mem_fun(*this, &IONotifyController::onChangeUndefinedState));
conInit = signal_init().connect(sigc::mem_fun(*this, &IONotifyController::initItem));
} }
IONotifyController::IONotifyController( ObjectId id, std::shared_ptr<NCRestorer> d ): IONotifyController::IONotifyController( ObjectId id, std::shared_ptr<NCRestorer> d ):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment