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;
60 bool isStateEqual(StateStack* state1, StateStack* state2)
const;
61 void invalidateFrom(int32_t startIndex);
62 void retokenizeLines(int32_t startIndex, int32_t endIndex);
66 SessionImpl(uint64_t
id, std::shared_ptr<IGrammar> gram);
72 uint32_t getRefCount()
const {
return referenceCount; }
75 uint64_t getSessionId()
const {
return sessionId; }
76 uint64_t getCreatedAtMs()
const {
return createdAtMs; }
77 uint64_t getLastAccessMs()
const {
return lastAccessMs; }
78 bool isExpired(uint64_t currentTimeMs, uint64_t maxAgeMs)
const;
81 int32_t setLines(
const std::vector<std::string>& newLines);
82 int32_t getLineCount()
const {
return static_cast<int32_t
>(lines.size()); }
86 const std::vector<std::string>& newLines,
92 const std::vector<std::string>& newLines,
102 const SessionLine* getLine(int32_t lineIndex)
const;
103 const std::vector<IToken>* getLineTokens(int32_t lineIndex)
const;
104 StateStack* getLineState(int32_t lineIndex)
const;
110 std::vector<SessionLine>& results
114 void invalidateRange(int32_t startIndex, int32_t endIndex);
116 SessionMetadata getMetadata()
const;
119 void updateAccessTime();
120 uint64_t calculateMemoryUsage()
const;
121 int32_t countCachedLines()
const;
125class SessionManager {
127 static std::map<uint64_t, std::shared_ptr<SessionImpl>> sessions;
128 static uint64_t nextSessionId;
129 static uint32_t operationCount;
130 static const uint32_t CLEANUP_INTERVAL = 100;
134 static uint64_t createSession(std::shared_ptr<IGrammar> grammar);
135 static std::shared_ptr<SessionImpl> getSession(uint64_t sessionId);
136 static void retainSession(uint64_t sessionId);
137 static void releaseSession(uint64_t sessionId);
138 static void disposeSession(uint64_t sessionId);
141 static void cleanupExpired(int32_t maxAgeMs);
142 static void triggerPeriodicCleanup(int32_t maxAgeMs);
145 static size_t getSessionCount();
Core type definitions and interfaces for TextMateLib.