#ifndef INTERMEDIATE_STORAGE_H #define INTERMEDIATE_STORAGE_H #include #include #include #include "Storage.h" class IntermediateStorage : public Storage { public: IntermediateStorage(); void clear(); size_t getByteSize(size_t stringSize) const; size_t getSourceLocationCount() const; bool hasFatalErrors() const; void setAllFilesIncomplete(); void setFilesWithErrorsIncomplete(); std::pair addNode(const StorageNodeData& nodeData) override; std::vector addNodes(const std::vector& nodes) override; void setNodeType(Id nodeId, int nodeType); void addSymbol(const StorageSymbol& symbol) override; void addSymbols(const std::vector& symbols) override; void addFile(const StorageFile& file) override; void setFileLanguage(Id fileId, const std::wstring& languageIdentifier); Id addEdge(const StorageEdgeData& edgeData) override; std::vector addEdges(const std::vector& edges) override; Id addLocalSymbol(const StorageLocalSymbolData& localSymbolData) override; std::vector addLocalSymbols(const std::set& symbols) override; Id addSourceLocation(const StorageSourceLocationData& sourceLocationData) override; std::vector addSourceLocations(const std::vector& locations) override; void addOccurrence(const StorageOccurrence& occurrence) override; void addOccurrences(const std::vector& occurrences) override; void addComponentAccess(const StorageComponentAccess& componentAccess) override; void addComponentAccesses(const std::vector& componentAccesses) override; Id addError(const StorageErrorData& errorData) override; const std::vector& getStorageNodes() const override; const std::vector& getStorageFiles() const override; const std::vector& getStorageSymbols() const override; const std::vector& getStorageEdges() const override; const std::set& getStorageLocalSymbols() const override; const std::set& getStorageSourceLocations() const override; const std::set& getStorageOccurrences() const override; const std::set& getComponentAccesses() const override; const std::vector& getErrors() const override; void setStorageNodes(std::vector storageNodes); void setStorageFiles(std::vector storageFiles); void setStorageSymbols(std::vector storageSymbols); void setStorageEdges(std::vector storageEdges); void setStorageLocalSymbols(std::set storageLocalSymbols); void setStorageSourceLocations(std::set storageSourceLocations); void setStorageOccurrences(std::set storageOccurrences); void setComponentAccesses(std::set componentAccesses); void setErrors(std::vector errors); Id getNextId() const; void setNextId(const Id nextId); private: std::map m_nodesIndex; std::map m_nodeIdIndex; std::vector m_nodes; std::map m_filesIndex; // this is used to prevent duplicates (unique) std::map m_filesIdIndex; std::vector m_files; std::vector m_symbols; std::map m_edgesIndex; std::vector m_edges; std::set m_localSymbols; std::set m_sourceLocations; std::set m_occurrences; std::set m_componentAccesses; std::map m_errorsIndex; // this is used to prevent duplicates (unique) std::vector m_errors; Id m_nextId; }; #endif // INTERMEDIATE_STORAGE_H