From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) by sourceware.org (Postfix) with ESMTPS id 457173858D1E; Mon, 24 Apr 2023 17:24:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 457173858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-506bdf29712so35377618a12.0; Mon, 24 Apr 2023 10:24:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682357078; x=1684949078; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=FZEpPlqYBz36HOk3RAbfx4ah7N9JgcP7u6l6zGdZP2Y=; b=O5c5Ys1VTeNAL0/IBRMJ47rbYuALaDmxf4fKuCCEl5uNlZqH9ec8cbfeR46LJRMBpt EZ6aiWI3LiXY5VkrQk+EBKhmjYOm6c31yhl9pZZMUxICkpBCPfwydjQXW5fmWNmrbbKL W2WNVHOGGfMGUGnPC5CvoFXsPXwKvmXm2eTUsASWbxJZD7eQf1yNvNWckyZJdDnSOCVT PBwhfi61xgCRzBs0wsHGzrdWddtxxv+AZT9J8l5hjSLZ4RQgnsZ1K1EwGDW7gPJ6FKrp whiBV1kpD+poct/F2XG827/yAOr9lvVpQt89krT5mxVMT0ZgcqYms4m7TpO002cX8JPc Nz1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682357078; x=1684949078; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=FZEpPlqYBz36HOk3RAbfx4ah7N9JgcP7u6l6zGdZP2Y=; b=V6alZLiIy3I+dYwjd8e5HeNY+940qJZeZMgnffmflSLiuq+04x5qORXFDAme85N8yX cfhFZ38MIpI3wTLq1NOSDoxqTe2XJ2yN5NdvtTiAqEr3wsDRke8pWUueKN59BuKtiQni gBLZgtjNDUX5p83Sp63paH2yC8ZsLs65Lp6I4tKBHfxSMeN8zL06NIG5+pW8IZSM5uz8 vdVKBgjElaL66owjgg3D0a3Z4zWvMA20TYrHfDCLdxDaMtC2PdCApa73c8v/NbGAi+lH p3QCxqegguw5JFAIFSy+BUM+rEwr9zp4g8NCr29cpPYcceglVA9MeNgvpE0767hYlkAB NKKg== X-Gm-Message-State: AAQBX9dQ4c2H5gfWnUZSiBRCvTtiar9fteNuGlByKA93ckJagQyTb+YR 6jWtPHFllXmOBaceKb/DhMmZajHpz14= X-Google-Smtp-Source: AKy350ZF6l1aMzhk325hpZP3eZwjzq8SiajZ8ldoUp8OXd9doysJA7h6GRnqL+dh6iKfKc9bdWRIUA== X-Received: by 2002:a05:6402:42c8:b0:506:72f8:eb10 with SMTP id i8-20020a05640242c800b0050672f8eb10mr18421693edc.0.1682357078152; Mon, 24 Apr 2023 10:24:38 -0700 (PDT) Received: from [10.25.1.246] ([109.190.253.11]) by smtp.gmail.com with ESMTPSA id d22-20020aa7d696000000b00504a7deefd6sm4901498edr.7.2023.04.24.10.24.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 24 Apr 2023 10:24:37 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------vB5sEZkkX8Rc9HE090KHZsyu" Message-ID: Date: Mon, 24 Apr 2023 19:24:32 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH] Implement std::advance for istreambuf_iterator using pubseekoff To: Jonathan Wakely Cc: "libstdc++@gcc.gnu.org" , gcc-patches References: <5531cf67-62b3-a4bc-c611-0fe026b75066@gmail.com> <00a8f27e-cc72-9852-45b3-1a1082d25ea2@gmail.com> Content-Language: en-US From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= In-Reply-To: X-Spam-Status: No, score=-8.4 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_BARRACUDACENTRAL,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------vB5sEZkkX8Rc9HE090KHZsyu Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit I had totally forgotten about it myself. The occasion to take a fresh look at it. Here is a new version considering 1st pubseekoff call returned value to find out if it can be used. I removed the check/comparison with 2nd call result as it's not usable. In new 4_neg.cc test case if I ask to advance istreambuf_iterator by 100000 the returned pos_type is showing 100000 offset even if it is obviously false. You need to read next byte to see that it is eof.     libstdc++: Implement std::advance for istreambuf_iterator using pubseekoff     If advance increment is smaller than input buffer size just advance in this     buffer thanks to __safe_gbump. If increment is larger check for seekoff support     and use it accordingly. Otherwise fallback on current __safe_gbump/underflow loop.     libstdc++-v3/ChangeLog:             * include/bits/streambuf_iterator.h (advance): Re-implement             using streambuf pubseekoff/seekoff when supported.             * testsuite/25_algorithms/advance/istreambuf_iterators/char/4_neg.cc: New             test case. Ok to commit when back in stage 1 ? François On 31/03/2023 23:03, Jonathan Wakely wrote: > On Tue, 15 Oct 2019 at 21:20, François Dumont wrote: >> Here is an update to set _M_sbuf to null if the user advance too much. >> >> Note that in this case the streambuf remains un-modified which is >> different from the current implementation. I think it is another >> enhancement. >> >> I also change the Debug assertion message for something more dedicated >> to std::advance algo. >> >> François >> >> On 10/14/19 10:12 PM, François Dumont wrote: >>> The same way I proposed to review std::copy overload for >>> istreambuf_iterator we can implement std::advance using pubseekoff. >>> >>> It is both a cleaner implementation and avoids yet another friend >>> declaration. > Looks like I never sent my review of this one, it's been sitting in my > draft mails for years, sorry. > > It looks like this will fail if the streambuf doesn't support seeking. > The default behaviour for seekoff is to return -1, in which case > you'll get -1 for both calls to pubseekoff, and new_pos - cur_pos will > be zero, which is not equal to n, so you set the istreambuf_iterator > to end-of-stream. That seems wrong, we could still advance using the > old code (or just call ++ in a loop!) > > > >>> * include/std/streambuf >>> (advance(istreambuf_iterator<>&, _Distance)): Remove friend >>> declaration. >>> * include/bits/streambuf_iterator.h (__copy_move_a2): Re-implement >>> using >>> streambuf pubseekoff. >>> >>> Tested under Linux x86_64. >>> >>> Ok to commit ? >>> >>> François >>> --------------vB5sEZkkX8Rc9HE090KHZsyu Content-Type: text/x-patch; charset=UTF-8; name="istreambuf_iterator_advance.patch" Content-Disposition: attachment; filename="istreambuf_iterator_advance.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvc3RyZWFtYnVmX2l0ZXJh dG9yLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5o CmluZGV4IDMyMjg1YTY2OGZjLi40NTI3NjYwZTE5MSAxMDA2NDQKLS0tIGEvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaAorKysgYi9saWJzdGRjKyst djMvaW5jbHVkZS9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oCkBAIC00NzksMzcgKzQ3OSw1 OSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCiAgICAgICBfX2dsaWJj eHhfYXNzZXJ0KF9fbiA+IDApOwogICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2NvbmQoIV9f aS5fTV9hdF9lb2YoKSwKLQkJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNn X2luY19pc3RyZWFtYnVmKQotCQkJICAgICAgLl9NX2l0ZXJhdG9yKF9faSkpOworCQkJICAg ICAgX01fbWVzc2FnZShfX2dudV9kZWJ1Zzo6X19tc2dfYWR2YW5jZV9vb2IpCisJCQkgICAg ICAuX01faXRlcmF0b3IoX19pKQorCQkJICAgICAgLl9NX2ludGVnZXIoX19uKSk7CiAKICAg ICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+CQkgICBfX2lzX2l0ZXJh dG9yX3R5cGU7CiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXNfaXRlcmF0b3JfdHlwZTo6 dHJhaXRzX3R5cGUJICAgdHJhaXRzX3R5cGU7CiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f aXNfaXRlcmF0b3JfdHlwZTo6c3RyZWFtYnVmX3R5cGUgIHN0cmVhbWJ1Zl90eXBlOwogICAg ICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUJCSAgIGludF90eXBl OworICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUJCSAgIG9m Zl90eXBlOworICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJlYW1idWZfdHlwZTo6cG9zX3R5 cGUJCSAgIHBvc190eXBlOwogICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNf dHlwZTo6ZW9mKCk7CisgICAgICBjb25zdCBwb3NfdHlwZSBfX25wb3MgPSBwb3NfdHlwZShv ZmZfdHlwZSgtMSkpOwogCiAgICAgICBzdHJlYW1idWZfdHlwZSogX19zYiA9IF9faS5fTV9z YnVmOwotICAgICAgd2hpbGUgKF9fbiA+IDApCi0JewogICAgICAgc3RyZWFtc2l6ZSBfX3Np emUgPSBfX3NiLT5lZ3B0cigpIC0gX19zYi0+Z3B0cigpOwotCSAgaWYgKF9fc2l6ZSA+IF9f bikKLQkgICAgeworICAgICAgaWYgKF9fc2l6ZSA+PSBfX24pCiAJX19zYi0+X19zYWZlX2di dW1wKF9fbik7Ci0JICAgICAgYnJlYWs7Ci0JICAgIH0KLQorICAgICAgZWxzZQorCXsKKwkg IC8vIENoZWNrIGZvciBzZWVrb2ZmIHN1cHBvcnQuCisJICBpZiAoX19zYi0+cHVic2Vla29m ZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6aW4pICE9IF9fbnBvcykKKwkgICAgX19z Yi0+cHVic2Vla29mZihfX24sIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7CisJICBl bHNlCisJICAgIHsKKwkgICAgICBfR0xJQkNYWF9ERUJVR19PTkxZKF9EaXN0YW5jZSBfX25f b3JpZyA9IF9fbik7CisJICAgICAgZm9yICg7OykKKwkJewogCQkgIF9fc2ItPl9fc2FmZV9n YnVtcChfX3NpemUpOwogCQkgIF9fbiAtPSBfX3NpemU7CisKKwkJICBpZiAoX19uID09IDAp CisJCSAgICBicmVhazsKKwogCQkgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19z Yi0+dW5kZXJmbG93KCksIF9fZW9mKSkKIAkJICAgIHsKLQkgICAgICBfX2dsaWJjeHhfcmVx dWlyZXNfY29uZChfX24gPT0gMCwKLQkJCQlfTV9tZXNzYWdlKF9fZ251X2RlYnVnOjpfX21z Z19pbmNfaXN0cmVhbWJ1ZikKLQkJCQkuX01faXRlcmF0b3IoX19pKSk7CisJCSAgICAgIF9f aS5fTV9zYnVmID0gMDsKIAkJICAgICAgYnJlYWs7CiAJCSAgICB9CisKKwkJICBfX3NpemUg PSBfX3NiLT5lZ3B0cigpIC0gX19zYi0+Z3B0cigpOworCQkgIGlmIChfX3NpemUgPiBfX24p CisJCSAgICBfX3NpemUgPSBfX247CisJCX0KKworCSAgICAgIF9HTElCQ1hYX0RFQlVHX09O TFkoX19uID0gX19uX29yaWcpOworCSAgICB9CiAJfQogCiAgICAgICBfX2kuX01fYyA9IF9f ZW9mOworICAgICAgX19nbGliY3h4X3JlcXVpcmVzX2NvbmQoIV9faS5fTV9hdF9lb2YoKSwK KwkJCSAgICAgIF9NX21lc3NhZ2UoX19nbnVfZGVidWc6Ol9fbXNnX2FkdmFuY2Vfb29iKQor CQkJICAgICAgLl9NX2l0ZXJhdG9yKF9faSkKKwkJCSAgICAgIC5fTV9pbnRlZ2VyKF9fbikp OwogICAgIH0KIAogLy8vIEB9IGdyb3VwIGl0ZXJhdG9ycwpkaWZmIC0tZ2l0IGEvbGlic3Rk YysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL2FkdmFuY2UvaXN0cmVhbWJ1Zl9pdGVy YXRvcnMvY2hhci80X25lZy5jYyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjVfYWxnb3Jp dGhtcy9hZHZhbmNlL2lzdHJlYW1idWZfaXRlcmF0b3JzL2NoYXIvNF9uZWcuY2MKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg4Y2NhZWZmNDk5Ci0tLSAvZGV2 L251bGwKKysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL2FkdmFu Y2UvaXN0cmVhbWJ1Zl9pdGVyYXRvcnMvY2hhci80X25lZy5jYwpAQCAtMCwwICsxLDY1IEBA CisvLyB7IGRnLXJlcXVpcmUtZmlsZWlvICIiIH0KKy8vIHsgZGctZG8gcnVuIHsgeGZhaWwg Ki0qLSogfSB9CisvLyB7IGRnLXJlcXVpcmUtZGVidWctbW9kZSAiIiB9CisKKyNpbmNsdWRl IDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxmc3RyZWFtPgorI2luY2x1ZGUgPGFsZ29yaXRobT4K KworI2luY2x1ZGUgPHRlc3RzdWl0ZV9ob29rcy5oPgorCit2b2lkIHRlc3QwMSgpCit7Cisg IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKyAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9y PGNoYXI+IGluX2l0ZXJhdG9yX3R5cGU7CisKKyAgdW5zaWduZWQgZm91bmQgPSAwOworCisg IHsKKyAgICBpZnN0cmVhbSBmYnVmKCJpc3RyZWFtX3VuZm9ybWF0dGVkLTEudHh0Iik7CisK KyAgICBpbl9pdGVyYXRvcl90eXBlIGJlZyhmYnVmKTsKKyAgICBpbl9pdGVyYXRvcl90eXBl IGVuZDsKKworICAgIGZvciAoOzspCisgICAgICB7CisJYmVnID0gZmluZChiZWcsIGVuZCwg JzEnKTsKKwlpZiAoYmVnID09IGVuZCkKKwkgIGJyZWFrOworCisJKytmb3VuZDsKKwlWRVJJ RlkoICpiZWcgPT0gJzEnICk7CisKKwlhZHZhbmNlKGJlZywgOSk7CisJVkVSSUZZKCAqYmVn ID09ICcwJyApOworICAgICAgfQorICB9CisKKyAgeworICAgIGlmc3RyZWFtIGZidWYoImlz dHJlYW1fdW5mb3JtYXR0ZWQtMS50eHQiKTsKKworICAgIGluX2l0ZXJhdG9yX3R5cGUgYmVn KGZidWYpOworICAgIGluX2l0ZXJhdG9yX3R5cGUgZW5kOworCisgICAgYmVnID0gZmluZChi ZWcsIGVuZCwgJzEnKTsKKyAgICBWRVJJRlkoIGJlZyAhPSBlbmQgKTsKKyAgICBWRVJJRlko ICpiZWcgPT0gJzEnICk7CisKKyAgICBhZHZhbmNlKGJlZywgOSk7CisgICAgVkVSSUZZKCAq YmVnID09ICcwJyApOworCisgICAgdW5zaWduZWQgbGluZV9sZW5ndGggPSAxMDsKKyAgICB3 aGlsZSAoKisrYmVnICE9ICcxJykKKyAgICAgICsrbGluZV9sZW5ndGg7CisKKyAgICAvLyBU cnkgdG8ganVtcCBkaXJlY3RseSB0byB0aGUgZW5kICsgMSB0aHJvdWdoIGFkdmFuY2UuCisg ICAgYWR2YW5jZShiZWcsIChmb3VuZCAtIDIpICogbGluZV9sZW5ndGggKyA5ICsgMik7Cisg IH0KK30KKworaW50IG1haW4oKQoreworICB0ZXN0MDEoKTsKKyAgcmV0dXJuIDA7Cit9Cg== --------------vB5sEZkkX8Rc9HE090KHZsyu--