2014-01-21 23:32:20 -08:00
|
|
|
#ifndef tree_sitter_stream_methods_h
|
|
|
|
|
#define tree_sitter_stream_methods_h
|
|
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#include <set>
|
2014-03-26 21:02:53 -07:00
|
|
|
#include <unordered_map>
|
2014-05-06 12:54:04 -07:00
|
|
|
#include <map>
|
2014-03-26 21:02:53 -07:00
|
|
|
#include <unordered_set>
|
2014-01-26 16:38:41 -08:00
|
|
|
#include <vector>
|
2014-01-21 23:32:20 -08:00
|
|
|
|
|
|
|
|
using std::cout;
|
|
|
|
|
|
|
|
|
|
namespace std {
|
2014-03-09 19:49:35 -07:00
|
|
|
|
2014-08-06 13:00:35 -07:00
|
|
|
template<typename T>
|
|
|
|
|
inline std::ostream& operator<<(std::ostream &stream, const std::vector<T> &vector) {
|
2014-08-23 13:52:00 -07:00
|
|
|
stream << std::string("(vector: ");
|
2014-08-06 13:00:35 -07:00
|
|
|
bool started = false;
|
|
|
|
|
for (auto item : vector) {
|
|
|
|
|
if (started) stream << std::string(", ");
|
|
|
|
|
stream << item;
|
|
|
|
|
started = true;
|
|
|
|
|
}
|
2014-08-23 13:52:00 -07:00
|
|
|
return stream << ")";
|
2014-08-06 13:00:35 -07:00
|
|
|
}
|
2014-03-09 19:49:35 -07:00
|
|
|
|
2014-08-06 13:00:35 -07:00
|
|
|
template<typename T>
|
|
|
|
|
inline std::ostream& operator<<(std::ostream &stream, const std::set<T> &set) {
|
2014-08-23 13:52:00 -07:00
|
|
|
stream << std::string("(set: ");
|
2014-08-06 13:00:35 -07:00
|
|
|
bool started = false;
|
|
|
|
|
for (auto item : set) {
|
|
|
|
|
if (started) stream << std::string(", ");
|
|
|
|
|
stream << item;
|
|
|
|
|
started = true;
|
|
|
|
|
}
|
2014-08-23 13:52:00 -07:00
|
|
|
return stream << ")";
|
2014-08-06 13:00:35 -07:00
|
|
|
}
|
2014-03-09 19:49:35 -07:00
|
|
|
|
2014-08-06 13:00:35 -07:00
|
|
|
template<typename T>
|
|
|
|
|
inline std::ostream& operator<<(std::ostream &stream, const std::unordered_set<T> &set) {
|
2014-08-23 13:52:00 -07:00
|
|
|
stream << std::string("(set: ");
|
2014-08-06 13:00:35 -07:00
|
|
|
bool started = false;
|
|
|
|
|
for (auto item : set) {
|
|
|
|
|
if (started) stream << std::string(", ");
|
|
|
|
|
stream << item;
|
|
|
|
|
started = true;
|
|
|
|
|
}
|
2014-08-23 13:52:00 -07:00
|
|
|
return stream << ")";
|
2014-08-06 13:00:35 -07:00
|
|
|
}
|
2014-03-28 13:51:32 -07:00
|
|
|
|
2014-08-06 13:00:35 -07:00
|
|
|
template<typename TKey, typename TValue>
|
|
|
|
|
inline std::ostream& operator<<(std::ostream &stream, const std::map<TKey, TValue> &map) {
|
2014-08-23 13:52:00 -07:00
|
|
|
stream << std::string("(map: ");
|
2014-08-06 13:00:35 -07:00
|
|
|
bool started = false;
|
|
|
|
|
for (auto pair : map) {
|
|
|
|
|
if (started) stream << std::string(", ");
|
|
|
|
|
stream << pair.first;
|
|
|
|
|
stream << std::string(" => ");
|
|
|
|
|
stream << pair.second;
|
|
|
|
|
started = true;
|
|
|
|
|
}
|
2014-08-23 13:52:00 -07:00
|
|
|
return stream << ")";
|
2014-08-06 13:00:35 -07:00
|
|
|
}
|
2014-03-28 13:51:32 -07:00
|
|
|
|
2014-08-06 13:00:35 -07:00
|
|
|
template<typename TKey, typename TValue>
|
|
|
|
|
inline std::ostream& operator<<(std::ostream &stream, const std::unordered_map<TKey, TValue> &map) {
|
2014-08-23 13:52:00 -07:00
|
|
|
stream << std::string("(map: ");
|
2014-08-06 13:00:35 -07:00
|
|
|
bool started = false;
|
|
|
|
|
for (auto pair : map) {
|
|
|
|
|
if (started) stream << std::string(", ");
|
|
|
|
|
stream << pair.first;
|
|
|
|
|
stream << std::string(" => ");
|
|
|
|
|
stream << pair.second;
|
|
|
|
|
started = true;
|
|
|
|
|
}
|
2014-08-23 13:52:00 -07:00
|
|
|
return stream << ")";
|
2014-08-06 13:00:35 -07:00
|
|
|
}
|
2014-06-24 21:54:38 -07:00
|
|
|
|
2014-08-06 13:00:35 -07:00
|
|
|
template<typename T1, typename T2>
|
|
|
|
|
inline std::ostream& operator<<(std::ostream &stream, const std::pair<T1, T2> &pair) {
|
|
|
|
|
return stream << "{" << pair.first << ", " << pair.second << "}";
|
2014-01-21 23:32:20 -08:00
|
|
|
}
|
|
|
|
|
|
2014-08-06 13:00:35 -07:00
|
|
|
} // namespace std
|
|
|
|
|
|
2014-01-21 23:32:20 -08:00
|
|
|
#endif
|