brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 5fafabe Raw
125 lines · cpp
1//===-- SBEnvironment.cpp -------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "lldb/API/SBEnvironment.h"10#include "Utils.h"11#include "lldb/API/SBStringList.h"12#include "lldb/Utility/ConstString.h"13#include "lldb/Utility/Environment.h"14#include "lldb/Utility/Instrumentation.h"15 16using namespace lldb;17using namespace lldb_private;18 19SBEnvironment::SBEnvironment() : m_opaque_up(new Environment()) {20  LLDB_INSTRUMENT_VA(this);21}22 23SBEnvironment::SBEnvironment(const SBEnvironment &rhs)24    : m_opaque_up(clone(rhs.m_opaque_up)) {25  LLDB_INSTRUMENT_VA(this, rhs);26}27 28SBEnvironment::SBEnvironment(Environment rhs)29    : m_opaque_up(new Environment(std::move(rhs))) {}30 31SBEnvironment::~SBEnvironment() = default;32 33const SBEnvironment &SBEnvironment::operator=(const SBEnvironment &rhs) {34  LLDB_INSTRUMENT_VA(this, rhs);35 36  if (this != &rhs)37    m_opaque_up = clone(rhs.m_opaque_up);38  return *this;39}40 41size_t SBEnvironment::GetNumValues() {42  LLDB_INSTRUMENT_VA(this);43 44  return m_opaque_up->size();45}46 47const char *SBEnvironment::Get(const char *name) {48  LLDB_INSTRUMENT_VA(this, name);49 50  auto entry = m_opaque_up->find(name);51  if (entry == m_opaque_up->end()) {52    return nullptr;53  }54  return ConstString(entry->second).AsCString("");55}56 57const char *SBEnvironment::GetNameAtIndex(size_t index) {58  LLDB_INSTRUMENT_VA(this, index);59 60  if (index >= GetNumValues())61    return nullptr;62  return ConstString(std::next(m_opaque_up->begin(), index)->first())63      .AsCString("");64}65 66const char *SBEnvironment::GetValueAtIndex(size_t index) {67  LLDB_INSTRUMENT_VA(this, index);68 69  if (index >= GetNumValues())70    return nullptr;71  return ConstString(std::next(m_opaque_up->begin(), index)->second)72      .AsCString("");73}74 75bool SBEnvironment::Set(const char *name, const char *value, bool overwrite) {76  LLDB_INSTRUMENT_VA(this, name, value, overwrite);77 78  if (overwrite) {79    m_opaque_up->insert_or_assign(name, std::string(value));80    return true;81  }82  return m_opaque_up->try_emplace(name, std::string(value)).second;83}84 85bool SBEnvironment::Unset(const char *name) {86  LLDB_INSTRUMENT_VA(this, name);87 88  return m_opaque_up->erase(name);89}90 91SBStringList SBEnvironment::GetEntries() {92  LLDB_INSTRUMENT_VA(this);93 94  SBStringList entries;95  for (const auto &KV : *m_opaque_up) {96    entries.AppendString(Environment::compose(KV).c_str());97  }98  return entries;99}100 101void SBEnvironment::PutEntry(const char *name_and_value) {102  LLDB_INSTRUMENT_VA(this, name_and_value);103 104  auto split = llvm::StringRef(name_and_value).split('=');105  m_opaque_up->insert_or_assign(split.first.str(), split.second.str());106}107 108void SBEnvironment::SetEntries(const SBStringList &entries, bool append) {109  LLDB_INSTRUMENT_VA(this, entries, append);110 111  if (!append)112    m_opaque_up->clear();113  for (size_t i = 0; i < entries.GetSize(); i++) {114    PutEntry(entries.GetStringAtIndex(i));115  }116}117 118void SBEnvironment::Clear() {119  LLDB_INSTRUMENT_VA(this);120 121  m_opaque_up->clear();122}123 124Environment &SBEnvironment::ref() const { return *m_opaque_up; }125