#ifndef STORAGE_H #define STORAGE_H #include #include #include #include "data/storage/StorageTypes.h" #include "utility/types.h" class Storage { public: Storage(); virtual ~Storage(); virtual Id addNode(int type, const std::string& serializedName) = 0; virtual void addFile(const Id id, const std::string& filePath, const std::string& modificationTime, bool complete) = 0; virtual void addSymbol(const Id id, int definitionKind) = 0; virtual Id addEdge(int type, Id sourceId, Id targetId) = 0; virtual Id addLocalSymbol(const std::string& name) = 0; virtual Id addSourceLocation(Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, int type) = 0; virtual void addOccurrence(Id elementId, Id sourceLocationId) = 0; virtual void addComponentAccess(Id nodeId , int type) = 0; virtual void addCommentLocation(Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol) = 0; virtual void addError(const std::string& message, const std::string& commandline, const FilePath& filePath, uint startLine, uint startCol, bool fatal, bool indexed) = 0; virtual void forEachNode(std::function callback) const = 0; virtual void forEachFile(std::function callback) const = 0; virtual void forEachSymbol(std::function callback) const = 0; virtual void forEachEdge(std::function callback) const = 0; virtual void forEachLocalSymbol(std::function callback) const = 0; virtual void forEachSourceLocation(std::function callback) const = 0; virtual void forEachOccurrence(std::function callback) const = 0; virtual void forEachComponentAccess(std::function callback) const = 0; virtual void forEachCommentLocation(std::function callback) const = 0; virtual void forEachError(std::function callback) const = 0; void inject(Storage* injected); private: virtual void startInjection(); virtual void finishInjection(); std::mutex m_dataMutex; }; #endif // STORAGE_H