Sort all includes in src/gromacs
[alexxy/gromacs.git] / src / gromacs / options / optionflags.h
index 2dc3bbc0365015eb074069d5bd9e7453baec5388..9157ecba9dabaf72dfc55cb5134a2954dff33fe9 100644 (file)
@@ -1,34 +1,38 @@
 /*
+ * This file is part of the GROMACS molecular simulation package.
  *
- *                This source code is part of
+ * Copyright (c) 2010,2011,2012,2014, by the GROMACS development team, led by
+ * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
+ * and including many others, as listed in the AUTHORS file in the
+ * top-level source directory and at http://www.gromacs.org.
  *
- *                 G   R   O   M   A   C   S
+ * GROMACS is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
  *
- *          GROningen MAchine for Chemical Simulations
+ * GROMACS is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  *
- * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS development team,
- * check out http://www.gromacs.org for more information.
-
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GROMACS; if not, see
+ * http://www.gnu.org/licenses, or write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
  *
- * If you want to redistribute modifications, please consider that
- * scientific software is very special. Version control is crucial -
- * bugs must be traceable. We will be happy to consider code for
- * inclusion in the official distribution, but derived work must not
- * be called official GROMACS. Details are found in the README & COPYING
- * files - if they are missing, get the official version at www.gromacs.org.
+ * If you want to redistribute modifications to GROMACS, please
+ * consider that scientific software is very special. Version
+ * control is crucial - bugs must be traceable. We will be happy to
+ * consider code for inclusion in the official distribution, but
+ * derived work must not be called official GROMACS. Details are found
+ * in the README & COPYING files - if they are missing, get the
+ * official version at http://www.gromacs.org.
  *
  * To help us fund GROMACS development, we humbly ask that you cite
- * the papers on the package - you can find them in the top README file.
- *
- * For more info, check our website at http://www.gromacs.org
+ * the research papers on the package. Check out http://www.gromacs.org.
  */
-/*! \internal \file
+/*! \file
  * \brief
  * Defines flags used in option implementation.
  *
  * not be accessed outside the module.
  * Because of details in the implementation, it is still installed.
  *
- * \author Teemu Murtola <teemu.murtola@cbr.su.se>
+ * \author Teemu Murtola <teemu.murtola@gmail.com>
  * \ingroup module_options
  */
 #ifndef GMX_OPTIONS_OPTIONFLAGS_H
 #define GMX_OPTIONS_OPTIONFLAGS_H
 
-#include "../utility/flags.h"
+#include "gromacs/utility/flags.h"
 
 namespace gmx
 {
 
-/*! \internal \brief
+/*! \cond libapi */
+/*! \libinternal \brief
  * Flags for options.
  *
  * These flags are not part of the public interface, even though they are in an
  * installed header.  They are needed in a few template class implementations.
+ *
+ * \todo
+ * The flags related to default values are confusing, consider reorganizing
+ * them.
  */
 enum OptionFlag
 {
     //! %Option has been set.
-    efSet                 = 1<<0,
+    efOption_Set                        = 1<<0,
+    //! The current value of the option is a programmatic default value.
+    efOption_HasDefaultValue            = 1<<1,
+    //! An explicit default value has been provided for the option.
+    efOption_ExplicitDefaultValue       = 1<<2,
     /*! \brief
-     * The current value of the option is a default value.
+     * Next assignment to the option clears old values.
      *
-     * This flag is also set when a new option source starts, such that values
+     * This flag is set when a new option source starts, such that values
      * from the new source will overwrite old ones.
      */
-    efHasDefaultValue     = 1<<1,
+    efOption_ClearOnNextSet             = 1<<3,
     //! %Option is required to be set.
-    efRequired            = 1<<2,
+    efOption_Required                   = 1<<4,
     //! %Option can be specified multiple times.
-    efMulti               = 1<<3,
+    efOption_MultipleTimes              = 1<<5,
     //! %Option is hidden from standard help.
-    efHidden              = 1<<4,
-    /*! \brief
-     * %Option provides a boolean value.
-     *
-     * This is used to optionally support an alternative syntax where an
-     * option provided with no value sets the value to true and an
-     * option prefixed with "no" clears the value.
-     */
-    efBoolean             = 1<<5,
+    efOption_Hidden                     = 1<<6,
     /*! \brief
      * %Option value is a vector, but a single value is also accepted.
      *
-     * If only a single value is provided, the storage object should fill the
-     * whole vector with that value.  The length of the vector must be fixed.
-     * The default length is 3 elements.
+     * \see AbstractOption::setVector()
      */
-    efVector              = 1<<6,
-    efExternalStore       = 1<<8,
-    efExternalStoreArray  = 1<<9,
-    efExternalValueVector = 1<<10,
+    efOption_Vector                     = 1<<8,
+    //! %Option has a defaultValueIfSet() specified.
+    efOption_DefaultValueIfSetExists    = 1<<11,
     //! %Option does not support default values.
-    efNoDefaultValue      = 1<<7,
-    /*! \brief
-     * Storage object may add zero values even when a value is provided.
-     *
-     * In order to do proper error checking, this flag should be set when it is
-     * possible that the AbstractOptionStorage::appendValue() method of the
-     * storage object does not add any values for the option and still
-     * succeeds.
-     */
-    efConversionMayNotAddValues = 1<<11,
+    efOption_NoDefaultValue             = 1<<9,
     /*! \brief
      * Storage object does its custom checking for minimum value count.
      *
-     * If this flag is set, the class derived from AbstractOptionStorage should
-     * implement processSet(), processAll(), and possible other functions it
-     * provides such that it always fails if not enough values are provided.
+     * If this flag is set, the class derived from OptionStorageTemplate should
+     * implement processSetValues(), processAll(), and possible other functions
+     * it provides such that it always fails if not enough values are provided.
      * This is useful to override the default check, which is done in
-     * AbstractOptionStorage::processSet().
+     * OptionStorageTemplate::processSet().
      */
-    efDontCheckMinimumCount     = 1<<16,
-    efFile                = 1<<12,
-    efFileRead            = 1<<13,
-    efFileWrite           = 1<<14,
-    efFileLibrary         = 1<<15,
-    //efDynamic             = 1<<16,
-    //efRanges              = 1<<17,
-    //efEnum                = 1<<18,
-    //efStaticEnum          = 1<<19,
-    //efVarNum              = 1<<20,
-    //efAtomVal             = 1<<21,
+    efOption_DontCheckMinimumCount      = 1<<10
 };
 
-//! Holds a combination of ::OptionFlag values.
+//! \libinternal Holds a combination of ::OptionFlag values.
 typedef FlagsTemplate<OptionFlag> OptionFlags;
+//! \endcond
 
 } // namespace gmx