/* -----------------------------------------------------------------------------
 * rubystdautodoc.swg
 * 
 * This file contains autodocs for standard STL functions.
 * ----------------------------------------------------------------------------- */

//
// For STL autodocumentation
//
AUTODOC(c_str, "Convert class to a String representation");
AUTODOC(begin, "Return an iterator to the beginning of the $class");
AUTODOC(end, "Return an iterator to past the end of the $class");
AUTODOC(rbegin, "Return a reverse iterator to the beginning (the end) of the $class");
AUTODOC(rend, "Return a reverse iterator to past the end (past the beginning) of the $class");
AUTODOC(length, "Size or Length of the $class");
AUTODOC(replace, "Replace all or a portion of the $class");
AUTODOC(resize, "Resize the size of the $class");
AUTODOC(capacity, "Reserved capacity of the $class");
AUTODOC(reserve, "Reserve memory in the $class for a number of elements");
AUTODOC(erase, "Delete a portion of the $class");
AUTODOC(max_size, "Maximum size of elements allowed in the $class");
AUTODOC(iterator, "Return an iterator to the $class");
AUTODOC(empty, "Check if the $class is empty or not");
AUTODOC(rfind, "Find an element in reverse usually starting from the end of the $class");
AUTODOC(assign, "Assign a new $class or portion of it");
AUTODOC(front, "Return the first element in $class");
AUTODOC(back, "Return the last element in $class");
AUTODOC(second, "Return the second element in $class");
AUTODOC(push_front, "Add an element at the beginning of the $class");
AUTODOC(push_back, "Add an element at the end of the $class");
AUTODOC(pop_front, "Remove and return element at the beginning of the $class");
AUTODOC(pop_back, "Remove and return an element at the end of the $class");
AUTODOC(clear, "Clear $class contents");
