    // Copyright (C) 2003  Davis E. King (davis@dlib.net)
    // License: Boost Software License   See LICENSE.txt for the full license.
    #undef DLIB_SEQUENCE_SORt_ABSTRACT_
    #ifdef DLIB_SEQUENCE_SORt_ABSTRACT_

    #include "sequence_kernel_abstract.h"

    namespace dlib
    {

        template <
            typename seq_base
            >
        class sequence_sort : public seq_base
        {

            /*!
                REQUIREMENTS ON T
                    T must implement operator< for its type

                REQUIREMENTS ON seq_base
                    must be an implementation of sequence/sequence_kernel_abstract.h

                POINTERS AND REFERENCES TO INTERNAL DATA
                    sort() may invalidate pointers and references to data members.

                WHAT THIS EXTENSION DOES FOR sequence
                    this gives a sequence the ability to sort its contents by calling sort()
            !*/

        public:

            void sort (
            );
            /*!
                ensures
                    - for all elements in #*this the ith element is <= the i+1 element
                    - #at_start() == true
                throws
                    - std::bad_alloc or any exception thrown by T's constructor
                        data may be lost if sort() throws
            !*/

        };

        template <
            typename seq_base
            >
        inline void swap (
            sequence_sort<seq_base>& a,
            sequence_sort<seq_base>& b
        ) { a.swap(b); }
        /*!
            provides a global swap function
        !*/

    }

    #endif // DLIB_SEQUENCE_SORt_ABSTRACT_