Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 54 additions & 5 deletions safetensors.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,57 @@ namespace safetensors
return result;
}

inline void skipValue()
{
skipWhitespace();
if (json[pos] == '"')
{
// Skip string
parseString();
}
else if (json[pos] == '[')
{
// Skip array
pos++;
while (json[pos] != ']')
{
skipValue();
skipWhitespace();
if (json[pos] == ',')
pos++;
}
pos++; // Skip closing bracket
}
else if (json[pos] == '{')
{
// Skip object
pos++;
while (json[pos] != '}')
{
skipWhitespace();
if (json[pos] == '"')
{
parseString(); // Skip key
skipWhitespace();
if (json[pos] == ':')
pos++;
skipValue(); // Skip value
skipWhitespace();
if (json[pos] == ',')
pos++;
}
}
pos++; // Skip closing brace
}
else
{
// Skip number, boolean, or null
while (json[pos] != ',' && json[pos] != '}' && json[pos] != ']' &&
json[pos] != ' ' && json[pos] != '\n' && json[pos] != '\r' && json[pos] != '\t')
pos++;
}
}

inline TensorInfo parseTensorInfo()
{
TensorInfo info;
Expand All @@ -150,8 +201,7 @@ namespace safetensors
else
{
// Skip unknown fields
while (json[pos] != ',' && json[pos] != '}')
pos++;
skipValue();
}
skipWhitespace();
if (json[pos] == ',')
Expand Down Expand Up @@ -183,9 +233,8 @@ namespace safetensors
}
else
{
// Skip metadata
while (json[pos] != ',' && json[pos] != '}')
pos++;
// Skip metadata value (which is a JSON object)
skipValue();
}
skipWhitespace();
if (json[pos] == ',')
Expand Down