1.1 --- a/src/lemon/bits/item_writer.h Sat May 21 21:04:57 2005 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,219 +0,0 @@
1.4 -/* -*- C++ -*-
1.5 - * src/lemon/bits/item_reader.h - Part of LEMON, a generic C++ optimization library
1.6 - *
1.7 - * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
1.8 - * (Egervary Research Group on Combinatorial Optimization, EGRES).
1.9 - *
1.10 - * Permission to use, modify and distribute this software is granted
1.11 - * provided that this copyright notice appears in all copies. For
1.12 - * precise terms see the accompanying LICENSE file.
1.13 - *
1.14 - * This software is provided "AS IS" with no warranty of any kind,
1.15 - * express or implied, and with no claim as to its suitability for any
1.16 - * purpose.
1.17 - *
1.18 - */
1.19 -
1.20 -/// \ingroup item_io
1.21 -/// \file
1.22 -/// \brief Item writer bits for lemon output.
1.23 -
1.24 -#ifndef LEMON_BITS_ITEM_WRITER_H
1.25 -#define LEMON_BITS_ITEM_WRITER_H
1.26 -
1.27 -#include <iostream>
1.28 -#include <string>
1.29 -
1.30 -#include <vector>
1.31 -#include <deque>
1.32 -#include <list>
1.33 -#include <set>
1.34 -
1.35 -namespace lemon {
1.36 -
1.37 - template <typename Value>
1.38 - class DefaultWriter;
1.39 -
1.40 - /// \ingroup item_io
1.41 - /// \brief Writer class for quoted strings.
1.42 - ///
1.43 - /// Writer class for quoted strings. It can process the escape
1.44 - /// sequences in the string.
1.45 - /// \author Balazs Dezso
1.46 - class QuotedStringWriter {
1.47 - public:
1.48 - typedef std::string Value;
1.49 -
1.50 - /// \brief Constructor for the writer.
1.51 - ///
1.52 - /// Constructor for the writer. If the given parameter is true
1.53 - /// the writer creates escape sequences from special characters.
1.54 - QuotedStringWriter(bool _escaped = true) : escaped(_escaped) {}
1.55 -
1.56 - /// \brief Writes a quoted string to the given stream.
1.57 - ///
1.58 - /// Writes a quoted string to the given stream.
1.59 - void write(std::ostream& os, const std::string& value) {
1.60 - os << "\"";
1.61 - if (escaped) {
1.62 - std::ostringstream ls;
1.63 - for (int i = 0; i < (int)value.size(); ++i) {
1.64 - writeEscape(ls, value[i]);
1.65 - }
1.66 - os << ls.str();
1.67 - } else {
1.68 - os << value;
1.69 - }
1.70 - os << "\"";
1.71 - }
1.72 -
1.73 - private:
1.74 -
1.75 - static void writeEscape(std::ostream& os, char c) {
1.76 - switch (c) {
1.77 - case '\\':
1.78 - os << "\\\\";
1.79 - return;
1.80 - case '\"':
1.81 - os << "\\\"";
1.82 - return;
1.83 - case '\'':
1.84 - os << "\\\'";
1.85 - return;
1.86 - case '\?':
1.87 - os << "\\\?";
1.88 - return;
1.89 - case '\a':
1.90 - os << "\\a";
1.91 - return;
1.92 - case '\b':
1.93 - os << "\\b";
1.94 - return;
1.95 - case '\f':
1.96 - os << "\\f";
1.97 - return;
1.98 - case '\r':
1.99 - os << "\\r";
1.100 - return;
1.101 - case '\n':
1.102 - os << "\\n";
1.103 - return;
1.104 - case '\t':
1.105 - os << "\\t";
1.106 - return;
1.107 - case '\v':
1.108 - os << "\\v";
1.109 - return;
1.110 - default:
1.111 - if (c < 0x20) {
1.112 - os << '\\' << std::oct << (int)c;
1.113 - } else {
1.114 - os << c;
1.115 - }
1.116 - return;
1.117 - }
1.118 - }
1.119 - private:
1.120 - bool escaped;
1.121 - };
1.122 -
1.123 - /// \ingroup item_io
1.124 - ///
1.125 - /// \brief Writer for standard containers.
1.126 - ///
1.127 - /// Writer for each iterable standard containers. The representation
1.128 - /// of the container is the values enumerated between an open and a
1.129 - /// close parse.
1.130 - ///
1.131 - /// \author Balazs Dezso
1.132 - template <
1.133 - typename _Container,
1.134 - typename _ItemWriter = DefaultWriter<typename _Container::value_type>
1.135 - >
1.136 - class IterableWriter {
1.137 - public:
1.138 - typedef _Container Value;
1.139 - typedef _ItemWriter ItemWriter;
1.140 -
1.141 - private:
1.142 -
1.143 - ItemWriter item_writer;
1.144 -
1.145 - public:
1.146 -
1.147 - /// \brief Writes the values of the container to the given stream.
1.148 - ///
1.149 - /// Writes the values of the container to the given stream.
1.150 - void write(std::ostream& os, const Value& value) const {
1.151 - typename Value::const_iterator it;
1.152 - os << '(';
1.153 - for (it = value.begin(); it != value.end(); ++it) {
1.154 - item_writer.write(os, *it);
1.155 - os << ' ';
1.156 - }
1.157 - os << ')';
1.158 - }
1.159 -
1.160 - };
1.161 -
1.162 - /// \ingroup item_io
1.163 - ///
1.164 - /// \brief The default item writer template class.
1.165 - ///
1.166 - /// The default item writer template class. If some section writer
1.167 - /// needs to write a value to the stream it will give the default way for it.
1.168 - ///
1.169 - /// \author Balazs Dezso
1.170 - template <typename _Value>
1.171 - class DefaultWriter {
1.172 - public:
1.173 - /// The value type.
1.174 - typedef _Value Value;
1.175 - /// \brief Writes the value to the given stream.
1.176 - ///
1.177 - /// Writes the value to the given stream.
1.178 - void write(std::ostream& os, const Value& value) const {
1.179 - os << value;
1.180 - }
1.181 - };
1.182 -
1.183 - template <>
1.184 - class DefaultWriter<std::string>
1.185 - : public QuotedStringWriter {};
1.186 -
1.187 - template <typename Item>
1.188 - class DefaultWriter<std::vector<Item> >
1.189 - : public IterableWriter<std::vector<Item> > {};
1.190 -
1.191 - template <typename Item>
1.192 - class DefaultWriter<std::deque<Item> >
1.193 - : public IterableWriter<std::deque<Item> > {};
1.194 -
1.195 - template <typename Item>
1.196 - class DefaultWriter<std::list<Item> >
1.197 - : public IterableWriter<std::list<Item> > {};
1.198 -
1.199 - template <typename Item>
1.200 - class DefaultWriter<std::set<Item> >
1.201 - : public IterableWriter<std::set<Item> > {};
1.202 -
1.203 - template <typename Item>
1.204 - class DefaultWriter<std::multiset<Item> >
1.205 - : public IterableWriter<std::multiset<Item> > {};
1.206 -
1.207 - /// \ingroup item_io
1.208 - /// \brief Standard WriterTraits for the section writers.
1.209 - ///
1.210 - /// Standard WriterTraits for the section writers.
1.211 - /// It defines standard writing method for all type of value.
1.212 - /// \author Balazs Dezso
1.213 - struct DefaultWriterTraits {
1.214 -
1.215 - template <typename _Value>
1.216 - struct Writer : DefaultWriter<_Value> {};
1.217 -
1.218 - };
1.219 -
1.220 -}
1.221 -
1.222 -#endif