1c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers/* 2c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * Copyright (C) 2011 The Android Open Source Project 3c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * 4c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * Licensed under the Apache License, Version 2.0 (the "License"); 5c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * you may not use this file except in compliance with the License. 6c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * You may obtain a copy of the License at 7c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * 8c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * http://www.apache.org/licenses/LICENSE-2.0 9c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * 10c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * Unless required by applicable law or agreed to in writing, software 11c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * distributed under the License is distributed on an "AS IS" BASIS, 12c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * See the License for the specific language governing permissions and 14c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers * limitations under the License. 15c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers */ 16c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers 17c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers#ifndef ART_RUNTIME_BASE_DUMPABLE_H_ 18c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers#define ART_RUNTIME_BASE_DUMPABLE_H_ 19c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers 200e92f4fa0079dad6d1df69abd13054a9885cba98Andreas Gampe#include <ostream> 210e92f4fa0079dad6d1df69abd13054a9885cba98Andreas Gampe 22c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers#include "base/macros.h" 23c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers 24c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogersnamespace art { 25c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers 26c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers// A convenience to allow any class with a "Dump(std::ostream& os)" member function 27c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers// but without an operator<< to be used as if it had an operator<<. Use like this: 28c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers// 29c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers// os << Dumpable<MyType>(my_type_instance); 30c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers// 31c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogerstemplate<typename T> 32c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogersclass Dumpable FINAL { 33c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers public: 34c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers explicit Dumpable(const T& value) : value_(value) { 35c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers } 36c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers 37c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers void Dump(std::ostream& os) const { 38c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers value_.Dump(os); 39c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers } 40c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers 41c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers private: 42c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers const T& value_; 43c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers 44c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers DISALLOW_COPY_AND_ASSIGN(Dumpable); 45c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers}; 46c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers 47c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogerstemplate<typename T> 48c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogersstd::ostream& operator<<(std::ostream& os, const Dumpable<T>& rhs) { 49c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers rhs.Dump(os); 50c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers return os; 51c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers} 52c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers 53c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers} // namespace art 54c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers 55c7dd295a4e0cc1d15c0c96088e55a85389bade74Ian Rogers#endif // ART_RUNTIME_BASE_DUMPABLE_H_ 56