1//===- EntityPointerLevelFormat.h -------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_CLANG_SCALABLESTATICANALYSIS_ANALYSES_ENTITYPOINTERLEVEL_ENTITYPOINTERLEVELFORMAT_H
10#define LLVM_CLANG_SCALABLESTATICANALYSIS_ANALYSES_ENTITYPOINTERLEVEL_ENTITYPOINTERLEVELFORMAT_H
11
12#include "clang/ScalableStaticAnalysis/Analyses/EntityPointerLevel/EntityPointerLevel.h"
13#include "clang/ScalableStaticAnalysis/Core/Model/EntityId.h"
14#include "clang/ScalableStaticAnalysis/Core/Serialization/JSONFormat.h"
15#include "llvm/ADT/iterator_range.h"
16#include <map>
17
18namespace clang::ssaf {
19llvm::json::Value
20entityPointerLevelToJSON(const EntityPointerLevel &EPL,
21 JSONFormat::EntityIdToJSONFn EntityId2JSON);
22
23Expected<EntityPointerLevel>
24entityPointerLevelFromJSON(const llvm::json::Value &EPLData,
25 JSONFormat::EntityIdFromJSONFn EntityIdFromJSON);
26
27llvm::json::Array entityPointerLevelSetToJSON(
28 llvm::iterator_range<EntityPointerLevelSet::const_iterator> EPLs,
29 JSONFormat::EntityIdToJSONFn EntityId2JSON);
30
31Expected<EntityPointerLevelSet>
32entityPointerLevelSetFromJSON(const llvm::json::Array &EPLsData,
33 JSONFormat::EntityIdFromJSONFn EntityIdFromJSON);
34
35/// Serialize a map<EntityId, EntityPointerLevelSet> as a flat array of
36/// alternating [EntityId, EntityPointerLevelSet, ...] pairs.
37llvm::json::Array entityPointerLevelMapToJSON(
38 const std::map<EntityId, EntityPointerLevelSet> &Map,
39 JSONFormat::EntityIdToJSONFn IdToJSON);
40
41/// Deserialize a flat array of alternating [EntityId, EntityPointerLevelSet,
42/// ...] pairs into a map.
43Expected<std::map<EntityId, EntityPointerLevelSet>>
44entityPointerLevelMapFromJSON(const llvm::json::Array &Content,
45 JSONFormat::EntityIdFromJSONFn IdFromJSON);
46} // namespace clang::ssaf
47
48#endif // LLVM_CLANG_SCALABLESTATICANALYSIS_ANALYSES_ENTITYPOINTERLEVEL_ENTITYPOINTERLEVELFORMAT_H
49