/**
 * @file symbol_sort.h
 * Sorting symbols
 *
 * @remark Copyright 2002, 2003 OProfile authors
 * @remark Read the file COPYING
 *
 * @author Philippe Elie
 * @author John Levon
 */

#ifndef SYMBOL_SORT_H
#define SYMBOL_SORT_H

#include "symbol.h"

#include <vector>
#include <string>

struct sort_options {
	enum sort_order {
		// order give sort order if caller doesn't specify one
		first,
		sample = first,
		image,
		app_name,
		symbol,
		debug,
		vma,
		last
	};

	sort_options() {}

	void add_sort_option(std::string const & name);
	void add_sort_option(sort_order order);

	/**
	 * Sort the given container by the given criteria.
	 */
	void sort(symbol_collection & syms, bool reverse_sort,
	          bool long_filenames) const;

	/**
	 * Sort the given container by the given criteria.
	 */
	void sort(diff_collection & syms, bool reverse_sort,
	          bool long_filenames) const;

	std::vector<sort_order> options;
};

#endif // SYMBOL_SORT_H