#pragma once

#include<map>
#include<string>
#include<vector>
#include<set>

#include "../Distribution/Distribution.h"
#include "../GraphLoop/graph_loops.h"
#include "../ParallelizationRegions/ParRegions.h"


void SelectArrayConfForParallelization(SgProject* proj, std::map<std::string, std::vector<FuncInfo*>>& funcByFile,
                                       const std::map<std::string, std::vector<LoopGraph*>>& loopGraph, 
                                       std::map<std::string, std::vector<Directive*>>& createdDirectives,
                                       std::map<std::string, std::vector<Messages>>& allMessages,
                                       const std::map<DIST::Array*, std::set<DIST::Array*>>& arrayLinksByFuncCalls, const std::vector<ParallelRegion*>& regions);

void removeRegionsWithoutDirs(const std::map<std::string, std::vector<Directive*>>& createdDirectives,
                              std::vector<ParallelRegion*>& parallelRegions,
                              const std::map<std::string, std::vector<FuncInfo*>>& allFuncInfo,
                              std::map<std::string, std::vector<Messages>>& SPF_messages);