00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef SG_WRITE_H
00010 #define SG_WRITE_H
00011
00012 #include <iomanip>
00013 #include <iosfwd>
00014 #include <sstream>
00015 #include <string>
00016 #include <vector>
00017 #include "SgBoardColor.h"
00018 #include "SgPoint.h"
00019 #include "SgSList.h"
00020 #include "SgVector.h"
00021
00022
00023
00024
00025
00026
00027 class SgWriteLabel
00028 {
00029 public:
00030 SgWriteLabel(const std::string& label)
00031 : m_label(label)
00032 { }
00033
00034 friend std::ostream& operator<<(std::ostream& out,
00035 const SgWriteLabel& w);
00036
00037 private:
00038 std::string m_label;
00039 };
00040
00041
00042
00043
00044
00045
00046 class SgWritePointList
00047 {
00048 public:
00049 SgWritePointList(const std::vector<SgPoint>& pointList,
00050 std::string label = "",
00051 bool writeSize = true);
00052
00053 SgWritePointList(const SgVector<SgPoint>& pointList,
00054 std::string label = "",
00055 bool writeSize = true);
00056
00057 std::ostream& Write(std::ostream& out) const;
00058
00059 private:
00060 bool m_writeSize;
00061
00062 std::vector<SgPoint> m_pointList;
00063
00064 std::string m_label;
00065 };
00066
00067
00068 std::ostream& operator<<(std::ostream& out, const SgWritePointList& write);
00069
00070
00071
00072
00073 template<int SIZE>
00074 class SgWriteSPointList
00075 {
00076 public:
00077 SgWriteSPointList(const SgSList<SgPoint,SIZE>& list,
00078 std::string label = "", bool writeSize = true);
00079
00080 std::ostream& Write(std::ostream& out) const;
00081
00082 private:
00083 bool m_writeSize;
00084
00085 const SgSList<SgPoint,SIZE>& m_list;
00086
00087 std::string m_label;
00088 };
00089
00090
00091 template<int SIZE>
00092 std::ostream& operator<<(std::ostream& out,
00093 const SgWriteSPointList<SIZE>& write);
00094
00095 template<int SIZE>
00096 SgWriteSPointList<SIZE>::SgWriteSPointList(const SgSList<SgPoint,SIZE>& list,
00097 std::string label, bool writeSize)
00098 : m_writeSize(writeSize),
00099 m_list(list),
00100 m_label(label)
00101 {
00102 }
00103
00104 template<int SIZE>
00105 std::ostream& SgWriteSPointList<SIZE>::Write(std::ostream& out) const
00106 {
00107 std::vector<SgPoint> list;
00108 for (typename SgSList<SgPoint,SIZE>::Iterator it(m_list); it; ++it)
00109 list.push_back(*it);
00110 return (out << SgWritePointList(list, m_label, m_writeSize));
00111 }
00112
00113 template<int SIZE>
00114 std::ostream& operator<<(std::ostream& out,
00115 const SgWriteSPointList<SIZE>& write)
00116 {
00117 return write.Write(out);
00118 }
00119
00120
00121
00122
00123
00124
00125 class SgWriteMove
00126 {
00127 public:
00128 SgWriteMove(SgPoint point, SgBlackWhite color)
00129 : m_point(point),
00130 m_color(color)
00131 { }
00132
00133 private:
00134 friend std::ostream& operator<<(std::ostream& out, const SgWriteMove &w);
00135
00136 SgPoint m_point;
00137
00138 SgBlackWhite m_color;
00139 };
00140
00141
00142
00143
00144 class SgWriteLine
00145 {
00146 public:
00147 SgWriteLine()
00148 { }
00149
00150 friend std::ostream& operator<<(std::ostream& out,
00151 const SgWriteLine &w);
00152 };
00153
00154
00155
00156
00157 class SgWriteBoolean
00158 {
00159 public:
00160 explicit SgWriteBoolean(bool value) : m_value(value) {}
00161
00162 private:
00163 friend std::ostream& operator<<(std::ostream& out,
00164 const SgWriteBoolean &w);
00165 bool m_value;
00166 };
00167
00168
00169
00170
00171 class SgWriteBoolAsInt
00172 {
00173 public:
00174 SgWriteBoolAsInt(bool value);
00175
00176 std::ostream& Write(std::ostream& out) const;
00177
00178 private:
00179 bool m_value;
00180 };
00181
00182
00183 std::ostream& operator<<(std::ostream& out, const SgWriteBoolAsInt& write);
00184
00185
00186
00187 #endif // SG_WRITE_H