Actual source code: prefix.c

      1: #define PETSC_DLL
      2: /*
      3:      Provides utility routines for manulating any type of PETSc object.
      4: */
     5:  #include petsc.h

      9: /*
     10:    PetscObjectSetOptionsPrefix - Sets the prefix used for searching for all
     11:    options of PetscObjectType in the database.

     13:    Input Parameters:
     14: .  obj - any PETSc object, for example a Vec, Mat or KSP.
     15: .  prefix - the prefix string to prepend to option requests of the object.

     17:    Notes:
     18:    A hyphen (-) must NOT be given at the beginning of the prefix name.
     19:    The first character of all runtime options is AUTOMATICALLY the
     20:    hyphen.

     22:    Concepts: prefix^setting

     24: */
     25: PetscErrorCode PETSC_DLLEXPORT PetscObjectSetOptionsPrefix(PetscObject obj,const char prefix[])
     26: {

     30:   PetscStrfree(obj->prefix);
     31:   if (!prefix) {
     32:     obj->prefix = PETSC_NULL;
     33:   } else {
     34:      if (prefix[0] == '-') SETERRQ(PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");
     35:     PetscStrallocpy(prefix,&obj->prefix);
     36:   }
     37:   return(0);
     38: }

     42: /*
     43:    PetscObjectAppendOptionsPrefix - Sets the prefix used for searching for all
     44:    options of PetscObjectType in the database.

     46:    Input Parameters:
     47: .  obj - any PETSc object, for example a Vec, Mat or KSP.
     48: .  prefix - the prefix string to prepend to option requests of the object.

     50:    Notes:
     51:    A hyphen (-) must NOT be given at the beginning of the prefix name.
     52:    The first character of all runtime options is AUTOMATICALLY the
     53:    hyphen.

     55:    Concepts: prefix^setting

     57: */
     58: PetscErrorCode PETSC_DLLEXPORT PetscObjectAppendOptionsPrefix(PetscObject obj,const char prefix[])
     59: {
     60:   char   *buf = obj->prefix;
     62:   size_t len1,len2;

     65:   if (!prefix) {return(0);}
     66:   if (!buf) {
     67:     PetscObjectSetOptionsPrefix(obj,prefix);
     68:     return(0);
     69:   }
     70:   if (prefix[0] == '-') SETERRQ(PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");

     72:   PetscStrlen(prefix,&len1);
     73:   PetscStrlen(buf,&len2);
     74:   PetscMalloc((1+len1+len2)*sizeof(char),&obj->prefix);
     75:   PetscStrcpy(obj->prefix,buf);
     76:   PetscStrcat(obj->prefix,prefix);
     77:   PetscFree(buf);
     78:   return(0);
     79: }

     83: /*
     84:    PetscObjectGetOptionsPrefix - Gets the prefix of the PetscObject.

     86:    Input Parameters:
     87: .  obj - any PETSc object, for example a Vec, Mat or KSP.

     89:    Output Parameters:
     90: .  prefix - pointer to the prefix string used is returned

     92:    Concepts: prefix^getting

     94: */
     95: PetscErrorCode PETSC_DLLEXPORT PetscObjectGetOptionsPrefix(PetscObject obj,const char *prefix[])
     96: {
     98:   *prefix = obj->prefix;
     99:   return(0);
    100: }

    104: /*
    105:    PetscObjectPrependOptionsPrefix - Sets the prefix used for searching for all
    106:    options of PetscObjectType in the database.

    108:    Input Parameters:
    109: .  obj - any PETSc object, for example a Vec, Mat or KSP.
    110: .  prefix - the prefix string to prepend to option requests of the object.

    112:    Notes:
    113:    A hyphen (-) must NOT be given at the beginning of the prefix name.
    114:    The first character of all runtime options is AUTOMATICALLY the
    115:    hyphen.

    117:    Concepts: prefix^setting

    119: */
    120: PetscErrorCode PETSC_DLLEXPORT PetscObjectPrependOptionsPrefix(PetscObject obj,const char prefix[])
    121: {
    122:   char   *buf = obj->prefix;
    124:   size_t len1,len2;

    127:   if (!prefix) {return(0);}
    128:   if (!buf) {
    129:     PetscObjectSetOptionsPrefix(obj,prefix);
    130:     return(0);
    131:   }
    132:   if (prefix[0] == '-') SETERRQ(PETSC_ERR_ARG_WRONG,"Options prefix should not begin with a hypen");

    134:   PetscStrlen(prefix,&len1);
    135:   PetscStrlen(buf,&len2);
    136:   PetscMalloc((1+len1+len2)*sizeof(char),&obj->prefix);
    137:   PetscStrcpy(obj->prefix,prefix);
    138:   PetscStrcat(obj->prefix,buf);
    139:   PetscFree(buf);
    140:   return(0);
    141: }