24 #include <osl/module.hxx>
44 typedef void (
CALLTYPE*
ExFuncPtr11)(
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*);
45 typedef void (
CALLTYPE*
ExFuncPtr12)(
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*);
46 typedef void (
CALLTYPE*
ExFuncPtr13)(
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*);
47 typedef void (
CALLTYPE*
ExFuncPtr14)(
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*);
48 typedef void (
CALLTYPE*
ExFuncPtr15)(
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*);
49 typedef void (
CALLTYPE*
ExFuncPtr16)(
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*,
void*);
67 #ifndef DISABLE_DYNLOADING
72 constexpr OUStringLiteral
ISASYNC =
u"IsAsync";
73 constexpr OUStringLiteral
ADVICE =
u"Advice";
86 ModuleData(
const OUString& rStr, std::unique_ptr<osl::Module> pInst) : aName(rStr), pInstance(
std::move(pInst)) {}
93 const OUString& rIName,
94 const OUString& rFName,
99 pModuleData (pModule),
100 aInternalName (rIName),
111 pModuleData (rData.pModuleData),
112 aInternalName (rData.aInternalName),
113 aFuncName (rData.aFuncName),
114 nNumber (rData.nNumber),
116 eAsyncType (rData.eAsyncType)
124 class ModuleCollection
126 typedef std::map<OUString, std::unique_ptr<ModuleData>> MapType;
129 ModuleCollection() {}
131 const ModuleData* findByName(
const OUString& rName)
const;
136 const ModuleData* ModuleCollection::findByName(
const OUString& rName)
const
138 MapType::const_iterator it = m_Data.find(rName);
139 return it == m_Data.end() ?
nullptr : it->second.get();
142 void ModuleCollection::insert(
ModuleData* pNew)
148 m_Data.insert(std::make_pair(aName, std::unique_ptr<ModuleData>(pNew)));
151 void ModuleCollection::clear()
156 ModuleCollection aModuleCollection;
162 #ifdef DISABLE_DYNLOADING
167 const ModuleData* pTemp = aModuleCollection.findByName(rModuleName);
171 OUString aNP = rModuleName;
173 std::unique_ptr<osl::Module>
pLib(
new osl::Module( aNP ));
178 oslGenericFunction fpGetData = pLib->getFunctionSymbol(
GETFUNCTIONDATA);
179 if ((fpGetCount ==
nullptr) || (fpGetData ==
nullptr))
182 oslGenericFunction fpIsAsync = pLib->getFunctionSymbol(
ISASYNC);
183 oslGenericFunction fpAdvice = pLib->getFunctionSymbol(
ADVICE);
184 oslGenericFunction fpSetLanguage = pLib->getFunctionSymbol(
SETLANGUAGE);
188 sal_uInt16 nLanguage =
static_cast<sal_uInt16
>(eLanguage);
194 aModuleCollection.insert(pModuleData);
201 for (sal_uInt16
i=0;
i < nCount;
i++)
204 char cInternalName[256];
210 cInternalName[0] = 0;
212 for (
ParamType & rParamType : eParamType)
216 (*
reinterpret_cast<GetFuncDataPtr
>(fpGetData))(
i, cFuncName,
nParamCount,
217 eParamType, cInternalName);
220 (*
reinterpret_cast<IsAsync
>(fpIsAsync))(
i, &eAsyncType);
222 (*
reinterpret_cast<Advice
>(fpAdvice))(
i, pfCallBack );
224 OUString aInternalName( cInternalName, strlen(cInternalName), osl_getThreadTextEncoding() );
225 OUString aFuncName( cFuncName, strlen(cFuncName), osl_getThreadTextEncoding() );
233 pLegacyFuncCol->
insert(pLegacyFuncData);
241 aModuleCollection.clear();
246 #ifdef DISABLE_DYNLOADING
250 oslGenericFunction fProc = pLib->getFunctionSymbol(
aFuncName);
251 if (fProc ==
nullptr)
257 (*
reinterpret_cast<ExFuncPtr1>(fProc))(ppParam[0]);
260 (*
reinterpret_cast<ExFuncPtr2>(fProc))(ppParam[0], ppParam[1]);
263 (*
reinterpret_cast<ExFuncPtr3>(fProc))(ppParam[0], ppParam[1], ppParam[2]);
266 (*
reinterpret_cast<ExFuncPtr4>(fProc))(ppParam[0], ppParam[1], ppParam[2], ppParam[3]);
269 (*
reinterpret_cast<ExFuncPtr5>(fProc))(ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4]);
272 (*
reinterpret_cast<ExFuncPtr6>(fProc))(ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5]);
275 (*
reinterpret_cast<ExFuncPtr7>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5],
279 (*
reinterpret_cast<ExFuncPtr8>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5],
280 ppParam[6], ppParam[7]);
283 (*
reinterpret_cast<ExFuncPtr9>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5],
284 ppParam[6], ppParam[7], ppParam[8]);
287 (*
reinterpret_cast<ExFuncPtr10>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5],
288 ppParam[6], ppParam[7], ppParam[8], ppParam[9]);
291 (*
reinterpret_cast<ExFuncPtr11>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5],
292 ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10]);
295 (*
reinterpret_cast<ExFuncPtr12>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5],
296 ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11]);
299 (*
reinterpret_cast<ExFuncPtr13>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5],
300 ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11],
304 (*
reinterpret_cast<ExFuncPtr14>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5],
305 ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11],
306 ppParam[12], ppParam[13]);
309 (*
reinterpret_cast<ExFuncPtr15>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5],
310 ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11],
311 ppParam[12], ppParam[13], ppParam[14]);
314 (*
reinterpret_cast<ExFuncPtr16>(fProc))( ppParam[0], ppParam[1], ppParam[2], ppParam[3], ppParam[4], ppParam[5],
315 ppParam[6], ppParam[7], ppParam[8], ppParam[9], ppParam[10], ppParam[11],
316 ppParam[12], ppParam[13], ppParam[14], ppParam[15]);
325 #ifdef DISABLE_DYNLOADING
329 oslGenericFunction fProc = pLib->getFunctionSymbol(
UNADVICE);
330 if (fProc !=
nullptr)
332 reinterpret_cast< ::
Unadvice>(fProc)(nHandle);
344 #ifdef DISABLE_DYNLOADING
353 oslGenericFunction fProc = pLib->getFunctionSymbol(
GETPARAMDESC);
354 if ( fProc !=
nullptr )
358 *pcName = *pcDesc = 0;
360 reinterpret_cast< ::GetParamDesc
>(fProc)( nFuncNo, nParam, pcName, pcDesc );
361 aName = OUString( pcName, 256, osl_getThreadTextEncoding() );
362 aDesc = OUString( pcDesc, 256, osl_getThreadTextEncoding() );
377 for (
auto const& it : r.
m_Data)
379 m_Data.insert(std::make_pair(it.first, std::make_unique<LegacyFuncData>(*it.second)));
385 MapType::const_iterator it =
m_Data.find(rName);
386 return it ==
m_Data.end() ?
nullptr : it->second.get();
391 MapType::iterator it =
m_Data.find(rName);
392 return it ==
m_Data.end() ?
nullptr : it->second.get();
398 m_Data.insert(std::make_pair(aName, std::unique_ptr<LegacyFuncData>(pNew)));
MapType::const_iterator const_iterator
const_iterator end() const
const ModuleData & operator=(const ModuleData &)=delete
const LanguageTag & GetUILanguageTag() const
LanguageType getLanguageType(bool bResolveSystem=true) const
static const AllSettings & GetSettings()
const_iterator begin() const
std::unique_ptr< osl::Module > pInstance
const LegacyFuncData * findByName(const OUString &rName) const
const OUString & GetName() const
friend class ModuleCollection
LegacyFuncData(const ModuleData *pModule, const OUString &rIName, const OUString &rFName, sal_uInt16 nNo, sal_uInt16 nCount, const ParamType *peType, ParamType eType)
void insert(LegacyFuncData *pNew)
ModuleData(const ModuleData &)=delete
void getParamDesc(OUString &aName, OUString &aDesc, sal_uInt16 nParam) const
name and description of parameter nParam.
const OUString & GetInternalName() const
void CALLTYPE ScAddInAsyncCallBack(double &nHandle, void *pData)
const ModuleData * pModuleData
static LegacyFuncCollection * GetLegacyFuncCollection()
void Unadvice(double nHandle)
void Call(void **ppParam) const
ParamType eParamType[MAXFUNCPARAM]
ModuleData(const OUString &rStr, std::unique_ptr< osl::Module > pInst)
const OUString & GetModuleName() const
osl::Module * GetInstance() const