diff options
Diffstat (limited to 'tools/lldb-perf/lib/Results.h')
-rw-r--r-- | tools/lldb-perf/lib/Results.h | 312 |
1 files changed, 312 insertions, 0 deletions
diff --git a/tools/lldb-perf/lib/Results.h b/tools/lldb-perf/lib/Results.h new file mode 100644 index 000000000000..388077e7f581 --- /dev/null +++ b/tools/lldb-perf/lib/Results.h @@ -0,0 +1,312 @@ +//===-- Results.h -----------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef __PerfTestDriver_Results_h__ +#define __PerfTestDriver_Results_h__ + +#include "lldb/lldb-forward.h" +#include <map> +#include <string> +#include <vector> + +namespace lldb_perf { + +class Results +{ +public: + class Array; + class Dictionary; + class Double; + class String; + class Unsigned; + + class Result + { + public: + enum class Type + { + Invalid, + Array, + Dictionary, + Double, + String, + Unsigned + }; + + Result (Type type, const char *name, const char *description) : + m_name (), + m_description(), + m_type (type) + { + if (name && name[0]) + m_name = name; + if (description && description[0]) + m_description = description; + } + + virtual + ~Result() + { + } + + virtual void + Write (Results &results) = 0; + + Array * + GetAsArray () + { + if (m_type == Type::Array) + return (Array *)this; + return NULL; + } + Dictionary * + GetAsDictionary () + { + if (m_type == Type::Dictionary) + return (Dictionary *)this; + return NULL; + } + Double * + GetAsDouble () + { + if (m_type == Type::Double) + return (Double *)this; + return NULL; + } + + String * + GetAsString () + { + if (m_type == Type::String) + return (String *)this; + return NULL; + } + Unsigned * + GetAsUnsigned () + { + if (m_type == Type::Unsigned) + return (Unsigned *)this; + return NULL; + } + + const char * + GetName() const + { + if (m_name.empty()) + return NULL; + return m_name.c_str(); + } + + const char * + GetDescription() const + { + if (m_description.empty()) + return NULL; + return m_description.c_str(); + } + + Type + GetType() const + { + return m_type; + } + + protected: + std::string m_name; + std::string m_description; + Type m_type; + }; + + typedef std::shared_ptr<Result> ResultSP; + + class Array : public Result + { + public: + Array (const char *name, const char *description) : + Result (Type::Array, name, description) + { + } + + virtual + ~Array() + { + } + + ResultSP + Append (const ResultSP &result_sp); + + void + ForEach (const std::function <bool (const ResultSP &)> &callback); + + virtual void + Write (Results &results) + { + } + protected: + typedef std::vector<ResultSP> collection; + collection m_array; + }; + + class Dictionary : public Result + { + public: + Dictionary () : + Result (Type::Dictionary, NULL, NULL) + { + } + + Dictionary (const char *name, const char *description) : + Result (Type::Dictionary, name, description) + { + } + + virtual + ~Dictionary() + { + } + + virtual void + Write (Results &results) + { + } + + void + ForEach (const std::function <bool (const std::string &, const ResultSP &)> &callback); + + ResultSP + Add (const char *name, const char *description, const ResultSP &result_sp); + + ResultSP + AddDouble (const char *name, const char *descriptiorn, double value); + + ResultSP + AddUnsigned (const char *name, const char *description, uint64_t value); + + ResultSP + AddString (const char *name, const char *description, const char *value); + + protected: + + typedef std::map<std::string, ResultSP> collection; + collection m_dictionary; + }; + + class String : public Result + { + public: + String (const char *name, const char *description, const char *value) : + Result (Type::String, name, description), + m_string () + { + if (value && value[0]) + m_string = value; + } + + virtual + ~String() + { + } + + virtual void + Write (Results &results) + { + } + + const char * + GetValue () const + { + return m_string.empty() ? NULL : m_string.c_str(); + } + + protected: + std::string m_string; + }; + + class Double : public Result + { + public: + Double (const char *name, const char *description, double value) : + Result (Type::Double, name, description), + m_double (value) + { + } + + virtual + ~Double() + { + } + + virtual void + Write (Results &results) + { + } + + double + GetValue () const + { + return m_double; + } + + protected: + double m_double; + }; + + class Unsigned : public Result + { + public: + Unsigned (const char *name, const char *description, uint64_t value) : + Result (Type::Unsigned, name, description), + m_unsigned (value) + { + } + + virtual + ~Unsigned() + { + } + + virtual void + Write (Results &results) + { + } + + uint64_t + GetValue () const + { + return m_unsigned; + } + + protected: + uint64_t m_unsigned; + }; + + Results () : + m_results () + { + } + + ~Results() + { + } + + Dictionary & + GetDictionary () + { + return m_results; + } + + void + Write (const char *path); + +protected: + Dictionary m_results; +}; + +} // namespace lldb_perf +#endif // #ifndef __PerfTestDriver_Results_h__ |