19de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton//===-- Results.h -----------------------------------------------*- C++ -*-===//
29de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton//
39de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton//                     The LLVM Compiler Infrastructure
49de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton//
59de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton// This file is distributed under the University of Illinois Open Source
69de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton// License. See LICENSE.TXT for details.
79de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton//
89de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton//===----------------------------------------------------------------------===//
99de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
109de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton#ifndef __PerfTestDriver_Results_h__
119de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton#define __PerfTestDriver_Results_h__
129de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
130b10ef61ea60e24fe7736cd98bd5fb45efe9c816Greg Clayton#include "lldb/lldb-forward.h"
149de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton#include <map>
159de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton#include <string>
169de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton#include <vector>
179de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
189de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytonnamespace lldb_perf {
199de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
209de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytonclass Results
219de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton{
229de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytonpublic:
239de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    class Array;
249de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    class Dictionary;
259de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    class Double;
269de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    class String;
279de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    class Unsigned;
289de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
299de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    class Result
309de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    {
319de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    public:
329de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        enum class Type
339de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
349de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            Invalid,
359de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            Array,
369de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            Dictionary,
379de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            Double,
389de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            String,
399de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            Unsigned
409de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        };
419de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
429de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Result (Type type, const char *name, const char *description) :
439de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            m_name (),
449de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            m_description(),
459de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            m_type (type)
469de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
479de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            if (name && name[0])
489de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton                m_name = name;
499de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            if (description && description[0])
509de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton                m_description = description;
519de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
529de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
539de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        virtual
549de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        ~Result()
559de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
569de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
579de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
589de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        virtual void
599de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Write (Results &results) = 0;
609de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
619de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Array *
629de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        GetAsArray ()
639de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
649de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            if (m_type == Type::Array)
659de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton                return (Array *)this;
669de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return NULL;
679de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
689de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Dictionary *
699de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        GetAsDictionary ()
709de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
719de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            if (m_type == Type::Dictionary)
729de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton                return (Dictionary *)this;
739de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return NULL;
749de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
759de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Double *
769de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        GetAsDouble ()
779de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
789de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            if (m_type == Type::Double)
799de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton                return (Double *)this;
809de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return NULL;
819de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
829de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
839de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        String *
849de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        GetAsString ()
859de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
869de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            if (m_type == Type::String)
879de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton                return (String *)this;
889de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return NULL;
899de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
909de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Unsigned *
919de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        GetAsUnsigned ()
929de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
939de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            if (m_type == Type::Unsigned)
949de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton                return (Unsigned *)this;
959de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return NULL;
969de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
979de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
989de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        const char *
999de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        GetName() const
1009de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
1019de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            if (m_name.empty())
1029de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton                return NULL;
1039de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return m_name.c_str();
1049de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
1059de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1069de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        const char *
1079de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        GetDescription() const
1089de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
1099de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            if (m_description.empty())
1109de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton                return NULL;
1119de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return m_description.c_str();
1129de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
1139de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1149de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Type
1159de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        GetType() const
1169de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
1179de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return m_type;
1189de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
1199de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1209de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    protected:
1219de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        std::string m_name;
1229de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        std::string m_description;
1239de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Type m_type;
1249de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    };
1259de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
126102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    typedef std::shared_ptr<Result> ResultSP;
1279de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1289de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    class Array : public Result
1299de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    {
1309de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    public:
1319de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Array (const char *name, const char *description) :
1329de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            Result (Type::Array, name, description)
1339de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
1349de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
1359de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1369de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        virtual
1379de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        ~Array()
1389de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
1399de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
1409de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
141ec87e5c098f1ce1c9182d1c5438e0beca0996597Enrico Granata        ResultSP
1429de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Append (const ResultSP &result_sp);
1439de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1449de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        void
1459de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        ForEach (const std::function <bool (const ResultSP &)> &callback);
1469de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1479de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        virtual void
1489de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Write (Results &results)
1499de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
1509de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
1519de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    protected:
1529de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        typedef std::vector<ResultSP> collection;
1539de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        collection m_array;
1549de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    };
1559de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1569de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    class Dictionary : public Result
1579de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    {
1589de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    public:
1599de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Dictionary () :
1609de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            Result (Type::Dictionary, NULL, NULL)
1619de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
1629de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
1639de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1649de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Dictionary (const char *name, const char *description) :
1659de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            Result (Type::Dictionary, name, description)
1669de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
1679de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
1689de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1699de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        virtual
1709de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        ~Dictionary()
1719de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
1729de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
1739de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1749de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        virtual void
1759de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Write (Results &results)
1769de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
1779de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
1789de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1799de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        void
1809de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        ForEach (const std::function <bool (const std::string &, const ResultSP &)> &callback);
1819de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
182ec87e5c098f1ce1c9182d1c5438e0beca0996597Enrico Granata        ResultSP
1839de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Add (const char *name, const char *description, const ResultSP &result_sp);
1849de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
185ec87e5c098f1ce1c9182d1c5438e0beca0996597Enrico Granata        ResultSP
1869de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        AddDouble (const char *name, const char *descriptiorn, double value);
1879de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
188ec87e5c098f1ce1c9182d1c5438e0beca0996597Enrico Granata        ResultSP
1899de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        AddUnsigned (const char *name, const char *description, uint64_t value);
1909de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
191ec87e5c098f1ce1c9182d1c5438e0beca0996597Enrico Granata        ResultSP
1929de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        AddString (const char *name, const char *description, const char *value);
1939de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1949de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    protected:
1959de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1969de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        typedef std::map<std::string, ResultSP> collection;
1979de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        collection m_dictionary;
1989de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    };
1999de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2009de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    class String : public Result
2019de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    {
2029de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    public:
2039de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        String (const char *name, const char *description, const char *value) :
2049de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            Result (Type::String, name, description),
2059de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            m_string ()
2069de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
2079de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            if (value && value[0])
2089de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton                m_string = value;
2099de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
2109de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2119de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        virtual
2129de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        ~String()
2139de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
2149de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
2159de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2169de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        virtual void
2179de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Write (Results &results)
2189de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
2199de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
2209de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2219de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        const char *
2229de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        GetValue () const
2239de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
2249de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return m_string.empty() ? NULL : m_string.c_str();
2259de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
2269de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2279de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    protected:
2289de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        std::string m_string;
2299de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    };
2309de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2319de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    class Double : public Result
2329de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    {
2339de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    public:
2349de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Double (const char *name, const char *description, double value) :
2359de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            Result (Type::Double, name, description),
2369de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            m_double (value)
2379de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
2389de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
2399de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2409de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        virtual
2419de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        ~Double()
2429de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
2439de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
2449de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2459de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        virtual void
2469de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Write (Results &results)
2479de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
2489de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
2499de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2509de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        double
2519de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        GetValue () const
2529de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
2539de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return m_double;
2549de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
2559de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2569de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    protected:
2579de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        double m_double;
2589de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    };
2599de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2609de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    class Unsigned : public Result
2619de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    {
2629de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    public:
2639de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Unsigned (const char *name, const char *description, uint64_t value) :
2649de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            Result (Type::Unsigned, name, description),
2659de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            m_unsigned (value)
2669de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
2679de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
2689de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2699de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        virtual
2709de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        ~Unsigned()
2719de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
2729de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
2739de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2749de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        virtual void
2759de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        Write (Results &results)
2769de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
2779de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
2789de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2799de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        uint64_t
2809de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        GetValue () const
2819de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        {
2829de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return m_unsigned;
2839de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        }
2849de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2859de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    protected:
2869de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        uint64_t m_unsigned;
2879de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    };
2889de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2899de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    Results () :
2909de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        m_results ()
2919de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    {
2929de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    }
2939de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2949de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    ~Results()
2959de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    {
2969de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    }
2979de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
2989de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    Dictionary &
2999de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    GetDictionary ()
3009de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    {
3019de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        return m_results;
3029de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    }
3039de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
3049de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    void
3059de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    Write (const char *path);
3069de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
3079de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytonprotected:
3089de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    Dictionary m_results;
3099de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton};
3109de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
3119de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton} // namespace lldb_perf
3129de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton#endif // #ifndef __PerfTestDriver_Results_h__
313