Barry, I do not understand what's going on with your compiler. Perhaps my GCC is too old? (even when -Wwrite-strings is being passed ??)
I've just changed the '#define' and used the 'typedef', and PETSc compile (configure.py ... && make) just passed without any warning... Furthermore, 'make test' 'make testexamples' also passed just fine. Perhaps my brain is not working well, but I do not see why all this is an issue as long as the base PetscObject structure says 'char* type_name'. You can always build on a 'char*' (note: non-const) buffer what you want, and pass it to VecSetType(), or perhaps just replace 'type_name' in internal PETSc code. IMHO, user-level PETSc interface should be simple, even if that iff internally PETSc has to relax a bit the rules (ie. using a 'char*' variable instead of a 'MatType' variable to build something like the "seqsbaij" string from its pieces "seq", "s", "b", "aij"). Am I missing something? What do you actually want to do with 'type_name'? On 6/23/08, Barry Smith <bsmith at mcs.anl.gov> wrote: > > Mmm, just a bit ugly you have to add the 'const' keyword. I insist: > > What would be the problem with ... ?? > > > > typedef const char* VecType; > > > > Two problems. > > The VecType is a const which means one cannot build them on the fly and > copy into them etc > > Second with the typedef one cannot do all the string manipulation on them. > For example even the > PetscStrcpy() in PetscHeaderCreate_Private() of type_name does not work. > > It would be nice to use a typedef instead of a define to build it but it > looks impossible. (Try it, > just change one of them and try to compile PETSc, the screaming is > relentless.) > > Barry > > > On Jun 23, 2008, at 2:38 PM, Lisandro Dalcin wrote: > > > > On 6/23/08, Barry Smith <bsmith at mcs.anl.gov> wrote: > > > > > > > > A while ago I made XXType (MatType, VecType etc) const char* > > > > > > > > > > Well, you actually did > > > > #define VecType const char* > > > > instead of > > > > typedef const char* VecType; > > > > which IMHO is the right way. > > > > > > > I now think that was a mistake. > > > > > > > Yep, the '#define' way can cause problems ;-) > > > > > > > > > I'd like to change them to just char* > > > > > > > But why not the 'typedef' way ?? > > > > > > > Can anyone suggest a technical reason why this is a bad idea before I > push > > > the code? > > > > > > Note this means if you have code like > > > > > > VecType t = VECMPI; > > > > > > you would need to change it to > > > > > > const VecType t = VECMPI; > > > > > > > > > > > > > > -- > > Lisandro Dalc?n > > --------------- > > Centro Internacional de M?todos Computacionales en Ingenier?a (CIMEC) > > Instituto de Desarrollo Tecnol?gico para la Industria Qu?mica (INTEC) > > Consejo Nacional de Investigaciones Cient?ficas y T?cnicas (CONICET) > > PTLC - G?emes 3450, (3000) Santa Fe, Argentina > > Tel/Fax: +54-(0)342-451.1594 > > > > > > -- Lisandro Dalc?n --------------- Centro Internacional de M?todos Computacionales en Ingenier?a (CIMEC) Instituto de Desarrollo Tecnol?gico para la Industria Qu?mica (INTEC) Consejo Nacional de Investigaciones Cient?ficas y T?cnicas (CONICET) PTLC - G?emes 3450, (3000) Santa Fe, Argentina Tel/Fax: +54-(0)342-451.1594
