1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2023 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker #ifndef ART_ADBCONNECTION_JDWPARGS_H_ 18*795d594fSAndroid Build Coastguard Worker #define ART_ADBCONNECTION_JDWPARGS_H_ 19*795d594fSAndroid Build Coastguard Worker 20*795d594fSAndroid Build Coastguard Worker #include <string> 21*795d594fSAndroid Build Coastguard Worker #include <unordered_map> 22*795d594fSAndroid Build Coastguard Worker #include <vector> 23*795d594fSAndroid Build Coastguard Worker 24*795d594fSAndroid Build Coastguard Worker namespace adbconnection { 25*795d594fSAndroid Build Coastguard Worker 26*795d594fSAndroid Build Coastguard Worker // A key/value store which respects order of insertion when join the values. 27*795d594fSAndroid Build Coastguard Worker // This is necessary for jdwp agent parameter. e.g.: key "transport", must be 28*795d594fSAndroid Build Coastguard Worker // issued before "address", otherwise oj-libjdpw will crash. 29*795d594fSAndroid Build Coastguard Worker // 30*795d594fSAndroid Build Coastguard Worker // If a key were to be re-inserted (a.k.a overwritten), the first insertion 31*795d594fSAndroid Build Coastguard Worker // will be used for order. 32*795d594fSAndroid Build Coastguard Worker class JdwpArgs { 33*795d594fSAndroid Build Coastguard Worker public: 34*795d594fSAndroid Build Coastguard Worker explicit JdwpArgs(const std::string& opts); 35*795d594fSAndroid Build Coastguard Worker ~JdwpArgs() = default; 36*795d594fSAndroid Build Coastguard Worker 37*795d594fSAndroid Build Coastguard Worker // Add a key / value 38*795d594fSAndroid Build Coastguard Worker void put(const std::string& key, const std::string& value); 39*795d594fSAndroid Build Coastguard Worker contains(const std::string & key)40*795d594fSAndroid Build Coastguard Worker bool contains(const std::string& key) { return store.find(key) != store.end(); } 41*795d594fSAndroid Build Coastguard Worker get(const std::string & key)42*795d594fSAndroid Build Coastguard Worker std::string& get(const std::string& key) { return store[key]; } 43*795d594fSAndroid Build Coastguard Worker 44*795d594fSAndroid Build Coastguard Worker // Concatenate all key/value into a command separated list of "key=value" entries. 45*795d594fSAndroid Build Coastguard Worker std::string join(); 46*795d594fSAndroid Build Coastguard Worker 47*795d594fSAndroid Build Coastguard Worker private: 48*795d594fSAndroid Build Coastguard Worker std::vector<std::string> keys; 49*795d594fSAndroid Build Coastguard Worker std::unordered_map<std::string, std::string> store; 50*795d594fSAndroid Build Coastguard Worker }; 51*795d594fSAndroid Build Coastguard Worker 52*795d594fSAndroid Build Coastguard Worker } // namespace adbconnection 53*795d594fSAndroid Build Coastguard Worker 54*795d594fSAndroid Build Coastguard Worker #endif // ART_ADBCONNECTION_JDWPARGS_H_ 55