diff --git a/src/gdd/gddAppFuncTable.h b/src/gdd/gddAppFuncTable.h index d91c08da6..6327f3eb6 100644 --- a/src/gdd/gddAppFuncTable.h +++ b/src/gdd/gddAppFuncTable.h @@ -29,6 +29,9 @@ * * History * $Log$ + * Revision 1.5 1997/06/25 06:17:36 jhill + * fixed warnings + * * Revision 1.4 1996/11/22 20:37:19 jhill * converted large inline templ funcs * @@ -94,33 +97,54 @@ public: } // - // typedef for the app read function to be called + // Both cases below are correct C++ syntax. + // (compiler quality varies) // - typedef gddAppFuncTableStatus (PV::*gddAppReadFunc)(gdd &value); +#if _MSC_VER == 1100 + // + // required by MS vis c++ 5.0 (but not by 4.0 or 4.2) + // + typedef gddAppFuncTableStatus (PV::*gddAppFuncTablePMF_t)(gdd &); +# define gddAppFuncTablePMF(VAR) gddAppFuncTablePMF_t VAR +#else + // + // required by gnu g++ 2.7.2 + // +# define gddAppFuncTablePMF(VAR) gddAppFuncTableStatus (PV:: * VAR)(gdd &) +# define gddAppFuncTablePMF_t ((PV:: *)(gdd &)) +#endif // // installReadFunc() - // - // The 2nd parameter has type "gddAppReadFunc" which is - // a ptr to member function. The member function should - // be declared as follows: - // - // gddAppFuncTableStatus PV::memberFunction(gdd &value); - // - gddAppFuncTableStatus installReadFunc(const unsigned type, - gddAppReadFunc pMFuncIn); + // + // The 2nd parameter has type "gddAppFuncTablePMF" which is + // a ptr to member function. The member function should + // be declared as follows: + // + // gddAppFuncTableStatus PV::memberFunction(gdd &value); + // + // + // workaround for bug existing only in microsloth vis c++ 5.0 + // +#if _MSC_VER == 1100 + gddAppFuncTableStatus installReadFuncVISC50 (const unsigned type, + gddAppFuncTablePMF(pMFuncIn)); +#else + gddAppFuncTableStatus installReadFunc (const unsigned type, + gddAppFuncTablePMF(pMFuncIn)); +#endif // // installReadFunc() - // - // The 2nd parameter has type "gddAppReadFunc" which is - // a ptr to member function. The member function should - // be declared as follows: - // - // gddAppFuncTableStatus PV::memberFunction(gdd &value); - // - gddAppFuncTableStatus installReadFunc(const char * const pName, - gddAppReadFunc pMFuncIn); + // + // The 2nd parameter has type "gddAppFuncTablePMF" which is + // a ptr to member function. The member function should + // be declared as follows: + // + // gddAppFuncTableStatus PV::memberFunction(gdd &value); + // + gddAppFuncTableStatus installReadFunc (const char * pName, + gddAppFuncTablePMF(pMFuncIn)); // // @@ -134,7 +158,7 @@ private: // hidden from the application (eventually allow for auto // expansion of the table) // - gddAppReadFunc *pMFuncRead; + gddAppFuncTablePMF(*pMFuncRead); unsigned appTableNElem; void newTbl(unsigned neMaxType); @@ -143,7 +167,7 @@ private: // // gddAppFuncTable::installReadFunc() // -// The 2nd parameter has type "gddAppReadFunc" which is +// The 2nd parameter has type "gddAppFuncTablePMF" which is // a ptr to member function. The member function should // be declared as follows: // @@ -152,10 +176,15 @@ private: // The typedef is not used here because of portability // problems resulting from compiler weaknesses // -template -gddAppFuncTableStatus gddAppFuncTable::installReadFunc( - const unsigned type, - gddAppFuncTableStatus (PV::*pMFuncIn)(gdd &value)) +#if _MSC_VER == 1100 + template + gddAppFuncTableStatus gddAppFuncTable::installReadFuncVISC50( + const unsigned type, gddAppFuncTablePMF(pMFuncIn)) +#else + template + gddAppFuncTableStatus gddAppFuncTable::installReadFunc( + const unsigned type, gddAppFuncTablePMF(pMFuncIn)) +#endif { // // Attempt to expand the table if the app type will not fit @@ -173,7 +202,7 @@ gddAppFuncTableStatus gddAppFuncTable::installReadFunc( // // installReadFunc() // -// The 2nd parameter has type "gddAppReadFunc" which is +// The 2nd parameter has type "gddAppFuncTablePMF" which is // a ptr to member function. The member function should // be declared as follows: // @@ -181,8 +210,7 @@ gddAppFuncTableStatus gddAppFuncTable::installReadFunc( // template gddAppFuncTableStatus gddAppFuncTable::installReadFunc( - const char * const pName, - gddAppFuncTableStatus (PV::*pMFuncIn)(gdd &value)) + const char * pName, gddAppFuncTablePMF(pMFuncIn)) { aitUint32 type; gddStatus rc; @@ -197,7 +225,12 @@ gddAppFuncTableStatus gddAppFuncTable::installReadFunc( # ifdef DEBUG printf("installing PV attribute %s = %d\n", pName, type); # endif + +#if _MSC_VER == 1100 + return this->installReadFuncVISC50(type, pMFuncIn); +#else return this->installReadFunc(type, pMFuncIn); +#endif } // @@ -212,7 +245,7 @@ gddAppFuncTableStatus gddAppFuncTable::installReadFunc( template void gddAppFuncTable::newTbl(unsigned newApplTypeMax) { - gddAppReadFunc *pMNewFuncTbl; + gddAppFuncTablePMF(*pMNewFuncTbl); unsigned maxApp; unsigned i; @@ -220,7 +253,7 @@ void gddAppFuncTable::newTbl(unsigned newApplTypeMax) return; } maxApp = newApplTypeMax+(1u<<6u); -# ifdef _MSC_VER +# if _MSC_VER < 1100 // // Right now all MS Visual C++ compilers allocate the // wrong amount of memory (i.e. too little) @@ -228,10 +261,10 @@ void gddAppFuncTable::newTbl(unsigned newApplTypeMax) // only explicit calculation via sizeof() works. // For future versions this may become "if _MSC_VER < ???"... // - pMNewFuncTbl = (gddAppReadFunc *) - new char[sizeof(gddAppReadFunc) * maxApp]; + pMNewFuncTbl = (gddAppFuncTablePMF(*)) + new char[sizeof(gddAppFuncTablePMF_t) * maxApp]; # else - pMNewFuncTbl = new gddAppReadFunc[maxApp]; + pMNewFuncTbl = new gddAppFuncTablePMF_t[maxApp]; # endif if (pMNewFuncTbl) { for (i=0u; i gddAppFuncTableStatus gddAppFuncTable::callReadFunc (PV &pv, gdd &value) { unsigned type = value.applicationType(); - gddAppReadFunc pFunc; + gddAppFuncTablePMF(pFunc); // // otherwise call the function associated