// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include #include "work.h" #include namespace search { template class WriteFunctor { BufferWriter &_writer; public: WriteFunctor(BufferWriter &writer) : _writer(writer) { } void operator()(const T &val) { _writer.write(&val, sizeof(val)); } }; template class WriteFunctor2 { BufferWriter &_writer; public: WriteFunctor2(BufferWriter &writer) : _writer(writer) { } void operator()(const T &val) __attribute((noinline)) { _writer.write(&val, sizeof(val)); } }; template void workLoop(const std::vector &v, Func &&func) { for (const auto &val : v) { func(val); } } template void work(const std::vector &v, BufferWriter &writer) { for (const auto &val : v) { writer.write(&val, sizeof(val)); } writer.flush(); } template void workLambda(const std::vector &v, BufferWriter &writer) { workLoop(v, [&writer](const T &val) { writer.write(&val, sizeof(val)); }); writer.flush(); } template void workFunctor(const std::vector &v, BufferWriter &writer) { workLoop(v, WriteFunctor(writer)); writer.flush(); } template void workFunctor2(const std::vector &v, BufferWriter &writer) { workLoop(v, WriteFunctor2(writer)); writer.flush(); } template void work(const std::vector &v, BufferWriter &writer); template void work(const std::vector &v, BufferWriter &writer); template void work(const std::vector &v, BufferWriter &writer); template void work(const std::vector &v, BufferWriter &writer); template void workLambda(const std::vector &v, BufferWriter &writer); template void workLambda(const std::vector &v, BufferWriter &writer); template void workLambda(const std::vector &v, BufferWriter &writer); template void workLambda(const std::vector &v, BufferWriter &writer); template void workFunctor(const std::vector &v, BufferWriter &writer); template void workFunctor(const std::vector &v, BufferWriter &writer); template void workFunctor(const std::vector &v, BufferWriter &writer); template void workFunctor(const std::vector &v, BufferWriter &writer); template void workFunctor2(const std::vector &v, BufferWriter &writer); template void workFunctor2(const std::vector &v, BufferWriter &writer); template void workFunctor2(const std::vector &v, BufferWriter &writer); template void workFunctor2(const std::vector &v, BufferWriter &writer); } // namespace search