1 : // Copyright 2013 Google Inc. All Rights Reserved.
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 "syzygy/block_graph/orderer.h"
16 :
17 : namespace block_graph {
18 :
19 : // Applies a vector of BlockGraphOrderers.
20 : // @param orderers The vector of orderers.
21 : // @param ordered_block_graph the block graph to order.
22 : // @param header_block The header block of the block graph to transform.
23 : // @returns true on success, false otherwise.
24 : bool ApplyBlockGraphOrderers(
25 : const std::vector<BlockGraphOrdererInterface*>& orderers,
26 : OrderedBlockGraph* ordered_block_graph,
27 E : BlockGraph::Block* header_block) {
28 E : DCHECK_NE(reinterpret_cast<OrderedBlockGraph*>(NULL), ordered_block_graph);
29 E : DCHECK_NE(reinterpret_cast<BlockGraph::Block*>(NULL), header_block);
30 E : for (size_t i = 0; i < orderers.size(); ++i) {
31 E : DCHECK_NE(reinterpret_cast<BlockGraphOrdererInterface*>(NULL), orderers[i]);
32 E : LOG(INFO) << "Applying orderer \"" << orderers[i]->name() << "\".";
33 E : if (!orderers[i]->OrderBlockGraph(ordered_block_graph, header_block)) {
34 E : LOG(ERROR) << "Orderer \"" << orderers[i]->name() << "\" failed.";
35 E : return false;
36 : }
37 E : }
38 :
39 E : return true;
40 E : }
41 :
42 : } // namespace block_graph
|