Imported Upstream version 1.7.0
[platform/core/ml/nnfw.git] / compiler / tflchef / core / src / Op / Reshape.cpp
1 /*
2  * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *    http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include "Reshape.h"
18 #include "Convert.h"
19
20 #include <cassert>
21 #include <vector>
22
23 namespace
24 {
25
26 std::vector<int32_t> vector_new_shape(const tflchef::ReshapeOptions &options)
27 {
28   std::vector<int32_t> shapes;
29
30   for (int i = 0; i < options.new_shape_size(); ++i)
31   {
32     shapes.push_back(options.new_shape(i));
33   }
34
35   return shapes;
36 }
37
38 } // namespace
39
40 flatbuffers::Offset<void> ReshapeChef::value(flatbuffers::FlatBufferBuilder &fbb) const
41 {
42   auto &operation = (*_operation);
43
44   if (!operation.has_reshape_options())
45     return 0;
46
47   auto options = operation.reshape_options();
48   auto shapes = vector_new_shape(options);
49   // Note: 'CreateVector' should be placed before 'options_builder'
50   //       Read flatbuffers.h 'void NotNested()' for more information
51   auto fb_new_shape = fbb.CreateVector(shapes);
52
53   tflite::ReshapeOptionsBuilder options_builder{fbb};
54
55   options_builder.add_new_shape(fb_new_shape);
56
57   return options_builder.Finish().Union();
58 }
59
60 std::unique_ptr<OpChef> ReshapeChefFactory::create(const tflchef::Operation *operation) const
61 {
62   return std::unique_ptr<OpChef>{new ReshapeChef{operation}};
63 }