Optimize example/jsonptr's write_dst

On a mid-range x86_64 laptop, processing the 181 MiB citylots.json file
from github.com/zemirco/sf-city-lots-json:

$ time gen/bin/example-jsonptr < citylots.json > /dev/null
Before this commit:
real    0m1.949s
After:
real    0m1.863s
Ratio: 1.05x
diff --git a/example/cbor-to-json/cbor-to-json.cc b/example/cbor-to-json/cbor-to-json.cc
index 2a9a76d..da9df53 100644
--- a/example/cbor-to-json/cbor-to-json.cc
+++ b/example/cbor-to-json/cbor-to-json.cc
@@ -137,7 +137,11 @@
 const char* g_new_line_then_256_indent_bytes;
 uint32_t g_bytes_per_indent_depth;
 
-uint8_t g_dst_array[32768];
+#ifndef DST_BUFFER_ARRAY_SIZE
+#define DST_BUFFER_ARRAY_SIZE (32 * 1024)
+#endif
+
+uint8_t g_dst_array[DST_BUFFER_ARRAY_SIZE];
 wuffs_base__io_buffer g_dst;
 
 uint32_t g_depth;
@@ -252,7 +256,7 @@
 }
 
 std::string  //
-write_dst(const void* s, size_t n) {
+write_dst_slow(const void* s, size_t n) {
   const uint8_t* p = static_cast<const uint8_t*>(s);
   while (n > 0) {
     size_t i = g_dst.writer_length();
@@ -276,6 +280,17 @@
   return "";
 }
 
+inline std::string  //
+write_dst(const void* s, size_t n) {
+  if (n <= (DST_BUFFER_ARRAY_SIZE - g_dst.meta.wi)) {
+    memcpy(g_dst.data.ptr + g_dst.meta.wi, s, n);
+    g_dst.meta.wi += n;
+    g_wrote_to_dst = true;
+    return "";
+  }
+  return write_dst_slow(s, n);
+}
+
 // ----
 
 class Callbacks : public wuffs_aux::DecodeCborCallbacks {
@@ -612,8 +627,7 @@
 
 std::string  //
 main1(int argc, char** argv) {
-  g_dst = wuffs_base__ptr_u8__writer(
-      &g_dst_array[0], (sizeof(g_dst_array) / sizeof(g_dst_array[0])));
+  g_dst = wuffs_base__ptr_u8__writer(&g_dst_array[0], DST_BUFFER_ARRAY_SIZE);
   g_depth = 0;
   g_ctx = context::none;
   g_wrote_to_dst = false;
diff --git a/example/json-to-cbor/json-to-cbor.cc b/example/json-to-cbor/json-to-cbor.cc
index 2c6bdfb..b1e4195 100644
--- a/example/json-to-cbor/json-to-cbor.cc
+++ b/example/json-to-cbor/json-to-cbor.cc
@@ -114,7 +114,11 @@
 
 // ----
 
-uint8_t g_dst_array[32768];
+#ifndef DST_BUFFER_ARRAY_SIZE
+#define DST_BUFFER_ARRAY_SIZE (32 * 1024)
+#endif
+
+uint8_t g_dst_array[DST_BUFFER_ARRAY_SIZE];
 wuffs_base__io_buffer g_dst;
 
 std::vector<uint32_t> g_quirks;
@@ -190,7 +194,7 @@
 }
 
 std::string  //
-write_dst(const void* s, size_t n) {
+write_dst_slow(const void* s, size_t n) {
   const uint8_t* p = static_cast<const uint8_t*>(s);
   while (n > 0) {
     size_t i = g_dst.writer_length();
@@ -213,6 +217,16 @@
   return "";
 }
 
+inline std::string  //
+write_dst(const void* s, size_t n) {
+  if (n <= (DST_BUFFER_ARRAY_SIZE - g_dst.meta.wi)) {
+    memcpy(g_dst.data.ptr + g_dst.meta.wi, s, n);
+    g_dst.meta.wi += n;
+    return "";
+  }
+  return write_dst_slow(s, n);
+}
+
 // ----
 
 class Callbacks : public wuffs_aux::DecodeJsonCallbacks {
@@ -298,8 +312,7 @@
 
 std::string  //
 main1(int argc, char** argv) {
-  g_dst = wuffs_base__ptr_u8__writer(
-      &g_dst_array[0], (sizeof(g_dst_array) / sizeof(g_dst_array[0])));
+  g_dst = wuffs_base__ptr_u8__writer(&g_dst_array[0], DST_BUFFER_ARRAY_SIZE);
 
   TRY(parse_flags(argc, argv));
 
diff --git a/example/jsonptr/jsonptr.cc b/example/jsonptr/jsonptr.cc
index 1a71628..3064ef0 100644
--- a/example/jsonptr/jsonptr.cc
+++ b/example/jsonptr/jsonptr.cc
@@ -818,10 +818,7 @@
 }
 
 const char*  //
-write_dst(const void* s, size_t n) {
-  if (g_suppress_write_dst > 0) {
-    return nullptr;
-  }
+write_dst_slow(const void* s, size_t n) {
   const uint8_t* p = static_cast<const uint8_t*>(s);
   while (n > 0) {
     size_t i = g_dst.writer_length();
@@ -848,6 +845,19 @@
   return nullptr;
 }
 
+inline const char*  //
+write_dst(const void* s, size_t n) {
+  if (g_suppress_write_dst > 0) {
+    return nullptr;
+  } else if (n <= (DST_BUFFER_ARRAY_SIZE - g_dst.meta.wi)) {
+    memcpy(g_dst.data.ptr + g_dst.meta.wi, s, n);
+    g_dst.meta.wi += n;
+    g_wrote_to_dst = true;
+    return nullptr;
+  }
+  return write_dst_slow(s, n);
+}
+
 // ----
 
 uint8_t  //