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

#ifndef RUDIMENTS_CONTAINER_H
#define RUDIMENTS_CONTAINER_H

#include <rudiments/private/containerincludes.h>

// The container class provides base class for classes which store related data.

#ifdef RUDIMENTS_NAMESPACE
namespace rudiments {
#endif

class container {
        public:
                        container();
                virtual ~container();

                // These methods control the behavior of the setter methods.
                void    copyReferences();
                        // Instructs the setter methods to copy the values
                        // passed into them rather than just keeping track
                        // of the pointers.
                void    dontCopyReferences();
                        // Instructs the setter methods to just keep track
                        // of pointers passed into them rather than copying
                        // the values.

                // These methods control the behavior when the container
                // is deleted.
                void    cascadeOnDelete();
                        // Instructs the destructor to call delete or delete[]
                        // (as appropriate) on whatever data is contained in
                        // the class.
                void    dontCascadeOnDelete();
                        // Instructs the destructor not to call delete or
                        // delete[] (as appropriate) on whatever data is
                        // contained in the class.  This is the default.

                virtual bool    save(const filedescriptor *fd);
                virtual bool    save(const unsigned char *buffer);
                                // Writes a representation of the data in the
                                // container out to the filedescriptor or
                                // buffer.
                                //
                                // Returns true on success and false on failure.
                virtual bool    load(const filedescriptor *fd);
                virtual bool    load(const unsigned char *buffer);
                                // Loads the data from filedescriptor or buffer.
                                // Replaces data currently stored in the
                                // container and implies copyReferences() and
                                // cascadeOnDelete().
                                //
                                // Returns true on success and false on failure.

        #include <rudiments/private/container.h>
};

#ifdef RUDIMENTS_NAMESPACE
}
#endif

#endif