// Copyright (c) 2003 David Muse
// See the COPYING file for more information.

#ifndef RUDIMENTS_ENVIRONMENT_H
#define RUDIMENTS_ENVIRONMENT_H

#include <rudiments/private/environmentincludes.h>

// The environment class provides methods for accessing and manipulating
// environment variables.

#ifdef RUDIMENTS_NAMESPACE
namespace rudiments {
#endif

class environmentprivate;

class environment {
        public:
                static        const char     *getValue(const char *variable);
                                        // Returns the value of "variable".
                static        bool           setValue(const char *variable,
                                                const char *value);
                                        // Sets the value of "variable" to
                                        // "value", overwriting any value that
                                        // "variable" previously had.
                                        // Returns true on success and false on
                                        // failure.
                static        bool           remove(const char *variable);
                                        // Removes "variable" from the
                                        // environment.

                static        const char * const     *variables();
                        // Returns a NULL terminated list of all
                        // environment variables.  Each entry in the list is
                        // of the form NAME=VALUE.

                static        bool   clear();
                                // Clears the environment of all name-value
                                // pairs.  After calling this, variables()
                                // will return NULL.

                static        void   print();
                                // Prints the environment variable list to
                                // stdout.

                static        void   setMutex(mutex *mtx);
                        // Allows you to supply a mutex if the class needs it.
                        // If your application is not multithreaded, then
                        // there is no need to supply a mutex.
};

#ifdef RUDIMENTS_NAMESPACE
}
#endif

#endif