/* Autogenerated with DRAKON Editor 1.27 */
#ifndef STRINGLIST_H23587
#define STRINGLIST_H23587

// This is the header of the H-file.
// Your code goes here. For example:

#include <string>
#include <vector>

// Compares two std::strings.
class IStringComparer
{
public:
	// Returns -1 if left < right.
	// Returns 0 if left == right.
	// Returns 1 if left > right.
	virtual int Compare(
		const std::string* left,
		const std::string* right
	) const = 0;

	virtual ~IStringComparer() {}
};

class StringList;







void Fibonacci(
    int n,
    std::vector<int>* output
);

void QuickSort(
    StringList* collection,
    int begin,
    int end,
    IStringComparer* comparer
);

void UnexpectedBranch(
    int switchValue
);

// This is the start of the class declaration.
// There can be only one class in this section.
// Diagrams marked as 'method', 'ctr' or 'dtr'
// will be members of this class.



// A list of std::strings.
// Holds ownership to the stored objects.
class StringList
{
	typedef std::vector<std::string*> List;

	// Ownership.
	List _elements;

// No need to finish the class. The closing curly bracket
// will be inserted automatically.


private:
    // non-copyable
    StringList(const StringList& other) {}
    void operator=(const StringList& other) {}
public:
    explicit StringList();

public:
    virtual  ~StringList();

public:
    void Add(
        std::string* element
    );

    void AddFromCString(
        const char* text
    );

    int Count() const;

    std::string* Get(
        int index
    );

    void Swap(
        int index1,
        int index2
    );

};
// H-file footer. Your code goes here.




#endif

