diff options
-rw-r--r-- | include/m_database.h | 16 | ||||
-rw-r--r-- | libs/win32/mir_app.lib | bin | 206224 -> 206130 bytes | |||
-rw-r--r-- | libs/win32/mir_core.lib | bin | 466724 -> 466564 bytes | |||
-rw-r--r-- | libs/win64/mir_app.lib | bin | 201832 -> 201736 bytes | |||
-rw-r--r-- | libs/win64/mir_core.lib | bin | 471634 -> 471474 bytes | |||
-rw-r--r-- | plugins/Dbx_mdbx/src/dbevents.cpp | 107 | ||||
-rw-r--r-- | plugins/Dbx_mdbx/src/dbintf.h | 22 | ||||
-rwxr-xr-x | plugins/Dbx_sqlite/src/dbevents.cpp | 8 | ||||
-rwxr-xr-x | plugins/Dbx_sqlite/src/dbintf.h | 2 | ||||
-rw-r--r-- | src/mir_app/src/mir_app.def | 4 | ||||
-rw-r--r-- | src/mir_app/src/mir_app64.def | 4 | ||||
-rw-r--r-- | src/mir_core/src/db.cpp | 2 | ||||
-rw-r--r-- | src/mir_core/src/mir_core.def | 16 | ||||
-rw-r--r-- | src/mir_core/src/mir_core64.def | 16 |
14 files changed, 146 insertions, 51 deletions
diff --git a/include/m_database.h b/include/m_database.h index 259e3a5699..972a1d2ece 100644 --- a/include/m_database.h +++ b/include/m_database.h @@ -702,7 +702,7 @@ public: /////////////////////////////////////////////////////////////////////////////////////////
// Event cursors
-class MIR_CORE_EXPORT EventCursorBase : public MZeroedObject
+class MIR_CORE_EXPORT EventCursor : public MZeroedObject
{
friend class EventIterator;
@@ -710,11 +710,11 @@ protected: DBEVENTINFO &dbei;
MCONTACT hContact;
- virtual ~EventCursorBase();
+ virtual ~EventCursor();
virtual MEVENT FetchNext() = 0;
public:
- EventCursorBase(MCONTACT _1, DBEVENTINFO &_2) :
+ EventCursor(MCONTACT _1, DBEVENTINFO &_2) :
hContact(_1),
dbei(_2)
{ }
@@ -728,17 +728,13 @@ public: }
};
-#if !defined(CUSTOM_EVENT_CURSOR)
-typedef class EventCursorBase EventCursor;
-#endif
-
class EventIterator
{
- EventCursorBase *cursor;
- MEVENT hCurr;
+ EventCursor *cursor;
+ MEVENT hCurr = 0;
public:
- EventIterator(EventCursorBase *_1) :
+ EventIterator(EventCursor *_1) :
cursor(_1)
{}
diff --git a/libs/win32/mir_app.lib b/libs/win32/mir_app.lib Binary files differindex 69034db1ff..5eba2a03e5 100644 --- a/libs/win32/mir_app.lib +++ b/libs/win32/mir_app.lib diff --git a/libs/win32/mir_core.lib b/libs/win32/mir_core.lib Binary files differindex 87139eb570..d23d29a2a1 100644 --- a/libs/win32/mir_core.lib +++ b/libs/win32/mir_core.lib diff --git a/libs/win64/mir_app.lib b/libs/win64/mir_app.lib Binary files differindex b065fdad35..c50cd2a11c 100644 --- a/libs/win64/mir_app.lib +++ b/libs/win64/mir_app.lib diff --git a/libs/win64/mir_core.lib b/libs/win64/mir_core.lib Binary files differindex 431a9e1c01..3231e379b1 100644 --- a/libs/win64/mir_core.lib +++ b/libs/win64/mir_core.lib diff --git a/plugins/Dbx_mdbx/src/dbevents.cpp b/plugins/Dbx_mdbx/src/dbevents.cpp index e3d4dfe015..e435e4b975 100644 --- a/plugins/Dbx_mdbx/src/dbevents.cpp +++ b/plugins/Dbx_mdbx/src/dbevents.cpp @@ -32,7 +32,7 @@ LONG CDbxMDBX::GetEventCount(MCONTACT contactID) return (cc == nullptr) ? 0 : cc->dbc.dwEventCount;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
MEVENT CDbxMDBX::AddEvent(MCONTACT contactID, const DBEVENTINFO *dbei)
{
@@ -46,7 +46,7 @@ MEVENT CDbxMDBX::AddEvent(MCONTACT contactID, const DBEVENTINFO *dbei) return dwEventId;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
BOOL CDbxMDBX::DeleteEvent(MEVENT hDbEvent)
{
@@ -125,7 +125,7 @@ BOOL CDbxMDBX::DeleteEvent(MEVENT hDbEvent) return 0;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
BOOL CDbxMDBX::EditEvent(MCONTACT contactID, MEVENT hDbEvent, const DBEVENTINFO *dbei)
{
@@ -251,7 +251,7 @@ bool CDbxMDBX::EditEvent(MCONTACT contactID, MEVENT hDbEvent, const DBEVENTINFO return true;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
LONG CDbxMDBX::GetBlobSize(MEVENT hDbEvent)
{
@@ -263,7 +263,7 @@ LONG CDbxMDBX::GetBlobSize(MEVENT hDbEvent) return ((const DBEvent*)data.iov_base)->cbBlob;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
BOOL CDbxMDBX::GetEvent(MEVENT hDbEvent, DBEVENTINFO *dbei)
{
@@ -309,7 +309,7 @@ BOOL CDbxMDBX::GetEvent(MEVENT hDbEvent, DBEVENTINFO *dbei) return 0;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
void CDbxMDBX::FindNextUnread(const txn_ptr &txn, DBCachedContact *cc, DBEventSortingKey &key2)
{
@@ -356,7 +356,7 @@ bool CDbxMDBX::CheckEvent(DBCachedContact *cc, const DBEvent *cdbe, DBCachedCont return cc->contactID == cdbe->dwContactID;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
BOOL CDbxMDBX::MarkEventRead(MCONTACT contactID, MEVENT hDbEvent)
{
@@ -415,7 +415,7 @@ BOOL CDbxMDBX::MarkEventRead(MCONTACT contactID, MEVENT hDbEvent) return wRetVal;
}
-/////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
MEVENT CDbxMDBX::GetEventById(LPCSTR szModule, LPCSTR szId)
{
@@ -458,7 +458,7 @@ BOOL CDbxMDBX::SetEventId(LPCSTR szModule, MEVENT hDbEvent, LPCSTR szId) return 0;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
MCONTACT CDbxMDBX::GetEventContact(MEVENT hDbEvent)
{
@@ -474,7 +474,7 @@ MCONTACT CDbxMDBX::GetEventContact(MEVENT hDbEvent) return ((const DBEvent*)data.iov_base)->dwContactID;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
MEVENT CDbxMDBX::FindFirstEvent(MCONTACT contactID)
{
@@ -500,7 +500,7 @@ MEVENT CDbxMDBX::FindFirstEvent(MCONTACT contactID) return cc->t_evLast = (pKey->hContact == contactID) ? pKey->hEvent : 0;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
MEVENT CDbxMDBX::FindFirstUnreadEvent(MCONTACT contactID)
{
@@ -508,7 +508,7 @@ MEVENT CDbxMDBX::FindFirstUnreadEvent(MCONTACT contactID) return (cc == nullptr) ? 0 : cc->dbc.evFirstUnread;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
MEVENT CDbxMDBX::FindLastEvent(MCONTACT contactID)
{
@@ -540,7 +540,7 @@ MEVENT CDbxMDBX::FindLastEvent(MCONTACT contactID) return cc->t_evLast = (pKey->hContact == contactID) ? pKey->hEvent : 0;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
MEVENT CDbxMDBX::FindNextEvent(MCONTACT contactID, MEVENT hDbEvent)
{
@@ -579,7 +579,7 @@ MEVENT CDbxMDBX::FindNextEvent(MCONTACT contactID, MEVENT hDbEvent) return cc->t_evLast = (pKey->hContact == contactID) ? pKey->hEvent : 0;
}
-///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////////
MEVENT CDbxMDBX::FindPrevEvent(MCONTACT contactID, MEVENT hDbEvent)
{
@@ -619,3 +619,82 @@ MEVENT CDbxMDBX::FindPrevEvent(MCONTACT contactID, MEVENT hDbEvent) cc->t_tsLast = pKey->ts;
return cc->t_evLast = (pKey->hContact == contactID) ? pKey->hEvent : 0;
}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Event cursors
+
+CMdbxEventCursor::CMdbxEventCursor(CDbxMDBX *pDb, MCONTACT hContact, DBEVENTINFO &dbei, bool bForward) :
+ EventCursor(hContact, dbei),
+ m_bForward(bForward)
+{
+ mdbx_txn_begin(pDb->m_env, nullptr, MDBX_RDONLY, &m_txn_ro);
+ mdbx_cursor_open(m_txn_ro, pDb->m_dbEventsSort, &m_cursor);
+
+ m_key.hContact = hContact;
+ if (bForward) {
+ m_key.hEvent = 0;
+ m_key.ts = 0;
+ }
+ else {
+ m_key.hEvent = 0xFFFFFFFF;
+ m_key.ts = 0xFFFFFFFFFFFFFFFF;
+ }
+}
+
+CMdbxEventCursor::~CMdbxEventCursor()
+{
+ if (m_cursor)
+ mdbx_cursor_close(m_cursor);
+}
+
+MEVENT CMdbxEventCursor::FetchNext()
+{
+ MDBX_val key = { &m_key, sizeof(m_key) }, data;
+ if (mdbx_cursor_get(*this, &key, &data, m_bForward ? MDBX_NEXT : MDBX_PREV) != MDBX_SUCCESS)
+ return 0;
+
+ const DBEventSortingKey *pKey = (const DBEventSortingKey *)key.iov_base;
+ return (pKey->hContact == hContact) ? pKey->hEvent : 0;
+}
+
+DB::EventCursor* CDbxMDBX::EventCursor(MCONTACT hContact, DBEVENTINFO &dbei)
+{
+ DBCachedContact *cc;
+ if (hContact != 0) {
+ cc = m_cache->GetCachedContact(hContact);
+ if (cc == nullptr)
+ return nullptr;
+ }
+ else cc = &m_ccDummy;
+
+ auto *pCursor = new CMdbxEventCursor(this, hContact, dbei, true);
+
+ MDBX_val key = { &pCursor->m_key, sizeof(pCursor->m_key) }, data;
+ if (mdbx_cursor_get(*pCursor, &key, &data, MDBX_SET_RANGE) != MDBX_SUCCESS) {
+ delete pCursor;
+ return nullptr;
+ }
+
+ return pCursor;
+}
+
+DB::EventCursor* CDbxMDBX::EventCursorRev(MCONTACT hContact, DBEVENTINFO &dbei)
+{
+ DBCachedContact *cc;
+ if (hContact != 0) {
+ cc = m_cache->GetCachedContact(hContact);
+ if (cc == nullptr)
+ return nullptr;
+ }
+ else cc = &m_ccDummy;
+
+ auto *pCursor = new CMdbxEventCursor(this, hContact, dbei, false);
+
+ MDBX_val key = { &pCursor->m_key, sizeof(pCursor->m_key) }, data;
+ if (mdbx_cursor_get(*pCursor, &key, &data, MDBX_SET_RANGE) != MDBX_SUCCESS) {
+ delete pCursor;
+ return nullptr;
+ }
+
+ return pCursor;
+}
diff --git a/plugins/Dbx_mdbx/src/dbintf.h b/plugins/Dbx_mdbx/src/dbintf.h index b74b6bbc12..05687bbfd2 100644 --- a/plugins/Dbx_mdbx/src/dbintf.h +++ b/plugins/Dbx_mdbx/src/dbintf.h @@ -136,9 +136,26 @@ struct EventItem MEVENT eventId;
};
+class CMdbxEventCursor : public DB::EventCursor
+{
+ CMDBX_txn_ro m_txn_ro;
+ MDBX_cursor* m_cursor = nullptr;
+ bool m_bForward;
+
+public:
+ CMdbxEventCursor(class CDbxMDBX *pOdb, MCONTACT hContact, DBEVENTINFO &dbei, bool bForward);
+ ~CMdbxEventCursor() override;
+
+ MEVENT FetchNext() override;
+
+ DBEventSortingKey m_key;
+
+ __forceinline operator MDBX_cursor*() const { return m_cursor; }
+};
+
class CDbxMDBX : public MDatabaseCommon, public MZeroedObject
{
- friend class MDBXEventCursor;
+ friend class CMdbxEventCursor;
struct Impl {
CDbxMDBX &pro;
@@ -298,6 +315,9 @@ public: STDMETHODIMP_(MEVENT) GetEventById(LPCSTR szModule, LPCSTR szId) override;
STDMETHODIMP_(BOOL) SetEventId(LPCSTR szModule, MEVENT, LPCSTR szId) override;
+ STDMETHODIMP_(DB::EventCursor *) EventCursor(MCONTACT hContact, DBEVENTINFO &dbei) override;
+ STDMETHODIMP_(DB::EventCursor *) EventCursorRev(MCONTACT hContact, DBEVENTINFO &dbei) override;
+
public:
MICryptoEngine *m_crypto;
};
diff --git a/plugins/Dbx_sqlite/src/dbevents.cpp b/plugins/Dbx_sqlite/src/dbevents.cpp index bef40881e8..cec73e5a50 100755 --- a/plugins/Dbx_sqlite/src/dbevents.cpp +++ b/plugins/Dbx_sqlite/src/dbevents.cpp @@ -718,18 +718,18 @@ BOOL CDbxSQLite::MetaSplitHistory(DBCachedContact *ccMeta, DBCachedContact*) return TRUE; } -STDMETHODIMP_(DB::EventCursor*) CDbxSQLite::EventCursor(MCONTACT hContact, DBEVENTINFO& dbei) +STDMETHODIMP_(DB::EventCursor*) CDbxSQLite::EventCursor(MCONTACT hContact, DBEVENTINFO &dbei) { return new CDbxSQLiteEventCursor(hContact, dbei, m_db); } -STDMETHODIMP_(DB::EventCursor*) CDbxSQLite::EventCursorRev(MCONTACT hContact, DBEVENTINFO& dbei) +STDMETHODIMP_(DB::EventCursor*) CDbxSQLite::EventCursorRev(MCONTACT hContact, DBEVENTINFO &dbei) { return new CDbxSQLiteEventCursor(hContact, dbei, m_db, true); } CDbxSQLiteEventCursor::CDbxSQLiteEventCursor(MCONTACT _1, DBEVENTINFO& _2, sqlite3* _db, bool reverse) - : EventCursorBase(_1, _2), m_db(_db) + : EventCursor(_1, _2), m_db(_db) { if (reverse) sqlite3_prepare_v2(m_db, reverse_order_query, -1, &cursor, nullptr); @@ -743,6 +743,7 @@ CDbxSQLiteEventCursor::~CDbxSQLiteEventCursor() if (cursor) sqlite3_reset(cursor); } + MEVENT CDbxSQLiteEventCursor::FetchNext() { if (!cursor) @@ -758,4 +759,3 @@ MEVENT CDbxSQLiteEventCursor::FetchNext() } return sqlite3_column_int64(cursor, 0); } - diff --git a/plugins/Dbx_sqlite/src/dbintf.h b/plugins/Dbx_sqlite/src/dbintf.h index 99cf1fba3f..1f0d44f54d 100755 --- a/plugins/Dbx_sqlite/src/dbintf.h +++ b/plugins/Dbx_sqlite/src/dbintf.h @@ -22,7 +22,7 @@ struct DBCachedContact : public DBCachedContactBase void MarkRead(MEVENT hDbEvent); }; -struct CDbxSQLiteEventCursor : public DB::EventCursorBase +struct CDbxSQLiteEventCursor : public DB::EventCursor { CDbxSQLiteEventCursor(MCONTACT _1, DBEVENTINFO& _2, sqlite3* m_db, bool reverse = false); ~CDbxSQLiteEventCursor() override; diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index be7e00c7d1..340d145332 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -732,6 +732,6 @@ ProtoBroadcastAsync @814 NONAME ?UseGroups@Clist@@3V?$CMOption@_N@@A @819 NONAME
?OfflineModes@Clist@@3V?$CMOption@K@@A @820 NONAME
?getChat@CSrmmBaseDialog@@QBEPAUSESSION_INFO@@XZ @821 NONAME
-?EventCursor@MDatabaseCommon@@UAGPAVEventCursorBase@DB@@IAAUDBEVENTINFO@@@Z @822 NONAME
-?EventCursorRev@MDatabaseCommon@@UAGPAVEventCursorBase@DB@@IAAUDBEVENTINFO@@@Z @823 NONAME
+?EventCursor@MDatabaseCommon@@UAGPAV0DB@@IAAUDBEVENTINFO@@@Z @822 NONAME
+?EventCursorRev@MDatabaseCommon@@UAGPAVEventCursor@DB@@IAAUDBEVENTINFO@@@Z @823 NONAME
Chat_CreateMenu @824 NONAME
diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 765d46b37b..2d9ac3a4b4 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -732,6 +732,6 @@ ProtoBroadcastAsync @814 NONAME ?UseGroups@Clist@@3V?$CMOption@_N@@A @819 NONAME
?OfflineModes@Clist@@3V?$CMOption@K@@A @820 NONAME
?getChat@CSrmmBaseDialog@@QEBAPEAUSESSION_INFO@@XZ @821 NONAME
-?EventCursor@MDatabaseCommon@@UEAAPEAVEventCursorBase@DB@@IAEAUDBEVENTINFO@@@Z @822 NONAME
-?EventCursorRev@MDatabaseCommon@@UEAAPEAVEventCursorBase@DB@@IAEAUDBEVENTINFO@@@Z @823 NONAME
+?EventCursor@MDatabaseCommon@@UEAAPEAV0DB@@IAEAUDBEVENTINFO@@@Z @822 NONAME
+?EventCursorRev@MDatabaseCommon@@UEAAPEAVEventCursor@DB@@IAEAUDBEVENTINFO@@@Z @823 NONAME
Chat_CreateMenu @824 NONAME
diff --git a/src/mir_core/src/db.cpp b/src/mir_core/src/db.cpp index 39c0835281..05d775d598 100644 --- a/src/mir_core/src/db.cpp +++ b/src/mir_core/src/db.cpp @@ -439,7 +439,7 @@ MIR_CORE_DLL(MEVENT) db_event_setId(const char *szModule, MEVENT hDbEvent, const /////////////////////////////////////////////////////////////////////////////////////////
// event cursors
-DB::EventCursorBase::~EventCursorBase()
+DB::EventCursor::~EventCursor()
{
}
diff --git a/src/mir_core/src/mir_core.def b/src/mir_core/src/mir_core.def index 7b5c2f8b23..49da70f1b6 100644 --- a/src/mir_core/src/mir_core.def +++ b/src/mir_core/src/mir_core.def @@ -1457,12 +1457,12 @@ XmlGetChildText @1645 ?InsertNewDeclaration@XMLElement@tinyxml2@@QAEPAVXMLDeclaration@2@PBD@Z @1679 NONAME
?InsertNewText@XMLElement@tinyxml2@@QAEPAVXMLText@2@PBD@Z @1680 NONAME
?InsertNewUnknown@XMLElement@tinyxml2@@QAEPAVXMLUnknown@2@PBD@Z @1681 NONAME
-??1EventCursorBase@DB@@MAE@XZ @1684 NONAME
-??0EventCursorBase@DB@@QAE@ABV01@@Z @1685 NONAME
-??0EventCursorBase@DB@@QAE@IAAUDBEVENTINFO@@@Z @1686 NONAME
-??_7EventCursorBase@DB@@6B@ @1687 NONAME
-?Events@DB@@YGPAVEventCursorBase@1@IAAUDBEVENTINFO@@@Z @1688 NONAME
-?EventsRev@DB@@YGPAVEventCursorBase@1@IAAUDBEVENTINFO@@@Z @1689 NONAME
-?begin@EventCursorBase@DB@@QAEIXZ @1690 NONAME
-?end@EventCursorBase@DB@@QAEIXZ @1691 NONAME
+??1EventCursor@DB@@MAE@XZ @1684 NONAME
+??0EventCursor@DB@@QAE@ABV01@@Z @1685 NONAME
+??0EventCursor@DB@@QAE@IAAUDBEVENTINFO@@@Z @1686 NONAME
+??_7EventCursor@DB@@6B@ @1687 NONAME
+?Events@DB@@YGPAVEventCursor@1@IAAUDBEVENTINFO@@@Z @1688 NONAME
+?EventsRev@DB@@YGPAVEventCursor@1@IAAUDBEVENTINFO@@@Z @1689 NONAME
+?begin@EventCursor@DB@@QAEIXZ @1690 NONAME
+?end@EventCursor@DB@@QAEIXZ @1691 NONAME
TimeZone_GetSystemTime @1692
diff --git a/src/mir_core/src/mir_core64.def b/src/mir_core/src/mir_core64.def index c66e248673..e9e0959b67 100644 --- a/src/mir_core/src/mir_core64.def +++ b/src/mir_core/src/mir_core64.def @@ -1457,12 +1457,12 @@ XmlGetChildText @1645 ?InsertNewDeclaration@XMLElement@tinyxml2@@QEAAPEAVXMLDeclaration@2@PEBD@Z @1679 NONAME
?InsertNewText@XMLElement@tinyxml2@@QEAAPEAVXMLText@2@PEBD@Z @1680 NONAME
?InsertNewUnknown@XMLElement@tinyxml2@@QEAAPEAVXMLUnknown@2@PEBD@Z @1681 NONAME
-??1EventCursorBase@DB@@MEAA@XZ @1684 NONAME
-??0EventCursorBase@DB@@QEAA@AEBV01@@Z @1685 NONAME
-??0EventCursorBase@DB@@QEAA@IAEAUDBEVENTINFO@@@Z @1686 NONAME
-??_7EventCursorBase@DB@@6B@ @1687 NONAME
-?Events@DB@@YAPEAVEventCursorBase@1@IAEAUDBEVENTINFO@@@Z @1688 NONAME
-?EventsRev@DB@@YAPEAVEventCursorBase@1@IAEAUDBEVENTINFO@@@Z @1689 NONAME
-?begin@EventCursorBase@DB@@QEAAIXZ @1690 NONAME
-?end@EventCursorBase@DB@@QEAAIXZ @1691 NONAME
+??1EventCursor@DB@@MEAA@XZ @1684 NONAME
+??0EventCursor@DB@@QEAA@AEBV01@@Z @1685 NONAME
+??0EventCursor@DB@@QEAA@IAEAUDBEVENTINFO@@@Z @1686 NONAME
+??_7EventCursor@DB@@6B@ @1687 NONAME
+?Events@DB@@YAPEAVEventCursor@1@IAEAUDBEVENTINFO@@@Z @1688 NONAME
+?EventsRev@DB@@YAPEAVEventCursor@1@IAEAUDBEVENTINFO@@@Z @1689 NONAME
+?begin@EventCursor@DB@@QEAAIXZ @1690 NONAME
+?end@EventCursor@DB@@QEAAIXZ @1691 NONAME
TimeZone_GetSystemTime @1692
|