* reimplemented interrupting TaskParseCxx by adding a listener for the MessageInterruptTask and returning a failure status code on update. This cancels the parent sequence task which results in the indexed items not getting inserted into the persistent storage * removed the capability for interrupting from TaskScheduler * changed task system to be closer to the standard behavior tree implementation * changed task system to accommodate the 3 status return types: Running, Success and Failure * made TaskGroupSequential fail once a member task fails * made TaskGroupParallel fail once a member task fails * split TaskParse... into one task for indexing and one task for injecting * added TaskRunner that handles updating and resetting the managed task * fixed numbers that are shown as parsed file count in indexing ui * fixed deadlock that originated from interaction between TaskScheduler and MessageQueue (one thread wanted to destroy a message listener on a task while the other one wanted to send as message as a task)
65 lines
3.0 KiB
C++
65 lines
3.0 KiB
C++
#ifndef INTERMEDIATE_STORAGE_H
|
|
#define INTERMEDIATE_STORAGE_H
|
|
|
|
#include <memory>
|
|
#include <map>
|
|
#include <unordered_map>
|
|
|
|
#include "data/StorageTypes.h"
|
|
#include "data/Storage.h"
|
|
|
|
class IntermediateStorage: public Storage
|
|
{
|
|
public:
|
|
IntermediateStorage();
|
|
virtual ~IntermediateStorage();
|
|
|
|
void clear();
|
|
|
|
virtual Id addFile(const std::string& name, const std::string& filePath, const std::string& modificationTime);
|
|
virtual Id addNode(int type, const std::string& serializedName, int definitionType);
|
|
virtual Id addEdge(int type, Id sourceId, Id targetId);
|
|
virtual Id addLocalSymbol(const std::string& name);
|
|
virtual void addSourceLocation(Id elementId, Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, int type);
|
|
virtual void addComponentAccess(Id nodeId , int type);
|
|
virtual void addCommentLocation(Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol);
|
|
virtual void addError(const std::string& message, bool fatal, bool indexed, const std::string& filePath, uint startLine, uint startCol);
|
|
|
|
virtual void forEachFile(std::function<void(const Id /*id*/, const StorageFile& /*data*/)> callback) const;
|
|
virtual void forEachNode(std::function<void(const Id /*id*/, const StorageNode& /*data*/)> callback) const;
|
|
virtual void forEachEdge(std::function<void(const Id /*id*/, const StorageEdge& /*data*/)> callback) const;
|
|
virtual void forEachLocalSymbol(std::function<void(const Id /*id*/, const StorageLocalSymbol& /*data*/)> callback) const;
|
|
virtual void forEachSourceLocation(std::function<void(const StorageSourceLocation& /*data*/)> callback) const;
|
|
virtual void forEachComponentAccess(std::function<void(const StorageComponentAccess& /*data*/)> callback) const;
|
|
virtual void forEachCommentLocation(std::function<void(const StorageCommentLocation& /*data*/)> callback) const;
|
|
virtual void forEachError(std::function<void(const StorageError& /*data*/)> callback) const;
|
|
|
|
private:
|
|
std::string serialize(const StorageEdge& edge);
|
|
std::string serialize(const StorageNode& node);
|
|
std::string serialize(const StorageFile& file);
|
|
std::string serialize(const StorageLocalSymbol& localSymbol);
|
|
|
|
std::unordered_map<std::string, Id> m_fileNamesToIds; // this is used to prevent duplicates (unique)
|
|
std::unordered_map<Id, std::shared_ptr<StorageFile>> m_fileIdsToData;
|
|
|
|
std::unordered_map<std::string, Id> m_nodeNamesToIds; // this is used to prevent duplicates (unique)
|
|
std::map<Id, std::shared_ptr<StorageNode>> m_nodeIdsToData;
|
|
|
|
std::unordered_map<std::string, Id> m_edgeNamesToIds; // this is used to prevent duplicates (unique)
|
|
std::map<Id, std::shared_ptr<StorageEdge>> m_edgeIdsToData;
|
|
|
|
|
|
std::unordered_map<std::string, Id> m_localSymbolNamesToIds; // this is used to prevent duplicates (unique)
|
|
std::map<Id, std::shared_ptr<StorageLocalSymbol>> m_localSymbolIdsToData;
|
|
|
|
std::vector<StorageSourceLocation> m_sourceLocations;
|
|
std::vector<StorageComponentAccess> m_componentAccesses;
|
|
std::vector<StorageCommentLocation> m_commentLocations;
|
|
std::vector<StorageError> m_errors;
|
|
|
|
Id m_nextId;
|
|
};
|
|
|
|
#endif // INTERMEDIATE_STORAGE_H
|