diff options
author | George Hazan <george.hazan@gmail.com> | 2012-07-20 15:56:25 +0000 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2012-07-20 15:56:25 +0000 |
commit | bfe1bd0fc087be44c70904aee0fe4276643d206d (patch) | |
tree | d5376d7cab1f6e5084a1449dc341c325b6cee45c /include | |
parent | 8593e7594773c30b35488bb6a45fcc782ed5df0c (diff) |
- db3x_mmap is completely moved to a class;
- the old nightmare in the core "How to detect a db plugin and load it" is eliminated forever;
- databases are the usual plugins now (loadable via Load)
- dynamic DATABASELINK registration
git-svn-id: http://svn.miranda-ng.org/main/trunk@1082 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'include')
-rw-r--r-- | include/m_db_int.h | 58 | ||||
-rw-r--r-- | include/m_system_cpp.h | 14 |
2 files changed, 49 insertions, 23 deletions
diff --git a/include/m_db_int.h b/include/m_db_int.h index f666ffcbd5..2fd70ceec5 100644 --- a/include/m_db_int.h +++ b/include/m_db_int.h @@ -66,33 +66,22 @@ interface MIDatabase STDMETHOD_(BOOL,EnumResidentSettings)(DBMODULEENUMPROC pFunc, void *pParam) PURE;
};
-typedef struct {
- int cbSize;
-
- /*
- returns what the driver can do given the flag
- */
- int (*getCapability) (int flag);
+///////////////////////////////////////////////////////////////////////////////
+// Each database plugin should register itself using this structure
- /*
- buf: pointer to a string buffer
- cch: length of buffer
- shortName: if true, the driver should return a short but descriptive name, e.g. "3.xx profile"
- Affect: The database plugin must return a "friendly name" into buf and not exceed cch bytes,
- e.g. "Database driver for 3.xx profiles"
- Returns: 0 on success, non zero on failure
- */
- int (*getFriendlyName) (TCHAR *buf, size_t cch, int shortName);
+struct DATABASELINK
+{
+ int cbSize;
+ char* szShortName; // uniqie short database name
+ TCHAR* szFullName; // in English, auto-translated by the core
/*
profile: pointer to a string which contains full path + name
Affect: The database plugin should create the profile, the filepath will not exist at
the time of this call, profile will be C:\..\<name>.dat
- Note: Do not prompt the user in anyway about this operation.
- Note: Do not initialise internal data structures at this point!
Returns: 0 on success, non zero on failure - error contains extended error information, see EMKPRF_*
*/
- int (*makeDatabase) (TCHAR *profile, int * error);
+ int (*makeDatabase)(const TCHAR *profile, int *error);
/*
profile: [in] a null terminated string to file path of selected profile
@@ -104,22 +93,45 @@ typedef struct { etc.
Returns: 0 on success, non zero on failure
*/
- int (*grokHeader) (TCHAR *profile, int * error);
+ int (*grokHeader)(const TCHAR *profile, int * error);
/*
Affect: Tell the database to create all services/hooks that a 3.xx legecy database might support into link,
which is a PLUGINLINK structure
Returns: 0 on success, nonzero on failure
*/
- MIDatabase* (*Load) (TCHAR *profile);
+ MIDatabase* (*Load) (const TCHAR *profile);
/*
Affect: The database plugin should shutdown, unloading things from the core and freeing internal structures
Returns: 0 on success, nonzero on failure
Note: Unload() might be called even if Load(void) was never called, wasLoaded is set to 1 if Load(void) was ever called.
*/
- int (*Unload) (int wasLoaded);
+ int (*Unload)(MIDatabase*);
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// Database list's services
+
+// MS_DB_REGISTER_PLUGIN : registers a database plugin
+// wParam : 0 (unused)
+// lParam : DATABASELINK* = database link description
+
+#define MS_DB_REGISTER_PLUGIN "DB/RegisterPlugin"
+
+__inline static void RegisterDatabasePlugin(DATABASELINK* pDescr)
+{ CallService(MS_DB_REGISTER_PLUGIN, 0, (LPARAM)pDescr);
+}
+
+// MS_DB_FIND_PLUGIN : looks for a database plugin suitable to open this file
+// wParam : 0 (unused)
+// lParam : const TCHAR* = name of the database file
+// returns DATABASELINK* of the required plugin or NULL on error
+
+#define MS_DB_FIND_PLUGIN "DB/FindPlugin"
-} DATABASELINK;
+__inline static DATABASELINK* FindDatabasePlugin(const TCHAR* ptszFileName)
+{ return (DATABASELINK*)CallService(MS_DB_FIND_PLUGIN, 0, (LPARAM)ptszFileName);
+}
#endif // M_DB_INT_H__
diff --git a/include/m_system_cpp.h b/include/m_system_cpp.h index c42bd68272..ea8098f24a 100644 --- a/include/m_system_cpp.h +++ b/include/m_system_cpp.h @@ -63,6 +63,20 @@ public: };
///////////////////////////////////////////////////////////////////////////////
+// basic class for classes that should be cleared inside new()
+
+class MZeroedObject
+{
+public:
+ __inline void* operator new( size_t size )
+ { return calloc( 1, size );
+ }
+ __inline void operator delete( void* p )
+ { free( p );
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
// general lists' templates
#define NumericKeySortT -1
|