• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2019 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "source/fuzz/data_descriptor.h"
16 
17 #include <algorithm>
18 
19 namespace spvtools {
20 namespace fuzz {
21 
MakeDataDescriptor(uint32_t object,const std::vector<uint32_t> & indices)22 protobufs::DataDescriptor MakeDataDescriptor(
23     uint32_t object, const std::vector<uint32_t>& indices) {
24   protobufs::DataDescriptor result;
25   result.set_object(object);
26   for (auto index : indices) {
27     result.add_index(index);
28   }
29   return result;
30 }
31 
operator ()(const protobufs::DataDescriptor * data_descriptor) const32 size_t DataDescriptorHash::operator()(
33     const protobufs::DataDescriptor* data_descriptor) const {
34   std::u32string hash;
35   hash.push_back(data_descriptor->object());
36   for (auto an_index : data_descriptor->index()) {
37     hash.push_back(an_index);
38   }
39   return std::hash<std::u32string>()(hash);
40 }
41 
operator ()(const protobufs::DataDescriptor * first,const protobufs::DataDescriptor * second) const42 bool DataDescriptorEquals::operator()(
43     const protobufs::DataDescriptor* first,
44     const protobufs::DataDescriptor* second) const {
45   return first->object() == second->object() &&
46          first->index().size() == second->index().size() &&
47          std::equal(first->index().begin(), first->index().end(),
48                     second->index().begin());
49 }
50 
operator <<(std::ostream & out,const protobufs::DataDescriptor & data_descriptor)51 std::ostream& operator<<(std::ostream& out,
52                          const protobufs::DataDescriptor& data_descriptor) {
53   out << data_descriptor.object();
54   out << "[";
55   bool first = true;
56   for (auto index : data_descriptor.index()) {
57     if (first) {
58       first = false;
59     } else {
60       out << ", ";
61     }
62     out << index;
63   }
64   out << "]";
65   return out;
66 }
67 
68 }  // namespace fuzz
69 }  // namespace spvtools
70