summaryrefslogtreecommitdiff
path: root/src/mem/gems_common/ioutil/initvar.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/gems_common/ioutil/initvar.hh')
-rw-r--r--src/mem/gems_common/ioutil/initvar.hh181
1 files changed, 181 insertions, 0 deletions
diff --git a/src/mem/gems_common/ioutil/initvar.hh b/src/mem/gems_common/ioutil/initvar.hh
new file mode 100644
index 000000000..8dea8dfc1
--- /dev/null
+++ b/src/mem/gems_common/ioutil/initvar.hh
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) 1999-2005 Mark D. Hill and David A. Wood
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _INCLUDE_H_
+#define _INCLUDE_H_
+
+/*------------------------------------------------------------------------*/
+/* Includes */
+/*------------------------------------------------------------------------*/
+
+/*------------------------------------------------------------------------*/
+/* Macro declarations */
+/*------------------------------------------------------------------------*/
+
+/*------------------------------------------------------------------------*/
+/* Class declaration(s) */
+/*------------------------------------------------------------------------*/
+
+/**
+* This class deals with initializing the global variables in the object,
+* setting the varibles (from the command line), printing the configuration,
+* and saving it to a file.
+*
+* Before including this file, you must define the variable CONFIG_VAR_FILENAME
+* to define which variables are to be used.
+*
+* @see confio_t
+* @author cmauer
+* @version $Id$
+*/
+class initvar_t {
+public:
+ /**
+ * @name Constructor(s) / destructor
+ */
+ //@{
+
+ /**
+ * Constructor: creates object
+ * @param name The name of this object
+ * @param relativeIncludePath The relative path to config files
+ * @param initializingString A string (with value pairs) for initialization
+ * @param allocate_f A ptr to the allocate function
+ * @param generate_values A ptr to the generate values function
+ * @param my_get_attr A ptr to the get attribute function
+ * @param my_set_attr A ptr to the set attribute function
+ */
+ initvar_t( const char *name, const char *relativeIncludePath,
+ const char *initializingString,
+ void (*allocate_fn)(void),
+ void (*my_generate_fn)(void),
+ get_attr_t my_get_attr, set_attr_t my_set_attr );
+
+ /**
+ * Destructor: frees object.
+ */
+ ~initvar_t();
+ //@}
+
+ /**
+ * @name Methods
+ */
+ //@{
+ /// calls the allocation routine explicitly (used by the tester)
+ void allocate( void );
+
+ /// checks to see if all vars have been initialized
+ void checkInitialization( void );
+
+ /// list all parameters: to a file (or stdout if file is NULL)
+ void list_param( FILE *fp );
+
+ /// returns the name of the last config file to be read ("default" is none)
+ const char *get_config_name( void );
+
+ /// calls through to the get_attr function, if object is initialized
+ attr_value_t dispatch_get( void *id, void *obj,
+ attr_value_t *idx );
+
+ /** adds initialization attributes, calls through to the set_attr function,
+ * if object is initialized.
+ */
+ set_error_t dispatch_set( void *id, void *obj,
+ attr_value_t *val, attr_value_t *idx );
+ //@}
+ /// (single) instance of the init var object
+ static initvar_t *m_inst;
+
+protected:
+ ///returns true if the variables are initialized
+ bool confirm_init( void ) {
+ return m_is_init;
+ }
+
+ ///read a configuration file
+ void read_config( const char *parameterFile );
+
+ /// set a parameter to be a particular value
+ set_error_t set_param( const char *name, attr_value_t *value );
+
+ /// initializes the configuration reader
+ void init_config_reader( const char *initString );
+
+ /// bool value (true if initialized)
+ bool m_is_init;
+
+ /// configuration reader
+ confio_t *m_config_reader;
+
+ /// a pointer to a string (corresponding to this objects name)
+ char *m_name;
+
+ /// a pointer to a string (representing the last config file read)
+ char *m_config_filename;
+
+ /// the relative include path to the configuration files
+ char *m_rel_include_path;
+
+ /// a pointer to the allocation function
+ void (*m_allocate_f)(void);
+
+ /// a pointer to the generate values function
+ void (*m_generate_values_f)(void);
+
+ /// a pointer to the session get function
+ get_attr_t m_my_get_attr;
+ /// a pointer to the session set function
+ set_attr_t m_my_set_attr;
+};
+
+
+/*------------------------------------------------------------------------*/
+/* Global variables */
+/*------------------------------------------------------------------------*/
+
+/*------------------------------------------------------------------------*/
+/* Global functions */
+/*------------------------------------------------------------------------*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+///provides a dispatch mechanism that catches a few commands to get variables
+attr_value_t initvar_dispatch_get( void *id, void *obj,
+ attr_value_t *idx );
+
+///provides a dispatch mechanism that catches a few commands to set variables
+set_error_t initvar_dispatch_set( void *id, void *obj,
+ attr_value_t *val, attr_value_t *idx );
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif /* _INCLUDE_H_ */