1#ifndef TEXTMATELIB_SESSION_H
2#define TEXTMATELIB_SESSION_H
20 std::vector<IToken> tokens;
35struct SessionMetadata {
37 uint32_t referenceCount;
39 int32_t cachedLineCount;
40 uint64_t memoryUsageBytes;
52 std::shared_ptr<IGrammar> grammar;
53 std::vector<SessionLine> lines;
54 uint32_t referenceCount;
56 uint64_t lastAccessMs;
64 StackNodeArena stateArena;
67 bool isStateEqual(StateStack* state1, StateStack* state2)
const;
68 void invalidateFrom(int32_t startIndex);
69 void retokenizeLines(int32_t startIndex, int32_t endIndex);
73 SessionImpl(uint64_t
id, std::shared_ptr<IGrammar> gram);
79 uint32_t getRefCount()
const {
return referenceCount; }
82 uint64_t getSessionId()
const {
return sessionId; }
83 uint64_t getCreatedAtMs()
const {
return createdAtMs; }
84 uint64_t getLastAccessMs()
const {
return lastAccessMs; }
85 bool isExpired(uint64_t currentTimeMs, uint64_t maxAgeMs)
const;
88 int32_t setLines(
const std::vector<std::string>& newLines);
89 int32_t getLineCount()
const {
return static_cast<int32_t
>(lines.size()); }
93 const std::vector<std::string>& newLines,
99 const std::vector<std::string>& newLines,
109 const SessionLine* getLine(int32_t lineIndex)
const;
110 const std::vector<IToken>* getLineTokens(int32_t lineIndex)
const;
111 StateStack* getLineState(int32_t lineIndex)
const;
117 std::vector<SessionLine>& results
121 void invalidateRange(int32_t startIndex, int32_t endIndex);
123 SessionMetadata getMetadata()
const;
126 void updateAccessTime();
127 uint64_t calculateMemoryUsage()
const;
128 int32_t countCachedLines()
const;
132class SessionManager {
134 static std::map<uint64_t, std::shared_ptr<SessionImpl>> sessions;
135 static uint64_t nextSessionId;
136 static uint32_t operationCount;
137 static const uint32_t CLEANUP_INTERVAL = 100;
141 static uint64_t createSession(std::shared_ptr<IGrammar> grammar);
142 static std::shared_ptr<SessionImpl> getSession(uint64_t sessionId);
143 static void retainSession(uint64_t sessionId);
144 static void releaseSession(uint64_t sessionId);
145 static void disposeSession(uint64_t sessionId);
148 static void cleanupExpired(int32_t maxAgeMs);
149 static void triggerPeriodicCleanup(int32_t maxAgeMs);
152 static size_t getSessionCount();
Core type definitions and interfaces for TextMateLib.