summaryrefslogtreecommitdiff
path: root/src/gallium/frontends/clover/core/module.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/frontends/clover/core/module.cpp')
-rw-r--r--src/gallium/frontends/clover/core/module.cpp243
1 files changed, 0 insertions, 243 deletions
diff --git a/src/gallium/frontends/clover/core/module.cpp b/src/gallium/frontends/clover/core/module.cpp
deleted file mode 100644
index 0071ebef8e3..00000000000
--- a/src/gallium/frontends/clover/core/module.cpp
+++ /dev/null
@@ -1,243 +0,0 @@
-//
-// Copyright 2012 Francisco Jerez
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-// OTHER DEALINGS IN THE SOFTWARE.
-//
-
-#include <type_traits>
-#include <iostream>
-
-#include "core/module.hpp"
-
-using namespace clover;
-
-namespace {
- template<typename T, typename = void>
- struct _serializer;
-
- /// Serialize the specified object.
- template<typename T>
- void
- _proc(std::ostream &os, const T &x) {
- _serializer<T>::proc(os, x);
- }
-
- /// Deserialize the specified object.
- template<typename T>
- void
- _proc(std::istream &is, T &x) {
- _serializer<T>::proc(is, x);
- }
-
- template<typename T>
- T
- _proc(std::istream &is) {
- T x;
- _serializer<T>::proc(is, x);
- return x;
- }
-
- /// Calculate the size of the specified object.
- template<typename T>
- void
- _proc(module::size_t &sz, const T &x) {
- _serializer<T>::proc(sz, x);
- }
-
- /// (De)serialize a scalar value.
- template<typename T>
- struct _serializer<T, typename std::enable_if<
- std::is_scalar<T>::value>::type> {
- static void
- proc(std::ostream &os, const T &x) {
- os.write(reinterpret_cast<const char *>(&x), sizeof(x));
- }
-
- static void
- proc(std::istream &is, T &x) {
- is.read(reinterpret_cast<char *>(&x), sizeof(x));
- }
-
- static void
- proc(module::size_t &sz, const T &x) {
- sz += sizeof(x);
- }
- };
-
- /// (De)serialize a vector.
- template<typename T>
- struct _serializer<std::vector<T>,
- typename std::enable_if<
- !std::is_scalar<T>::value>::type> {
- static void
- proc(std::ostream &os, const std::vector<T> &v) {
- _proc<uint32_t>(os, v.size());
-
- for (size_t i = 0; i < v.size(); i++)
- _proc<T>(os, v[i]);
- }
-
- static void
- proc(std::istream &is, std::vector<T> &v) {
- v.resize(_proc<uint32_t>(is));
-
- for (size_t i = 0; i < v.size(); i++)
- new(&v[i]) T(_proc<T>(is));
- }
-
- static void
- proc(module::size_t &sz, const std::vector<T> &v) {
- sz += sizeof(uint32_t);
-
- for (size_t i = 0; i < v.size(); i++)
- _proc<T>(sz, v[i]);
- }
- };
-
- template<typename T>
- struct _serializer<std::vector<T>,
- typename std::enable_if<
- std::is_scalar<T>::value>::type> {
- static void
- proc(std::ostream &os, const std::vector<T> &v) {
- _proc<uint32_t>(os, v.size());
- os.write(reinterpret_cast<const char *>(&v[0]),
- v.size() * sizeof(T));
- }
-
- static void
- proc(std::istream &is, std::vector<T> &v) {
- v.resize(_proc<uint32_t>(is));
- is.read(reinterpret_cast<char *>(&v[0]),
- v.size() * sizeof(T));
- }
-
- static void
- proc(module::size_t &sz, const std::vector<T> &v) {
- sz += sizeof(uint32_t) + sizeof(T) * v.size();
- }
- };
-
- /// (De)serialize a string.
- template<>
- struct _serializer<std::string> {
- static void
- proc(std::ostream &os, const std::string &s) {
- _proc<uint32_t>(os, s.size());
- os.write(&s[0], s.size() * sizeof(std::string::value_type));
- }
-
- static void
- proc(std::istream &is, std::string &s) {
- s.resize(_proc<uint32_t>(is));
- is.read(&s[0], s.size() * sizeof(std::string::value_type));
- }
-
- static void
- proc(module::size_t &sz, const std::string &s) {
- sz += sizeof(uint32_t) + sizeof(std::string::value_type) * s.size();
- }
- };
-
- /// (De)serialize a printf format
- template<>
- struct _serializer<module::printf_info> {
- template<typename S, typename QT>
- static void
- proc(S & s, QT &x) {
- _proc(s, x.arg_sizes);
- _proc(s, x.strings);
- }
- };
-
- /// (De)serialize a module::section.
- template<>
- struct _serializer<module::section> {
- template<typename S, typename QT>
- static void
- proc(S &s, QT &x) {
- _proc(s, x.id);
- _proc(s, x.type);
- _proc(s, x.size);
- _proc(s, x.data);
- }
- };
-
- /// (De)serialize a module::argument.
- template<>
- struct _serializer<module::argument> {
- template<typename S, typename QT>
- static void
- proc(S &s, QT &x) {
- _proc(s, x.type);
- _proc(s, x.size);
- _proc(s, x.target_size);
- _proc(s, x.target_align);
- _proc(s, x.ext_type);
- _proc(s, x.semantic);
- }
- };
-
- /// (De)serialize a module::symbol.
- template<>
- struct _serializer<module::symbol> {
- template<typename S, typename QT>
- static void
- proc(S &s, QT &x) {
- _proc(s, x.name);
- _proc(s, x.attributes);
- _proc(s, x.reqd_work_group_size);
- _proc(s, x.section);
- _proc(s, x.offset);
- _proc(s, x.args);
- }
- };
-
- /// (De)serialize a module.
- template<>
- struct _serializer<module> {
- template<typename S, typename QT>
- static void
- proc(S &s, QT &x) {
- _proc(s, x.syms);
- _proc(s, x.secs);
- _proc(s, x.printf_infos);
- _proc(s, x.printf_strings_in_buffer);
- }
- };
-};
-
-namespace clover {
- void
- module::serialize(std::ostream &os) const {
- _proc(os, *this);
- }
-
- module
- module::deserialize(std::istream &is) {
- return _proc<module>(is);
- }
-
- module::size_t
- module::size() const {
- size_t sz = 0;
- _proc(sz, *this);
- return sz;
- }
-}