// Copyright (C) 2005 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 2, or (at your option) // any later version. // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING. If not, write to the Free // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, // USA. // As a special exception, you may use this file as part of a free software // library without restriction. Specifically, if other files instantiate // templates or use macros or inline functions from this file, or you compile // this file and link it with other files to produce an executable, this // file does not by itself cause the resulting executable to be covered by // the GNU General Public License. This exception does not however // invalidate any other reasons why the executable file might be covered by // the GNU General Public License. #include #include #include #include #include #include // Ah, we wish it wasn't so... bool first_container = false; extern const char* filename; typedef std::string::size_type (*callback_type) (std::string&); template void write_viz_container(callback_type find_container, const char* filename) { typedef std::string string; // Create title. { const char ws(' '); std::ostringstream title; std::string titlename(filename); std::string::size_type n = titlename.find('.'); if (n != string::npos) titlename = std::string(titlename.begin(), titlename.begin() + n); title << titlename; title << ws; title << Iter; title << ws; #if 0 title << "thread<"; std::boolalpha(title); title << Thread; title << '>'; #endif titlename += ".title"; std::ofstream titlefile(titlename.c_str()); if (!titlefile.good()) throw std::runtime_error("write_viz_data cannot open titlename"); titlefile << title.str() << std::endl; } // Create compressed type name. Container obj; int status; std::string type(abi::__cxa_demangle(typeid(obj).name(), 0, 0, &status)); // Extract fully-qualified typename. // Assumes "set" or "map" are uniquely determinate. string::iterator beg = type.begin(); string::iterator end; string::size_type n = (*find_container)(type); // Find start of fully-qualified name. // Assume map, find end. string::size_type nend = type.find('<', n); if (nend != string::npos) end = type.begin() + nend; string compressed_type; compressed_type += '"'; compressed_type += string(beg, end); compressed_type += '<'; #if 0 typename Container::key_type v; compressed_type += typeid(v).name(); #else compressed_type += "int"; #endif compressed_type += ", A>"; // XXX if (Thread == true) compressed_type += " thread"; compressed_type += '"'; std::ofstream file(filename, std::ios_base::app); if (!file.good()) throw std::runtime_error("write_viz_data cannot open filename"); file << compressed_type; first_container = false; } void write_viz_data(__gnu_test::time_counter& time, const char* filename) { std::ofstream file(filename, std::ios_base::app); if (!file.good()) throw std::runtime_error("write_viz_data cannot open filename"); // Print out score in appropriate column. const char tab('\t'); int score = time.real_time(); file << tab << score; } void write_viz_endl(const char* filename) { std::ofstream file(filename, std::ios_base::app); if (!file.good()) throw std::runtime_error("write_viz_endl cannot open filename"); file << std::endl; } #if 0 // cons write_viz_container(&sequence_find_container, filename); #endif #if 0 // dtor write_viz_endl(filename) #endif