124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- VariableList.h ------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_VariableList_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_VariableList_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolContext.h"
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/Variable.h"
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass VariableList
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Constructors and Destructors
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  VariableList(const SymbolContext &symbol_context);
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    VariableList();
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual ~VariableList();
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
3017dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton    AddVariable (const lldb::VariableSP &var_sp);
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
326bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton    bool
336bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton    AddVariableIfUnique (const lldb::VariableSP &var_sp);
346bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
366bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton    AddVariables (VariableList *variable_list);
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Clear();
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Dump(Stream *s, bool show_context) const;
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::VariableSP
4536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetVariableAtIndex(size_t idx) const;
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::VariableSP
4836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    RemoveVariableAtIndex (size_t idx);
495d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Clayton
505d81f49f0b45f8810cfaf1fa3437aa72bed0c3afGreg Clayton    lldb::VariableSP
5117dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton    FindVariable (const ConstString& name);
5217dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton
5317dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton    uint32_t
546bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton    FindVariableIndex (const lldb::VariableSP &var_sp);
556bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton
566bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton    // Returns the actual number of unique variables that were added to the
576bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton    // list. "total_matches" will get updated with the actualy number of
586bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton    // matches that were found regardless of whether they were unique or not
596bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton    // to allow for error conditions when nothing is found, versus conditions
606bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton    // where any varaibles that match "regex" were already in "var_list".
616bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton    size_t
626bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton    AppendVariablesIfUnique (const RegularExpression& regex,
636bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton                             VariableList &var_list,
646bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton                             size_t& total_matches);
65994b86bcbf78930c309ec0e38f2d980e8c338c04Enrico Granata
66994b86bcbf78930c309ec0e38f2d980e8c338c04Enrico Granata    size_t
67994b86bcbf78930c309ec0e38f2d980e8c338c04Enrico Granata    AppendVariablesWithScope (lldb::ValueType type,
68994b86bcbf78930c309ec0e38f2d980e8c338c04Enrico Granata                              VariableList &var_list,
69994b86bcbf78930c309ec0e38f2d980e8c338c04Enrico Granata                              bool if_unique = true);
706bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton
716bc0b5d69f6f5f46055be6cfea6f9a0eb11b1943Greg Clayton    uint32_t
7217dae081d7b88d24a7af6b07c10fc5981f81e2a9Greg Clayton    FindIndexForVariable (Variable* variable);
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    MemorySize() const;
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetSize() const;
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef std::vector<lldb::VariableSP> collection;
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef collection::iterator iterator;
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef collection::const_iterator const_iterator;
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    collection m_variables;
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // For VariableList only
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (VariableList);
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_VariableList_h_
96