DriveHQ Start Menu
Cloud Drive Mapping
Folder Sync
Cloud Backup
True Drop Box
FTP/SFTP Hosting
Group Account
DriveHQ Start Menu
Online File Server
My Storage
|
Manage Shares
|
Publishes
|
Drop Boxes
|
Group Account
WebDAV Drive Mapping
Cloud Drive Home
|
WebDAV Guide
|
Drive Mapping Tool
|
Drive Mapping URL
Complete Data Backup
Backup Guide
|
Online Backup Tool
|
Cloud-to-Cloud Backup
FTP, Email & Web Service
FTP Home
|
FTP Hosting FAQ
|
Email Hosting
|
EmailManager
|
Web Hosting
Help & Resources
About
|
Enterprise Service
|
Partnership
|
Comparisons
|
Support
Quick Links
Security and Privacy
Download Software
Service Manual
Use Cases
Group Account
Online Help
Blog
Contact
Cloud Surveillance
Sign Up
Login
Features
Business Features
Online File Server
FTP Hosting
Cloud Drive Mapping
Cloud File Backup
Email Backup & Hosting
Cloud File Sharing
Folder Synchronization
Group Management
True Drop Box
Full-text Search
AD Integration/SSO
Mobile Access
IP Camera & DVR Solution
More...
Personal Features
Personal Cloud Drive
Backup All Devices
Mobile APPs
Personal Web Hosting
Sub-Account (for Kids)
Home/PC/Kids Monitoring
More...
Software
DriveHQ Drive Mapping Tool
DriveHQ FileManager
DriveHQ Online Backup
DriveHQ Mobile Apps
Pricing
Business Plans & Pricing
Personal Plans & Pricing
Price Comparison with Others
Feature Comparison with Others
Install Mobile App
Sign up
Creating account...
Invalid character in username! Only 0-9, a-z, A-Z, _, -, . allowed.
Username is required!
Invalid email address!
E-mail is required!
Password is required!
Password is invalid!
Password and confirmation do not match.
Confirm password is required!
I accept
Membership Agreement
Please read the Membership Agreement and check "I accept"!
Free Quick Sign-up
Sign-up Page
Log in
Signing in...
Username or e-mail address is required!
Password is required!
Keep me logged in
Quick Login
Forgot Password
Up
Upload
Download
Share
Publish
New Folder
New File
Copy
Cut
Delete
Paste
Rate
Upgrade
Rotate
Effect
Edit
Slide
History
// Copyright (C) 2006 Tiago de Paula Peixoto
// Copyright (C) 2004 The Trustees of Indiana University. // // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // Authors: Douglas Gregor // Andrew Lumsdaine // Tiago de Paula Peixoto #ifndef BOOST_GRAPH_GRAPHML_HPP #define BOOST_GRAPH_GRAPHML_HPP #include
#include
#include
#include
#include
// for exceptions #include
#include
#include
#include
#include
#include
#include
namespace boost { ///////////////////////////////////////////////////////////////////////////// // Graph reader exceptions ///////////////////////////////////////////////////////////////////////////// struct parse_error: public graph_exception { parse_error(const std::string& error) {statement = "parse error: " + error;} virtual ~parse_error() throw() {} virtual const char* what() const throw() {return statement.c_str();} std::string statement; }; class mutate_graph { public: virtual ~mutate_graph() {} virtual bool is_directed() const = 0; virtual boost::any do_add_vertex() = 0; virtual std::pair
do_add_edge(boost::any source, boost::any target) = 0; virtual void set_graph_property(const std::string& name, const std::string& value, const std::string& value_type) = 0; virtual void set_vertex_property(const std::string& name, boost::any vertex, const std::string& value, const std::string& value_type) = 0; virtual void set_edge_property(const std::string& name, boost::any edge, const std::string& value, const std::string& value_type) = 0; }; template
class mutate_graph_impl : public mutate_graph { typedef typename graph_traits
::vertex_descriptor vertex_descriptor; typedef typename graph_traits
::edge_descriptor edge_descriptor; public: mutate_graph_impl(MutableGraph& g, dynamic_properties& dp) : m_g(g), m_dp(dp) { } bool is_directed() const { return is_convertible
::directed_category, directed_tag>::value; } virtual any do_add_vertex() { return any(add_vertex(m_g)); } virtual std::pair
do_add_edge(any source, any target) { std::pair
retval = add_edge(any_cast
(source), any_cast
(target), m_g); return std::make_pair(any(retval.first), retval.second); } virtual void set_graph_property(const std::string& name, const std::string& value, const std::string& value_type) { bool type_found = false; try { mpl::for_each
(put_property
(name, m_dp, m_g, value, value_type, m_type_names, type_found)); } catch (bad_lexical_cast) { throw parse_error("invalid value \"" + value + "\" for key " + name + " of type " + value_type); } if (!type_found) throw parse_error("unrecognized type \"" + value_type + "\" for key " + name); } virtual void set_vertex_property(const std::string& name, any vertex, const std::string& value, const std::string& value_type) { bool type_found = false; try { mpl::for_each
(put_property
(name, m_dp, any_cast
(vertex), value, value_type, m_type_names, type_found)); } catch (bad_lexical_cast) { throw parse_error("invalid value \"" + value + "\" for key " + name + " of type " + value_type); } if (!type_found) throw parse_error("unrecognized type \"" + value_type + "\" for key " + name); } virtual void set_edge_property(const std::string& name, any edge, const std::string& value, const std::string& value_type) { bool type_found = false; try { mpl::for_each
(put_property
(name, m_dp, any_cast
(edge), value, value_type, m_type_names, type_found)); } catch (bad_lexical_cast) { throw parse_error("invalid value \"" + value + "\" for key " + name + " of type " + value_type); } if (!type_found) throw parse_error("unrecognized type \"" + value_type + "\" for key " + name); } template
class put_property { public: put_property(const std::string& name, dynamic_properties& dp, const Key& key, const std::string& value, const std::string& value_type, char** type_names, bool& type_found) : m_name(name), m_dp(dp), m_key(key), m_value(value), m_value_type(value_type), m_type_names(type_names), m_type_found(type_found) {} template
void operator()(Value) { if (m_value_type == m_type_names[mpl::find
::type::pos::value]) { put(m_name, m_dp, m_key, lexical_cast
(m_value)); m_type_found = true; } } private: const std::string& m_name; dynamic_properties& m_dp; const Key& m_key; const std::string& m_value; const std::string& m_value_type; char** m_type_names; bool& m_type_found; }; protected: MutableGraph& m_g; dynamic_properties& m_dp; typedef mpl::vector
value_types; static char* m_type_names[]; }; template
char* mutate_graph_impl
::m_type_names[] = {"boolean", "int", "long", "float", "double", "string"}; void read_graphml(std::istream& in, mutate_graph& g); template
void read_graphml(std::istream& in, MutableGraph& g, dynamic_properties& dp) { mutate_graph_impl
mg(g,dp); read_graphml(in, mg); } template
class get_type_name { public: get_type_name(const std::type_info& type, char** type_names, std::string& type_name) : m_type(type), m_type_names(type_names), m_type_name(type_name) {} template
void operator()(Type) { if (typeid(Type) == m_type) m_type_name = m_type_names[mpl::find
::type::pos::value]; } private: const std::type_info &m_type; char** m_type_names; std::string &m_type_name; }; template
void write_graphml(std::ostream& out, const Graph& g, VertexIndexMap vertex_index, const dynamic_properties& dp, bool ordered_vertices=false) { typedef typename graph_traits
::directed_category directed_category; typedef typename graph_traits
::edge_descriptor edge_descriptor; typedef typename graph_traits
::vertex_descriptor vertex_descriptor; BOOST_STATIC_CONSTANT(bool, graph_is_directed = (is_convertible
::value)); out << "\n" << "
\n"; typedef mpl::vector
value_types; char* type_names[] = {"boolean", "int", "int", "int", "int", "long", "long", "long", "long", "float", "double", "double", "string"}; std::map
graph_key_ids; std::map
vertex_key_ids; std::map
edge_key_ids; int key_count = 0; // Output keys for (dynamic_properties::const_iterator i = dp.begin(); i != dp.end(); ++i) { std::string key_id = "key" + lexical_cast
(key_count++); if (i->second->key() == typeid(Graph)) vertex_key_ids[i->first] = key_id; else if (i->second->key() == typeid(vertex_descriptor)) vertex_key_ids[i->first] = key_id; else if (i->second->key() == typeid(edge_descriptor)) edge_key_ids[i->first] = key_id; else continue; std::string type_name = "string"; mpl::for_each
(get_type_name
(i->second->value(), type_names, type_name)); out << "
second->key() == typeid(Graph) ? "graph" : (i->second->key() == typeid(vertex_descriptor) ? "node" : "edge")) << "\"" << " attr.name=\"" << i->first << "\"" << " attr.type=\"" << type_name << "\"" << " />\n"; } out << "
\n"; // Output graph data for (dynamic_properties::const_iterator i = dp.begin(); i != dp.end(); ++i) { if (i->second->key() == typeid(Graph)) { out << "
first] << "\">" << i->second->get_string(g) << "
\n"; } } typedef typename graph_traits
::vertex_iterator vertex_iterator; vertex_iterator v, v_end; for (tie(v, v_end) = vertices(g); v != v_end; ++v) { out << "
\n"; // Output data for (dynamic_properties::const_iterator i = dp.begin(); i != dp.end(); ++i) { if (i->second->key() == typeid(vertex_descriptor)) { out << "
first] << "\">" << i->second->get_string(*v) << "
\n"; } } out << "
\n"; } typedef typename graph_traits
::edge_iterator edge_iterator; edge_iterator e, e_end; typename graph_traits
::edges_size_type edge_count = 0; for (tie(e, e_end) = edges(g); e != e_end; ++e) { out << "
\n"; // Output data for (dynamic_properties::const_iterator i = dp.begin(); i != dp.end(); ++i) { if (i->second->key() == typeid(edge_descriptor)) { out << "
first] << "\">" << i->second->get_string(*e) << "
\n"; } } out << "
\n"; } out << "
\n" << "
\n"; } template
void write_graphml(std::ostream& out, const Graph& g, const dynamic_properties& dp, bool ordered_vertices=false) { write_graphml(out, g, get(vertex_index, g), dp, ordered_vertices); } } // boost namespace #endif // BOOST_GRAPH_GRAPHML_HPP
graphml.hpp
Page URL
File URL
Prev
40/95
Next
Download
( 12 KB )
Note: The DriveHQ service banners will NOT be displayed if the file owner is a paid member.
Comments
Total ratings:
0
Average rating:
Not Rated
Would you like to comment?
Join DriveHQ
for a free account, or
Logon
if you are already a member.