Skip to content

stdlib : base64 encode to writer - #20961

Merged
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64
Sep 4, 2024
Merged

stdlib : base64 encode to writer#20961
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64

Conversation

@Arwalk

Copy link
Copy Markdown
Contributor

Hello,

The current base64 interface only allows encoding to slices, making it impractical (although not impossible) to use when encoding dynamically to a document (such as a json string, as an example).

This PR adds the encodeWriter API to Base64Encoder, relying on the destination having the writeAll interface of Writer. As it is possible to encode base64 data by chunks of 3 bytes, it progressively encodes the source data in the stream without unnecessary heap allocations.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 750cfea to db0c706CompareAugust 6, 2024 20:11
@jedisct1

Copy link
Copy Markdown
Contributor

This is a useful addition, thank you!

Ideally, a reader interface would also be great, but this is much more complicated.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

If i'm motivated i'll take a look into it. I think if we base ourserves on Reader's readBoundedBytes we should be able to chunk the decoding there too?

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

I realize i removed the comptime keyword on a test that was explicitely comptime. I should try to find a way to avoid this.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

There, using BoundedArray the tests works at comptime, while still showing that it uses Writer's writeAll.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

So i looked into it for a bit, and it's actually not that hard. The Reader interface is pretty neat and allows us to do this quite easily, so i added this interface in ab740ca

This means in theory that you could encode a file directly to base64 without having to load it in memory. Sounds pretty nice !

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

while i'm at it, should i try to do the reverse for decoding ?

@jedisct1

Copy link
Copy Markdown
Contributor

while i'm at it, should i try to do the reverse for decoding ?

That could be great, if only for consistency. But in a distinct PR.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Is there anything missing for this PR @jedisct1 ? Not trying to stress you on the matter, genuinely asking, as I do not know if there are any other prerequisites.

Thank you for your feedback.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from ab740ca to ffc5b08CompareAugust 13, 2024 16:30
Comment threadlib/std/base64.zig
@Arwalk

Arwalk commented Aug 13, 2024

Copy link
Copy Markdown
ContributorAuthor

@marler8997 i applied your suggestions to the other method in b9dfe0f

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from b9dfe0f to 51c2b14CompareAugust 14, 2024 15:09
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Now with a zig fmt pass that was missing, sorry.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Hey there. Anything missing here so it can be merged? I'm planning on doing the decoding part soon in another PR.

@Vexu
Vexu enabled auto-merge (squash) September 1, 2024 14:27
auto-merge was automatically disabled September 3, 2024 22:56

Head branch was pushed to by a user without write access

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 51c2b14 to bcf4d78CompareSeptember 3, 2024 22:56
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

thanks @Vexu for the auto-merge. Could you reenable it? I just rebased again. There was an error in aarch-linux-release, but it wasn't related to my stuff.

@jedisct1
jedisct1 enabled auto-merge (squash) September 4, 2024 04:53
@jedisct1
jedisct1 merged commit f87dd43 into ziglang:masterSep 4, 2024
@Arwalk
Arwalk deleted the add_stream_writer_base64 branch September 4, 2024 13:26
@ArwalkArwalk mentioned this pull request Sep 8, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Arwalk@jedisct1@marler8997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
stdlib : base64 encode to writer by Arwalk · Pull Request #20961 · ziglang/zig · GitHub
Skip to content

stdlib : base64 encode to writer - #20961

Merged
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64
Sep 4, 2024
Merged

stdlib : base64 encode to writer#20961
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64

Conversation

@Arwalk

Copy link
Copy Markdown
Contributor

Hello,

The current base64 interface only allows encoding to slices, making it impractical (although not impossible) to use when encoding dynamically to a document (such as a json string, as an example).

This PR adds the encodeWriter API to Base64Encoder, relying on the destination having the writeAll interface of Writer. As it is possible to encode base64 data by chunks of 3 bytes, it progressively encodes the source data in the stream without unnecessary heap allocations.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 750cfea to db0c706CompareAugust 6, 2024 20:11
@jedisct1

Copy link
Copy Markdown
Contributor

This is a useful addition, thank you!

Ideally, a reader interface would also be great, but this is much more complicated.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

If i'm motivated i'll take a look into it. I think if we base ourserves on Reader's readBoundedBytes we should be able to chunk the decoding there too?

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

I realize i removed the comptime keyword on a test that was explicitely comptime. I should try to find a way to avoid this.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

There, using BoundedArray the tests works at comptime, while still showing that it uses Writer's writeAll.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

So i looked into it for a bit, and it's actually not that hard. The Reader interface is pretty neat and allows us to do this quite easily, so i added this interface in ab740ca

This means in theory that you could encode a file directly to base64 without having to load it in memory. Sounds pretty nice !

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

while i'm at it, should i try to do the reverse for decoding ?

@jedisct1

Copy link
Copy Markdown
Contributor

while i'm at it, should i try to do the reverse for decoding ?

That could be great, if only for consistency. But in a distinct PR.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Is there anything missing for this PR @jedisct1 ? Not trying to stress you on the matter, genuinely asking, as I do not know if there are any other prerequisites.

Thank you for your feedback.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from ab740ca to ffc5b08CompareAugust 13, 2024 16:30
Comment threadlib/std/base64.zig
@Arwalk

Arwalk commented Aug 13, 2024

Copy link
Copy Markdown
ContributorAuthor

@marler8997 i applied your suggestions to the other method in b9dfe0f

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from b9dfe0f to 51c2b14CompareAugust 14, 2024 15:09
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Now with a zig fmt pass that was missing, sorry.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Hey there. Anything missing here so it can be merged? I'm planning on doing the decoding part soon in another PR.

@Vexu
Vexu enabled auto-merge (squash) September 1, 2024 14:27
auto-merge was automatically disabled September 3, 2024 22:56

Head branch was pushed to by a user without write access

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 51c2b14 to bcf4d78CompareSeptember 3, 2024 22:56
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

thanks @Vexu for the auto-merge. Could you reenable it? I just rebased again. There was an error in aarch-linux-release, but it wasn't related to my stuff.

@jedisct1
jedisct1 enabled auto-merge (squash) September 4, 2024 04:53
@jedisct1
jedisct1 merged commit f87dd43 into ziglang:masterSep 4, 2024
@Arwalk
Arwalk deleted the add_stream_writer_base64 branch September 4, 2024 13:26
@ArwalkArwalk mentioned this pull request Sep 8, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Arwalk@jedisct1@marler8997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' stdlib : base64 encode to writer by Arwalk · Pull Request #20961 · ziglang/zig · GitHub
Skip to content

stdlib : base64 encode to writer - #20961

Merged
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64
Sep 4, 2024
Merged

stdlib : base64 encode to writer#20961
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64

Conversation

@Arwalk

Copy link
Copy Markdown
Contributor

Hello,

The current base64 interface only allows encoding to slices, making it impractical (although not impossible) to use when encoding dynamically to a document (such as a json string, as an example).

This PR adds the encodeWriter API to Base64Encoder, relying on the destination having the writeAll interface of Writer. As it is possible to encode base64 data by chunks of 3 bytes, it progressively encodes the source data in the stream without unnecessary heap allocations.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 750cfea to db0c706CompareAugust 6, 2024 20:11
@jedisct1

Copy link
Copy Markdown
Contributor

This is a useful addition, thank you!

Ideally, a reader interface would also be great, but this is much more complicated.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

If i'm motivated i'll take a look into it. I think if we base ourserves on Reader's readBoundedBytes we should be able to chunk the decoding there too?

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

I realize i removed the comptime keyword on a test that was explicitely comptime. I should try to find a way to avoid this.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

There, using BoundedArray the tests works at comptime, while still showing that it uses Writer's writeAll.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

So i looked into it for a bit, and it's actually not that hard. The Reader interface is pretty neat and allows us to do this quite easily, so i added this interface in ab740ca

This means in theory that you could encode a file directly to base64 without having to load it in memory. Sounds pretty nice !

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

while i'm at it, should i try to do the reverse for decoding ?

@jedisct1

Copy link
Copy Markdown
Contributor

while i'm at it, should i try to do the reverse for decoding ?

That could be great, if only for consistency. But in a distinct PR.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Is there anything missing for this PR @jedisct1 ? Not trying to stress you on the matter, genuinely asking, as I do not know if there are any other prerequisites.

Thank you for your feedback.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from ab740ca to ffc5b08CompareAugust 13, 2024 16:30
Comment threadlib/std/base64.zig
@Arwalk

Arwalk commented Aug 13, 2024

Copy link
Copy Markdown
ContributorAuthor

@marler8997 i applied your suggestions to the other method in b9dfe0f

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from b9dfe0f to 51c2b14CompareAugust 14, 2024 15:09
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Now with a zig fmt pass that was missing, sorry.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Hey there. Anything missing here so it can be merged? I'm planning on doing the decoding part soon in another PR.

@Vexu
Vexu enabled auto-merge (squash) September 1, 2024 14:27
auto-merge was automatically disabled September 3, 2024 22:56

Head branch was pushed to by a user without write access

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 51c2b14 to bcf4d78CompareSeptember 3, 2024 22:56
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

thanks @Vexu for the auto-merge. Could you reenable it? I just rebased again. There was an error in aarch-linux-release, but it wasn't related to my stuff.

@jedisct1
jedisct1 enabled auto-merge (squash) September 4, 2024 04:53
@jedisct1
jedisct1 merged commit f87dd43 into ziglang:masterSep 4, 2024
@Arwalk
Arwalk deleted the add_stream_writer_base64 branch September 4, 2024 13:26
@ArwalkArwalk mentioned this pull request Sep 8, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Arwalk@jedisct1@marler8997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' stdlib : base64 encode to writer by Arwalk · Pull Request #20961 · ziglang/zig · GitHub
Skip to content

stdlib : base64 encode to writer - #20961

Merged
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64
Sep 4, 2024
Merged

stdlib : base64 encode to writer#20961
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64

Conversation

@Arwalk

Copy link
Copy Markdown
Contributor

Hello,

The current base64 interface only allows encoding to slices, making it impractical (although not impossible) to use when encoding dynamically to a document (such as a json string, as an example).

This PR adds the encodeWriter API to Base64Encoder, relying on the destination having the writeAll interface of Writer. As it is possible to encode base64 data by chunks of 3 bytes, it progressively encodes the source data in the stream without unnecessary heap allocations.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 750cfea to db0c706CompareAugust 6, 2024 20:11
@jedisct1

Copy link
Copy Markdown
Contributor

This is a useful addition, thank you!

Ideally, a reader interface would also be great, but this is much more complicated.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

If i'm motivated i'll take a look into it. I think if we base ourserves on Reader's readBoundedBytes we should be able to chunk the decoding there too?

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

I realize i removed the comptime keyword on a test that was explicitely comptime. I should try to find a way to avoid this.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

There, using BoundedArray the tests works at comptime, while still showing that it uses Writer's writeAll.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

So i looked into it for a bit, and it's actually not that hard. The Reader interface is pretty neat and allows us to do this quite easily, so i added this interface in ab740ca

This means in theory that you could encode a file directly to base64 without having to load it in memory. Sounds pretty nice !

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

while i'm at it, should i try to do the reverse for decoding ?

@jedisct1

Copy link
Copy Markdown
Contributor

while i'm at it, should i try to do the reverse for decoding ?

That could be great, if only for consistency. But in a distinct PR.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Is there anything missing for this PR @jedisct1 ? Not trying to stress you on the matter, genuinely asking, as I do not know if there are any other prerequisites.

Thank you for your feedback.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from ab740ca to ffc5b08CompareAugust 13, 2024 16:30
Comment threadlib/std/base64.zig
@Arwalk

Arwalk commented Aug 13, 2024

Copy link
Copy Markdown
ContributorAuthor

@marler8997 i applied your suggestions to the other method in b9dfe0f

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from b9dfe0f to 51c2b14CompareAugust 14, 2024 15:09
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Now with a zig fmt pass that was missing, sorry.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Hey there. Anything missing here so it can be merged? I'm planning on doing the decoding part soon in another PR.

@Vexu
Vexu enabled auto-merge (squash) September 1, 2024 14:27
auto-merge was automatically disabled September 3, 2024 22:56

Head branch was pushed to by a user without write access

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 51c2b14 to bcf4d78CompareSeptember 3, 2024 22:56
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

thanks @Vexu for the auto-merge. Could you reenable it? I just rebased again. There was an error in aarch-linux-release, but it wasn't related to my stuff.

@jedisct1
jedisct1 enabled auto-merge (squash) September 4, 2024 04:53
@jedisct1
jedisct1 merged commit f87dd43 into ziglang:masterSep 4, 2024
@Arwalk
Arwalk deleted the add_stream_writer_base64 branch September 4, 2024 13:26
@ArwalkArwalk mentioned this pull request Sep 8, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Arwalk@jedisct1@marler8997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' stdlib : base64 encode to writer by Arwalk · Pull Request #20961 · ziglang/zig · GitHub
Skip to content

stdlib : base64 encode to writer - #20961

Merged
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64
Sep 4, 2024
Merged

stdlib : base64 encode to writer#20961
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64

Conversation

@Arwalk

Copy link
Copy Markdown
Contributor

Hello,

The current base64 interface only allows encoding to slices, making it impractical (although not impossible) to use when encoding dynamically to a document (such as a json string, as an example).

This PR adds the encodeWriter API to Base64Encoder, relying on the destination having the writeAll interface of Writer. As it is possible to encode base64 data by chunks of 3 bytes, it progressively encodes the source data in the stream without unnecessary heap allocations.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 750cfea to db0c706CompareAugust 6, 2024 20:11
@jedisct1

Copy link
Copy Markdown
Contributor

This is a useful addition, thank you!

Ideally, a reader interface would also be great, but this is much more complicated.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

If i'm motivated i'll take a look into it. I think if we base ourserves on Reader's readBoundedBytes we should be able to chunk the decoding there too?

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

I realize i removed the comptime keyword on a test that was explicitely comptime. I should try to find a way to avoid this.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

There, using BoundedArray the tests works at comptime, while still showing that it uses Writer's writeAll.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

So i looked into it for a bit, and it's actually not that hard. The Reader interface is pretty neat and allows us to do this quite easily, so i added this interface in ab740ca

This means in theory that you could encode a file directly to base64 without having to load it in memory. Sounds pretty nice !

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

while i'm at it, should i try to do the reverse for decoding ?

@jedisct1

Copy link
Copy Markdown
Contributor

while i'm at it, should i try to do the reverse for decoding ?

That could be great, if only for consistency. But in a distinct PR.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Is there anything missing for this PR @jedisct1 ? Not trying to stress you on the matter, genuinely asking, as I do not know if there are any other prerequisites.

Thank you for your feedback.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from ab740ca to ffc5b08CompareAugust 13, 2024 16:30
Comment threadlib/std/base64.zig
@Arwalk

Arwalk commented Aug 13, 2024

Copy link
Copy Markdown
ContributorAuthor

@marler8997 i applied your suggestions to the other method in b9dfe0f

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from b9dfe0f to 51c2b14CompareAugust 14, 2024 15:09
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Now with a zig fmt pass that was missing, sorry.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Hey there. Anything missing here so it can be merged? I'm planning on doing the decoding part soon in another PR.

@Vexu
Vexu enabled auto-merge (squash) September 1, 2024 14:27
auto-merge was automatically disabled September 3, 2024 22:56

Head branch was pushed to by a user without write access

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 51c2b14 to bcf4d78CompareSeptember 3, 2024 22:56
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

thanks @Vexu for the auto-merge. Could you reenable it? I just rebased again. There was an error in aarch-linux-release, but it wasn't related to my stuff.

@jedisct1
jedisct1 enabled auto-merge (squash) September 4, 2024 04:53
@jedisct1
jedisct1 merged commit f87dd43 into ziglang:masterSep 4, 2024
@Arwalk
Arwalk deleted the add_stream_writer_base64 branch September 4, 2024 13:26
@ArwalkArwalk mentioned this pull request Sep 8, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Arwalk@jedisct1@marler8997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' stdlib : base64 encode to writer by Arwalk · Pull Request #20961 · ziglang/zig · GitHub
Skip to content

stdlib : base64 encode to writer - #20961

Merged
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64
Sep 4, 2024
Merged

stdlib : base64 encode to writer#20961
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64

Conversation

@Arwalk

Copy link
Copy Markdown
Contributor

Hello,

The current base64 interface only allows encoding to slices, making it impractical (although not impossible) to use when encoding dynamically to a document (such as a json string, as an example).

This PR adds the encodeWriter API to Base64Encoder, relying on the destination having the writeAll interface of Writer. As it is possible to encode base64 data by chunks of 3 bytes, it progressively encodes the source data in the stream without unnecessary heap allocations.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 750cfea to db0c706CompareAugust 6, 2024 20:11
@jedisct1

Copy link
Copy Markdown
Contributor

This is a useful addition, thank you!

Ideally, a reader interface would also be great, but this is much more complicated.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

If i'm motivated i'll take a look into it. I think if we base ourserves on Reader's readBoundedBytes we should be able to chunk the decoding there too?

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

I realize i removed the comptime keyword on a test that was explicitely comptime. I should try to find a way to avoid this.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

There, using BoundedArray the tests works at comptime, while still showing that it uses Writer's writeAll.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

So i looked into it for a bit, and it's actually not that hard. The Reader interface is pretty neat and allows us to do this quite easily, so i added this interface in ab740ca

This means in theory that you could encode a file directly to base64 without having to load it in memory. Sounds pretty nice !

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

while i'm at it, should i try to do the reverse for decoding ?

@jedisct1

Copy link
Copy Markdown
Contributor

while i'm at it, should i try to do the reverse for decoding ?

That could be great, if only for consistency. But in a distinct PR.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Is there anything missing for this PR @jedisct1 ? Not trying to stress you on the matter, genuinely asking, as I do not know if there are any other prerequisites.

Thank you for your feedback.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from ab740ca to ffc5b08CompareAugust 13, 2024 16:30
Comment threadlib/std/base64.zig
@Arwalk

Arwalk commented Aug 13, 2024

Copy link
Copy Markdown
ContributorAuthor

@marler8997 i applied your suggestions to the other method in b9dfe0f

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from b9dfe0f to 51c2b14CompareAugust 14, 2024 15:09
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Now with a zig fmt pass that was missing, sorry.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Hey there. Anything missing here so it can be merged? I'm planning on doing the decoding part soon in another PR.

@Vexu
Vexu enabled auto-merge (squash) September 1, 2024 14:27
auto-merge was automatically disabled September 3, 2024 22:56

Head branch was pushed to by a user without write access

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 51c2b14 to bcf4d78CompareSeptember 3, 2024 22:56
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

thanks @Vexu for the auto-merge. Could you reenable it? I just rebased again. There was an error in aarch-linux-release, but it wasn't related to my stuff.

@jedisct1
jedisct1 enabled auto-merge (squash) September 4, 2024 04:53
@jedisct1
jedisct1 merged commit f87dd43 into ziglang:masterSep 4, 2024
@Arwalk
Arwalk deleted the add_stream_writer_base64 branch September 4, 2024 13:26
@ArwalkArwalk mentioned this pull request Sep 8, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Arwalk@jedisct1@marler8997
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); stdlib : base64 encode to writer by Arwalk · Pull Request #20961 · ziglang/zig · GitHub
Skip to content

stdlib : base64 encode to writer - #20961

Merged
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64
Sep 4, 2024
Merged

stdlib : base64 encode to writer#20961
jedisct1 merged 6 commits into
ziglang:masterfrom
Arwalk:add_stream_writer_base64

Conversation

@Arwalk

Copy link
Copy Markdown
Contributor

Hello,

The current base64 interface only allows encoding to slices, making it impractical (although not impossible) to use when encoding dynamically to a document (such as a json string, as an example).

This PR adds the encodeWriter API to Base64Encoder, relying on the destination having the writeAll interface of Writer. As it is possible to encode base64 data by chunks of 3 bytes, it progressively encodes the source data in the stream without unnecessary heap allocations.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 750cfea to db0c706CompareAugust 6, 2024 20:11
@jedisct1

Copy link
Copy Markdown
Contributor

This is a useful addition, thank you!

Ideally, a reader interface would also be great, but this is much more complicated.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

If i'm motivated i'll take a look into it. I think if we base ourserves on Reader's readBoundedBytes we should be able to chunk the decoding there too?

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

I realize i removed the comptime keyword on a test that was explicitely comptime. I should try to find a way to avoid this.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

There, using BoundedArray the tests works at comptime, while still showing that it uses Writer's writeAll.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Ideally, a reader interface would also be great, but this is much more complicated.

So i looked into it for a bit, and it's actually not that hard. The Reader interface is pretty neat and allows us to do this quite easily, so i added this interface in ab740ca

This means in theory that you could encode a file directly to base64 without having to load it in memory. Sounds pretty nice !

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

while i'm at it, should i try to do the reverse for decoding ?

@jedisct1

Copy link
Copy Markdown
Contributor

while i'm at it, should i try to do the reverse for decoding ?

That could be great, if only for consistency. But in a distinct PR.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Is there anything missing for this PR @jedisct1 ? Not trying to stress you on the matter, genuinely asking, as I do not know if there are any other prerequisites.

Thank you for your feedback.

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from ab740ca to ffc5b08CompareAugust 13, 2024 16:30
Comment threadlib/std/base64.zig
@Arwalk

Arwalk commented Aug 13, 2024

Copy link
Copy Markdown
ContributorAuthor

@marler8997 i applied your suggestions to the other method in b9dfe0f

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from b9dfe0f to 51c2b14CompareAugust 14, 2024 15:09
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Now with a zig fmt pass that was missing, sorry.

@Arwalk

Copy link
Copy Markdown
ContributorAuthor

Hey there. Anything missing here so it can be merged? I'm planning on doing the decoding part soon in another PR.

@Vexu
Vexu enabled auto-merge (squash) September 1, 2024 14:27
auto-merge was automatically disabled September 3, 2024 22:56

Head branch was pushed to by a user without write access

@Arwalk
Arwalkforce-pushed the add_stream_writer_base64 branch from 51c2b14 to bcf4d78CompareSeptember 3, 2024 22:56
@Arwalk

Copy link
Copy Markdown
ContributorAuthor

thanks @Vexu for the auto-merge. Could you reenable it? I just rebased again. There was an error in aarch-linux-release, but it wasn't related to my stuff.

@jedisct1
jedisct1 enabled auto-merge (squash) September 4, 2024 04:53
@jedisct1
jedisct1 merged commit f87dd43 into ziglang:masterSep 4, 2024
@Arwalk
Arwalk deleted the add_stream_writer_base64 branch September 4, 2024 13:26
@ArwalkArwalk mentioned this pull request Sep 8, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Arwalk@jedisct1@marler8997