Topic: Clusters instead of std::list and std::map!
Author: svenbieg@web.de
Date: Thu, 11 Oct 2018 10:09:12 -0700 (PDT)
Raw View
------=_Part_365_1700038397.1539277752326
Content-Type: multipart/alternative;
boundary="----=_Part_366_453161427.1539277752326"
------=_Part_366_453161427.1539277752326
Content-Type: text/plain; charset="UTF-8"
Hello Mr. and Mrs.,
i have written an algorithm which can order and sort large numbers of items.
It creates a directory-tree in form of a pyramid, moving the entries and
groups accordingly.
<http://svenbieg.azurewebsites.net/Clusters/Pyramid.jpg>
I provide it in form of c++-templates via GitHub
<http://github.com/svenbieg/clusters>.
I hope my solution will make it into the standard-library!
Best regards,
Sven Bieg
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/cf119955-9bde-46f6-84bd-01aabf5b4a6d%40isocpp.org.
------=_Part_366_453161427.1539277752326
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Hello Mr. and Mrs.,</div><div><br></div><div>i have w=
ritten an algorithm which can order and sort large numbers of items.</div><=
div>It creates a directory-tree in form of a pyramid, moving the entries an=
d groups accordingly.</div><div><br></div><div><br></div><p class=3D"separa=
tor" style=3D"text-align: left; clear: both;"><a style=3D"margin-right: 1em=
; margin-left: 1em;" href=3D"http://svenbieg.azurewebsites.net/Clusters/Pyr=
amid.jpg" imageanchor=3D"1"><img src=3D"http://svenbieg.azurewebsites.net/C=
lusters/Pyramid.jpg" border=3D"0"></a></p><div><br></div><div>I provide it =
in form of c++-templates via <a href=3D"http://github.com/svenbieg/clusters=
">GitHub</a>.</div><div><br></div><div>=C2=A0I hope my solution will make i=
t into the standard-library!</div><div><br></div><div>Best regards,</div><d=
iv>Sven Bieg</div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/cf119955-9bde-46f6-84bd-01aabf5b4a6d%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/cf119955-9bde-46f6-84bd-01aabf5b4a6d=
%40isocpp.org</a>.<br />
------=_Part_366_453161427.1539277752326--
------=_Part_365_1700038397.1539277752326--
.
Author: =?UTF-8?B?R2HFoXBlciBBxb5tYW4=?= <gasper.azman@gmail.com>
Date: Thu, 11 Oct 2018 20:15:36 +0100
Raw View
--0000000000005fac0d0577f8cc04
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Hi Sven,
Your solution might make it to boost. In order for something to make it to
the standard library, you have to specify what the interface does (and not
how it does it). I took a read through your website that you wrote for it.
It has some nice graphs, which look hopeful; however, I didn't find any
mention of other important details of your data structure, and I have
questions.
1. what are the characteristics of iterator stability for your structure?
2. how would one use it with a custom allocator? As far as I'm aware, it is
not allocator-aware.
3. how does reclaiming memory work when it gets smaller?
4. could it support node splicing? How about sublist splicing? These are
important characteristics of std::list.
5. could you implement lower_bound and upper_bound for this data structure?
How about equal_range?
6. When is it allowed to throw? As far as I saw, even iterators allocate -
which was quite surprising.
All in all, I don't think this code would be accepted into boost - you'd
have to undergo quite a vigorous review process, and change the naming
scheme on all the names, probably remove all the C++/CLI extensions, and
change all the microsoftisms to regular c++.
The standard, as mentioned, does not accept code - it accepts
specifications. We'll gladly take a look if you write a thorough
specification of the API and its behaviour, though.
Thank you very much for your contribution,
Ga=C5=A1per
On Thu, Oct 11, 2018 at 6:09 PM <svenbieg@web.de> wrote:
> Hello Mr. and Mrs.,
>
> i have written an algorithm which can order and sort large numbers of
> items.
> It creates a directory-tree in form of a pyramid, moving the entries and
> groups accordingly.
>
>
> <http://svenbieg.azurewebsites.net/Clusters/Pyramid.jpg>
>
> I provide it in form of c++-templates via GitHub
> <http://github.com/svenbieg/clusters>.
>
> I hope my solution will make it into the standard-library!
>
> Best regards,
> Sven Bieg
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposals+unsubscribe@isocpp.org.
> To post to this group, send email to std-proposals@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/cf119955-9bd=
e-46f6-84bd-01aabf5b4a6d%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/cf119955-9b=
de-46f6-84bd-01aabf5b4a6d%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAANG%3DkUV6EO2BQu5A5fFWsXwvyu9u3CyHvi4FM6xM4gzd=
HBtNg%40mail.gmail.com.
--0000000000005fac0d0577f8cc04
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Hi Sven,<div><br></div><div>Your solution might make it to=
boost. In order for something to make it to the standard library, you have=
to specify what the interface does (and not how it does it). I took a read=
through your website that you wrote for it. It has some nice graphs, which=
look hopeful; however, I didn't find any mention of other important de=
tails of your data structure, and I have questions.</div><div><br></div><di=
v>1. what are the characteristics of iterator stability for your structure?=
</div><div>2. how would one use it with a custom allocator? As far as I'=
;m aware, it is not allocator-aware.</div><div>3. how does reclaiming memor=
y work when it gets smaller?</div><div>4. could it support node splicing? H=
ow about sublist splicing? These are important characteristics of std::list=
..</div><div>5. could you implement lower_bound and upper_bound for this dat=
a structure? How about equal_range?</div><div>6. When is it allowed to thro=
w? As far as I saw, even iterators allocate - which was quite surprising.</=
div><div><br></div><div>All in all, I don't think this code would be ac=
cepted into boost - you'd have to undergo quite a vigorous review proce=
ss, and change the naming scheme on all the names, probably remove all the =
C++/CLI extensions, and change all the microsoftisms to regular c++.</div><=
div><br></div><div>The standard, as mentioned, does not accept code - it ac=
cepts specifications. We'll gladly take a look if you write a thorough =
specification of the API and its behaviour, though.</div><div><br></div><di=
v>Thank you very much for your contribution,</div><div><br></div><div>Ga=C5=
=A1per</div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Thu, O=
ct 11, 2018 at 6:09 PM <<a href=3D"mailto:svenbieg@web.de">svenbieg@web.=
de</a>> wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margi=
n:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">=
<div>Hello Mr. and Mrs.,</div><div><br></div><div>i have written an algorit=
hm which can order and sort large numbers of items.</div><div>It creates a =
directory-tree in form of a pyramid, moving the entries and groups accordin=
gly.</div><div><br></div><div><br></div><p class=3D"m_6023473583512991582se=
parator" style=3D"text-align:left;clear:both"><a style=3D"margin-right:1em;=
margin-left:1em" href=3D"http://svenbieg.azurewebsites.net/Clusters/Pyramid=
..jpg" target=3D"_blank"><img src=3D"http://svenbieg.azurewebsites.net/Clust=
ers/Pyramid.jpg" border=3D"0"></a></p><div><br></div><div>I provide it in f=
orm of c++-templates via <a href=3D"http://github.com/svenbieg/clusters" ta=
rget=3D"_blank">GitHub</a>.</div><div><br></div><div>=C2=A0I hope my soluti=
on will make it into the standard-library!</div><div><br></div><div>Best re=
gards,</div><div>Sven Bieg</div></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_=
blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/cf119955-9bde-46f6-84bd-01aabf5b4a6d%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/cf119955-9bde-=
46f6-84bd-01aabf5b4a6d%40isocpp.org</a>.<br>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkUV6EO2BQu5A5fFWsXwvyu9u3CyHv=
i4FM6xM4gzdHBtNg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkUV6EO2=
BQu5A5fFWsXwvyu9u3CyHvi4FM6xM4gzdHBtNg%40mail.gmail.com</a>.<br />
--0000000000005fac0d0577f8cc04--
.
Author: Bengt Gustafsson <bengt.gustafsson@beamways.com>
Date: Thu, 11 Oct 2018 23:08:13 -0700 (PDT)
Raw View
------=_Part_532_1472205205.1539324493422
Content-Type: text/plain; charset="UTF-8"
This looks like an in memory B-tree to me. This is a very useful data structure which I would like to see in std. It should be possible to make it at least as close to map as unordered_map is.
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/ea728b51-630c-4908-89f5-1b444cc87a51%40isocpp.org.
------=_Part_532_1472205205.1539324493422--
.
Author: Martin Moene <m.j.moene@eld.physics.LeidenUniv.nl>
Date: Fri, 12 Oct 2018 11:29:05 +0200
Raw View
This is a multi-part message in MIME format.
--------------14243398CFF741F540CC0FF4
Content-Type: text/plain; charset="UTF-8"; format=flowed
Content-Transfer-Encoding: quoted-printable
On 11-Oct-18 19:09, svenbieg@web.de wrote:
> =C2=A0I hope my solution will make it into the standard-library!
To get an idea about standardi[sz]ing:
* How To Submit a Proposal <https://isocpp.org/std/submit-a-proposal>
* The life of an ISO proposal: From =E2=80=9Ccool idea=E2=80=9D to =E2=80=
=9Cinternational standard=E2=80=9D
<https://isocpp.org/std/the-life-of-an-iso-proposal>
Best regards
Martin
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/3c8fb242-bdde-1ee8-878f-94bfb3ae084c%40eld.physi=
cs.LeidenUniv.nl.
--------------14243398CFF741F540CC0FF4
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8=
">
</head>
<body text=3D"#000000" bgcolor=3D"#FFFFFF">
<div class=3D"moz-cite-prefix">On 11-Oct-18 19:09, <a class=3D"moz-txt-=
link-abbreviated" href=3D"mailto:svenbieg@web.de">svenbieg@web.de</a>
wrote:<br>
</div>
<blockquote type=3D"cite"
cite=3D"mid:cf119955-9bde-46f6-84bd-01aabf5b4a6d@isocpp.org">
<div>=C2=A0I hope my solution will make it into the standard-library!=
</div>
</blockquote>
<br>
To get an idea about standardi[sz]ing:<br>
<ul id=3D"nav-sub">
<li><a href=3D"https://isocpp.org/std/submit-a-proposal">How To
Submit a Proposal</a></li>
<li><a href=3D"https://isocpp.org/std/the-life-of-an-iso-proposal">Th=
e
life of an ISO proposal: From =E2=80=9Ccool idea=E2=80=9D to =E2=
=80=9Cinternational
standard=E2=80=9D</a></li>
</ul>
<p>Best regards<br>
Martin</p>
<p><br>
</p>
</body>
</html>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/3c8fb242-bdde-1ee8-878f-94bfb3ae084c%=
40eld.physics.LeidenUniv.nl?utm_medium=3Demail&utm_source=3Dfooter">https:/=
/groups.google.com/a/isocpp.org/d/msgid/std-proposals/3c8fb242-bdde-1ee8-87=
8f-94bfb3ae084c%40eld.physics.LeidenUniv.nl</a>.<br />
--------------14243398CFF741F540CC0FF4--
.
Author: svenbieg@web.de
Date: Sat, 13 Oct 2018 01:42:00 -0700 (PDT)
Raw View
------=_Part_1044_1625107552.1539420120859
Content-Type: multipart/alternative;
boundary="----=_Part_1045_1961142715.1539420120859"
------=_Part_1045_1961142715.1539420120859
Content-Type: text/plain; charset="UTF-8"
Hello Gasper,
i'm glad to see You. I don't know if can answer all Your questions, because
i am a hobby-programmer not a professional. But i am going to try:
1) The iterator stores the position for each level. Because the cluster
starts with only one level and the number can grow, it is allocated.
I'm not sure what You mean with iterator-stability, iteration ain't
critical. If the position on one level reaches the end, it is reset to zero
and the
position of the parent is increased. The most critical process is the
insertion. With a group-size of 100 items i have to move at most 10.000
items
on the first level. If new groups have to be allocated, the maximum number
is the number of levels, while the number of items grows exponential.
The groups are half-full at least, because an empty group is created only
when all groups on a level are full,
and the groups are combined with their neighbors when possible.
2) You need to use new and delete, wich can be overloaded. The entries are
moved in the structure without calling their con-/destructors.
3) Every time an entry is removed, the parent checks, if the group can be
combined with the neighbor-groups. The groups are half-full at minimum.
4) My algorithm works a little bit different. I have item-groups on the
lowest level, and parent-groups on higher levels.
The parent-group fails to insert an item, it splits the child-group when
possible. If the root is full and can not be split,
a new root is created.
5) In the index, the items are in ascending order. It references the first
and the last entry. I think, this is what You mean.
6) An exception can be thrown, every time memory needs to be allocated. I'm
not using exceptions, only assertion for debugging.
I'm using Visual Studio and the Windows Runtime environment. I'm not using
the standard-library directly.
Maybe You can help me to write a standard-implementation?
Best regards,
Sven
>
>>
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/09f8e2a6-871c-4474-b887-1cfec7d3a7d0%40isocpp.org.
------=_Part_1045_1961142715.1539420120859
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Hello Gasper,</div><div><br></div><div>i'm glad t=
o see You. I don't know if can answer all Your questions, because i am =
a hobby-programmer not a professional. But i am going to try:<br></div><div=
><br></div><div>1) The iterator stores the position for each level. Because=
the cluster starts with only one level and the number can grow, it is allo=
cated.</div><div>I'm not sure what You mean with iterator-stability, it=
eration ain't critical. If the position on one level reaches the end, i=
t is reset to zero and the</div><div>position of the parent is increased. T=
he most critical process is the insertion. With a group-size of 100 items i=
have to move at most 10.000 items</div><div>on the first level. If new gro=
ups have to be allocated, the maximum number is the number of levels, while=
the number of items grows exponential.</div><div>The groups are half-full =
at least, because an empty group is created only when all groups on a level=
are full,</div><div>and the groups are combined with their neighbors when =
possible.=C2=A0</div><div><br></div><div>2) You need to use new and delete,=
wich can be overloaded. The entries are moved in the structure without cal=
ling their con-/destructors.</div><div><br></div><div>3) Every time an entr=
y is removed, the parent checks, if the group can be combined with the neig=
hbor-groups. The groups are half-full at minimum.</div><div><br></div><div>=
4) My algorithm works a little bit different. I have item-groups on the low=
est level, and parent-groups on higher levels.</div><div>The parent-group f=
ails to insert an item, it splits the child-group when possible. If the roo=
t is full and can not be split,</div><div>a new root is created.</div><div>=
<br></div><div>5) In the index, the items are in ascending order. It refere=
nces the first and the last entry. I think, this is what You mean.</div><di=
v><br></div><div>6) An exception can be thrown, every time memory needs to =
be allocated. I'm not using exceptions, only assertion for debugging.</=
div><div><br></div><div>I'm using Visual Studio and the Windows Runtime=
environment. I'm not using the standard-library directly.</div><div>Ma=
ybe You can help me to write a standard-implementation?</div><div><br></div=
><div>Best regards,</div><div><br></div><div>Sven</div><blockquote class=3D=
"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc s=
olid;padding-left: 1ex;"><div class=3D"gmail_quote"><blockquote class=3D"gm=
ail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-le=
ft:1ex"><br>
</blockquote></div>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/09f8e2a6-871c-4474-b887-1cfec7d3a7d0%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/09f8e2a6-871c-4474-b887-1cfec7d3a7d0=
%40isocpp.org</a>.<br />
------=_Part_1045_1961142715.1539420120859--
------=_Part_1044_1625107552.1539420120859--
.
Author: =?UTF-8?B?R2HFoXBlciBBxb5tYW4=?= <gasper.azman@gmail.com>
Date: Sat, 13 Oct 2018 18:18:36 +0100
Raw View
--000000000000a2448005781f6579
Content-Type: text/plain; charset="UTF-8"
Dear Sven,
With my email, I was trying to do two things:
a) I asked you a very small subset of the questions you need good clear
answers for if you want to attempt getting this into the standard library.
The standardization process requires a very thorough specification of what
every part of the data structure or algorithm does, what its effects are,
and so on. A good generic component of the standard library has very many
facets, including:
- iterator stability guarantees
- what operations may throw
- allocator awareness
- adherence to C++ design principles (iterators are cheap to copy and thin!)
I was trying to make sure you understood at least some of the reasons your
library is not ready for inclusion. It will take a lot of work, almost all
of it by you, to get it to the point where getting it into the standard
would be feasible. That said, everyone wants good algorithms and data
structures to be in the standard library! No-one will tell you that you
shouldn't spend the time and work to get it to the quality level required
for inclusion. However, be prepared to have to improve your design (perhaps
for years) until everyone is satisfied.
The standardization process works as a bunch of authors pushing their
contributions that they care about through the committee that finds flaws
in them until they can't find flaws anymore, and then vote it in. It's
basically like the most stringent code review process ever designed, except
it doesn't review code - it reviews specifications. If that's not your cup
of tea, you're welcome to keep your library on github forever, where it
will be useful to everyone that has the ability to pull it down and
integrate it in their project.
Thank you for your answers. I'll reply to each with the design issues they
bring up.
1) The iterator stores the position for each level. Because the cluster
> starts with only one level and the number can grow, it is allocated.
> I'm not sure what You mean with iterator-stability, iteration ain't
> critical.
>
Iteration is critical. However, iterators are not used just for iteration -
they are also used as coordinates into your data structure that refer to
elements. Their stability (whether they remain valid when the data
structure changes) is critical for integrating your data structure with
anything else in the language.
The standard library assumes iterators are cheap (and noexcept!) to copy
and cheap to hold. Your iterators do not fit this model (they allocate),
therefore they are not a good fit for the standard library with this
design. Perhaps you can think on that for a bit.
> If the position on one level reaches the end, it is reset to zero and the
> position of the parent is increased. The most critical process is the
> insertion. With a group-size of 100 items i have to move at most 10.000
> items
> on the first level. If new groups have to be allocated, the maximum number
> is the number of levels, while the number of items grows exponential.
> The groups are half-full at least, because an empty group is created only
> when all groups on a level are full,
> and the groups are combined with their neighbors when possible.
>
Iterators should probably have nothing to do with that.
> 2) You need to use new and delete, wich can be overloaded. The entries are
> moved in the structure without calling their con-/destructors.
>
Overloading new and delete are frowned upon and work per-type, not per-use,
so allocator support is essential for the standard library.
> 3) Every time an entry is removed, the parent checks, if the group can be
> combined with the neighbor-groups. The groups are half-full at minimum.
>
Thanks!
> 4) My algorithm works a little bit different. I have item-groups on the
> lowest level, and parent-groups on higher levels.
> The parent-group fails to insert an item, it splits the child-group when
> possible. If the root is full and can not be split,
> a new root is created.
>
Therefore it cannot be a replacement for std::list. Lists have very few
applications where they are the best data structure, but to my knowledge
all of them involve complete stability of nodes (no iterator invalidation
except on deletion of pointed-to node), the ability to splice a node or a
few in and out (lru-cache, for instance), and keeping the order of nodes as
inserted. Nobody uses a list as a sorted-by-key container.
> 5) In the index, the items are in ascending order. It references the first
> and the last entry. I think, this is what You mean.
>
It seems that you can then. Why is it not in the interface?
> 6) An exception can be thrown, every time memory needs to be allocated.
> I'm not using exceptions, only assertion for debugging.
>
My question was mostly related to the fact that you have no specification
of which operations on your structure can throw (in other words, use new).
I suggest thinking about that one.
> I'm using Visual Studio and the Windows Runtime environment. I'm not using
> the standard-library directly.
>
Your data structure should not require the windows runtime if you are
targeting the standard library.
Maybe You can help me to write a standard-implementation?
>
I'm afraid I don't have enough spare time to attempt that. We on this list
will happily tell you what is missing though, so you can fix it and try
again.
> Best regards,
>
> Sven
>
>>
>>> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposals+unsubscribe@isocpp.org.
> To post to this group, send email to std-proposals@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/09f8e2a6-871c-4474-b887-1cfec7d3a7d0%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/09f8e2a6-871c-4474-b887-1cfec7d3a7d0%40isocpp.org?utm_medium=email&utm_source=footer>
> .
>
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkWaTRGpS9fHeJChY9UoE9fwNS1uHUN86%2BUbB5E1OcT8oA%40mail.gmail.com.
--000000000000a2448005781f6579
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"auto"><div dir=3D"ltr">Dear Sven,<div><br></div><div>With my em=
ail, I was trying to do two things:</div><div>a) I asked you a very small s=
ubset of the questions you need good clear answers for if you want to attem=
pt getting this into the standard library. The standardization process requ=
ires a very thorough specification of what every part of the data structure=
or algorithm does, what its effects are, and so on. A good generic compone=
nt of the standard library has very many facets, including:</div><div>- ite=
rator stability guarantees</div><div>- what operations may throw</div><div>=
- allocator awareness</div><div>- adherence to C++ design principles (itera=
tors are cheap to copy and thin!)</div><div><br></div><div>I was trying to =
make sure you understood at least some of the reasons your library is not r=
eady for inclusion. It will take a lot of work, almost all of it by you, to=
get it to the point where getting it into the standard would be feasible. =
That said, everyone wants good algorithms and data structures to be in the =
standard library! No-one will tell you that you shouldn't spend the tim=
e and work to get it to the quality level required for inclusion. However, =
be prepared to have to improve your design (perhaps for years) until everyo=
ne is satisfied.</div><div><br></div><div>The standardization process works=
as a bunch of authors pushing their contributions that they care about thr=
ough the committee that finds flaws in them until they can't find flaws=
anymore, and then vote it in. It's basically like the most stringent c=
ode review process ever designed, except it doesn't review code - it re=
views specifications. If that's not your cup of tea, you're welcome=
to keep your library on github forever, where it will be useful to everyon=
e that has the ability to pull it down and integrate it in their project.</=
div><div><br></div><div>Thank you for your answers. I'll reply to each =
with the design issues they bring up.</div><div><br><div><div class=3D"gmai=
l_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;borde=
r-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>1) The iterat=
or stores the position for each level. Because the cluster starts with only=
one level and the number can grow, it is allocated.</div><div>I'm not =
sure what You mean with iterator-stability, iteration ain't critical.</=
div></div></blockquote><div>Iteration is critical. However, iterators are n=
ot used just for iteration - they are also used as coordinates into your da=
ta structure that refer to elements. Their stability (whether they remain v=
alid when the data structure changes) is critical for integrating your data=
structure with anything else in the language.</div><div><br></div><div>The=
standard library assumes iterators are cheap (and noexcept!) to copy and c=
heap to hold. Your iterators do not fit this model (they allocate), therefo=
re they are not a good fit for the standard library with this design. Perha=
ps you can think on that for a bit.</div><div>=C2=A0</div><blockquote class=
=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padd=
ing-left:1ex"><div dir=3D"ltr"><div> If the position on one level reaches t=
he end, it is reset to zero and the</div><div>position of the parent is inc=
reased. The most critical process is the insertion. With a group-size of 10=
0 items i have to move at most 10.000 items</div><div>on the first level. I=
f new groups have to be allocated, the maximum number is the number of leve=
ls, while the number of items grows exponential.</div><div>The groups are h=
alf-full at least, because an empty group is created only when all groups o=
n a level are full,</div><div>and the groups are combined with their neighb=
ors when possible.</div></div></blockquote></div></div></div></div><div dir=
=3D"auto">Iterators should probably have nothing to do with that.</div><div=
dir=3D"auto"><br></div><div dir=3D"ltr"><div><div><div class=3D"gmail_quot=
e"><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left=
:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><br></div><div>2) Y=
ou need to use new and delete, wich can be overloaded. The entries are move=
d in the structure without calling their con-/destructors.</div></div></blo=
ckquote></div></div></div></div><div dir=3D"auto"><br></div><div dir=3D"aut=
o">Overloading new and delete are frowned upon and work per-type, not per-u=
se, so allocator support is essential for the standard library.</div><div d=
ir=3D"auto"><br></div><div dir=3D"ltr"><div><div><div class=3D"gmail_quote"=
><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1=
px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><br></div><div>3) Eve=
ry time an entry is removed, the parent checks, if the group can be combine=
d with the neighbor-groups. The groups are half-full at minimum.</div></div=
></blockquote></div></div></div></div><div dir=3D"auto">Thanks!</div><div d=
ir=3D"auto"><br></div><div dir=3D"ltr"><div><div><div class=3D"gmail_quote"=
><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1=
px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><br></div><div>4) My =
algorithm works a little bit different. I have item-groups on the lowest le=
vel, and parent-groups on higher levels.</div><div>The parent-group fails t=
o insert an item, it splits the child-group when possible. If the root is f=
ull and can not be split,</div><div>a new root is created.</div></div></blo=
ckquote></div></div></div></div><div dir=3D"auto">Therefore it cannot be a =
replacement for std::list. Lists have very few applications where they are =
the best data structure, but to my knowledge all of them involve complete s=
tability of nodes (no iterator invalidation except on deletion of pointed-t=
o node), the ability to splice a node or a few in and out (lru-cache, for i=
nstance), and keeping the order of nodes as inserted. Nobody uses a list as=
a sorted-by-key container.</div><div dir=3D"auto"><br></div><div dir=3D"au=
to"><br></div><div dir=3D"ltr"><div><div><div class=3D"gmail_quote"><blockq=
uote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc =
solid;padding-left:1ex"><div dir=3D"ltr"><div><br></div><div>5) In the inde=
x, the items are in ascending order. It references the first and the last e=
ntry. I think, this is what You mean.</div></div></blockquote></div></div><=
/div></div><div dir=3D"auto">It seems that you can then. Why is it not in t=
he interface?</div><div dir=3D"auto"><br></div><div dir=3D"ltr"><div><div><=
div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=3D"margin=
:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><=
div><br></div><div>6) An exception can be thrown, every time memory needs t=
o be allocated. I'm not using exceptions, only assertion for debugging.=
</div></div></blockquote></div></div></div></div><div dir=3D"auto"><br></di=
v><div dir=3D"auto">My question was mostly related to the fact that you hav=
e no specification of which operations on your structure can throw (in othe=
r words, use new). I suggest thinking about that one.</div><div dir=3D"auto=
"><br></div><div dir=3D"ltr"><div><div><div class=3D"gmail_quote"><blockquo=
te class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc so=
lid;padding-left:1ex"><div dir=3D"ltr"><div><br></div><div>I'm using Vi=
sual Studio and the Windows Runtime environment. I'm not using the stan=
dard-library directly.</div></div></blockquote></div></div></div></div><div=
dir=3D"auto"><br></div><div dir=3D"auto">Your data structure should not re=
quire the windows runtime if you are targeting the standard library.</div><=
div dir=3D"auto"><br></div><div dir=3D"ltr"><div><div><div class=3D"gmail_q=
uote"><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-l=
eft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div>Maybe You can he=
lp me to write a standard-implementation?</div></div></blockquote></div></d=
iv></div></div><div dir=3D"auto"><br></div><div dir=3D"auto">I'm afraid=
I don't have enough spare time to attempt that. We on this list will h=
appily tell you what is missing though, so you can fix it and try again.</d=
iv><div dir=3D"auto"><br></div><div dir=3D"ltr"><div><div><div class=3D"gma=
il_quote"><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bord=
er-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><br></div><d=
iv>Best regards,</div><div><br></div><div>Sven</div><blockquote class=3D"gm=
ail_quote" style=3D"margin:0;margin-left:0.8ex;border-left:1px #ccc solid;p=
adding-left:1ex"><div class=3D"gmail_quote"><blockquote class=3D"gmail_quot=
e" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">=
<br>
</blockquote></div>
</blockquote></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org" rel=3D"nore=
ferrer noreferrer noreferrer noreferrer" target=3D"_blank">std-proposals+un=
subscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" rel=3D"noreferrer noreferrer noreferrer noreferrer" target=3D"_blank"=
>std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/09f8e2a6-871c-4474-b887-1cfec7d3a7d0%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" rel=3D"noreferrer =
noreferrer noreferrer noreferrer" target=3D"_blank">https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/09f8e2a6-871c-4474-b887-1cfec7d3a7d0%=
40isocpp.org</a>.<br>
</blockquote></div></div></div></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkWaTRGpS9fHeJChY9UoE9fwNS1uHU=
N86%2BUbB5E1OcT8oA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkWaTR=
GpS9fHeJChY9UoE9fwNS1uHUN86%2BUbB5E1OcT8oA%40mail.gmail.com</a>.<br />
--000000000000a2448005781f6579--
.
Author: svenbieg@web.de
Date: Sat, 13 Oct 2018 16:08:50 -0700 (PDT)
Raw View
------=_Part_1201_1615202295.1539472130569
Content-Type: multipart/alternative;
boundary="----=_Part_1202_511655902.1539472130570"
------=_Part_1202_511655902.1539472130570
Content-Type: text/plain; charset="UTF-8"
Hello Gasper,
like You said, i created a new list-class today wich is more
standard-conform. In fact i only put things together and renamed
everything, i did no changes to the code itself.
https://github.com/svenbieg/Clusters-Iso
To the questions again:
1) I now understand what You mean with iterator-stability. The iterators
have to stay valid, when another iterator changes the list.
I didn't implement this, but it is possible. The list would have to keep
track of all iterators for this, maybe a limited number of
simultaneous iterators is allowed?
2) The allocator is easy to integrate, i think.
3) You first have to use my algorithm, before You really can make a benefit!
4) Splicing single items in and out is possible. Insertions and deletions
are processed in constant low time.
Even chains of items are possible, but one thing after another.
5) I will add this to index-class.
6) I have to add the noexcept keyword to all read-only functions.
Like i said, i am a hobby-programmer and i don't got much time, too. I have
a full-time-job in electric industry.
I will add the functionality You need and do some benchmarks. I will post
the results here, so You stay up to date.
Thank You,
Sven
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8a11545f-4aa5-4db2-8313-21770d0555ac%40isocpp.org.
------=_Part_1202_511655902.1539472130570
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Hello Gasper,</div><div><br></div><div>like You said,=
i created a new list-class today wich is more standard-conform. In fact i =
only put things together and renamed everything, i did no changes to the co=
de itself.</div><div><br></div><div>https://github.com/svenbieg/Clusters-Is=
o</div><div><br></div><div>To the questions again:</div><div><br></div><div=
>1) I now understand what You mean with iterator-stability. The iterators h=
ave to stay valid, when another iterator changes the list.</div><div>I didn=
't implement this, but it is possible. The list would have to keep trac=
k of all iterators for this, maybe a limited number of</div><div>simultaneo=
us iterators is allowed?</div><div><br></div><div>2) The allocator is easy =
to integrate, i think.<div style=3D"background-color: transparent; border-b=
ottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-widt=
h: 0px; border-image-outset: 0; border-image-repeat: stretch; border-image-=
slice: 100%; border-image-source: none; border-image-width: 1; border-left-=
color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bo=
rder-right-color: rgb(34, 34, 34); border-right-style: none; border-right-w=
idth: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; borde=
r-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&=
quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style=
: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; m=
argin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; or=
phans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; paddi=
ng-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; tex=
t-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; wor=
d-spacing: 0px;"><br></div><div style=3D"background-color: transparent; bor=
der-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom=
-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border-i=
mage-slice: 100%; border-image-source: none; border-image-width: 1; border-=
left-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0p=
x; border-right-color: rgb(34, 34, 34); border-right-style: none; border-ri=
ght-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; =
border-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial=
&quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-=
style: normal; font-variant: normal; font-weight: 400; letter-spacing: norm=
al; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0p=
x; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; =
padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px=
; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal=
; word-spacing: 0px;">3) You first have to use my algorithm, before You rea=
lly can make a benefit!</div><div style=3D"background-color: transparent; b=
order-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bott=
om-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border=
-image-slice: 100%; border-image-source: none; border-image-width: 1; borde=
r-left-color: rgb(34, 34, 34); border-left-style: none; border-left-width: =
0px; border-right-color: rgb(34, 34, 34); border-right-style: none; border-=
right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none=
; border-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Ari=
al&quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; fon=
t-style: normal; font-variant: normal; font-weight: 400; letter-spacing: no=
rmal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: =
0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px=
; padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0=
px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: norm=
al; word-spacing: 0px;"><br></div></div><div>4) Splicing single items in an=
d out is possible. Insertions and deletions are processed in constant low t=
ime.</div><div>Even chains of items are possible, but one thing after anoth=
er.</div><div><br></div><div>5) I will add this to index-class.</div><div><=
br></div><div>6) I have to add the noexcept keyword to all read-only functi=
ons.</div><div><br></div><div>Like i said, i am a hobby-programmer and i do=
n't got much time, too. I have a full-time-job in electric industry.</d=
iv><div><br></div><div>I will add the functionality You need and do some be=
nchmarks. I will post the results here, so You stay up to date.</div><div><=
br></div><div>Thank You,</div><div><br></div><div>Sven</div><div><br></div>=
<div><br></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-=
left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"aut=
o"><div dir=3D"ltr"><div><div><div class=3D"gmail_quote"><blockquote class=
=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padd=
ing-left:1ex">
</blockquote></div></div></div></div></div>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/8a11545f-4aa5-4db2-8313-21770d0555ac%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/8a11545f-4aa5-4db2-8313-21770d0555ac=
%40isocpp.org</a>.<br />
------=_Part_1202_511655902.1539472130570--
------=_Part_1201_1615202295.1539472130569--
.
Author: svenbieg@web.de
Date: Sat, 13 Oct 2018 20:58:03 -0700 (PDT)
Raw View
------=_Part_1155_940351712.1539489483159
Content-Type: multipart/alternative;
boundary="----=_Part_1156_1479477323.1539489483160"
------=_Part_1156_1479477323.1539489483160
Content-Type: text/plain; charset="UTF-8"
Hello Gasper,
like You said, i created a new list-class today wich is more
standard-conform. In fact i only put things together and renamed
everything, i did no changes to the code itself.
http://github.com/svenbieg/clusters-standard
To the questions again:
1) I now understand what You mean with iterator-stability. The iterators
have to stay valid, when another iterator changes the list.
I didn't implement this, but it is possible. The list would have to keep
track of all iterators for this, maybe a limited number of
simultaneous iterators.
2) The allocator is easy to integrate, i think. I will leave this away,
because i have integrated a custom allocator already.
A number of 100 items is allocated uninitialized in each item-group.
3) You first have to use this algorithm, before You really can make a
benefit!
4) Splicing single items in and out is possible. Insertions and deletions
are processed in constant low time.
Even chains of items are possible, but one thing after another.
5) I will add this to index-class.
6) I have to add the noexcept keyword to all read-only functions.
Like i said, i am a hobby-programmer and i don't got much time, too. I have
a full-time-job in electric industry.
I will add the functionality You need and do some benchmarks. I will post
the results here, so You stay up to date.
Thank You,
Sven
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/72b08652-8634-4b67-9a7e-926054fbdc63%40isocpp.org.
------=_Part_1156_1479477323.1539489483160
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div style=3D"background-color: transparent; border-bottom=
-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0p=
x; border-image-outset: 0; border-image-repeat: stretch; border-image-slice=
: 100%; border-image-source: none; border-image-width: 1; border-left-color=
: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-=
right-color: rgb(34, 34, 34); border-right-style: none; border-right-width:=
0px; border-top-color: rgb(34, 34, 34); border-top-style: none; border-top=
-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&quot;=
,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style: nor=
mal; font-variant: normal; font-weight: 400; letter-spacing: normal; margin=
-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans=
: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-to=
p: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-tra=
nsform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spa=
cing: 0px;">Hello Gasper,</div><div style=3D"background-color: transparent;=
border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bo=
ttom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; bord=
er-image-slice: 100%; border-image-source: none; border-image-width: 1; bor=
der-left-color: rgb(34, 34, 34); border-left-style: none; border-left-width=
: 0px; border-right-color: rgb(34, 34, 34); border-right-style: none; borde=
r-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: no=
ne; border-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;A=
rial&quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; f=
ont-style: normal; font-variant: normal; font-weight: 400; letter-spacing: =
normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top=
: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0=
px; padding-top: 0px; text-align: left; text-decoration: none; text-indent:=
0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: no=
rmal; word-spacing: 0px;"><br style=3D"border-bottom-color: rgb(34, 34, 34)=
; border-bottom-style: none; border-bottom-width: 0px; border-image-outset:=
0; border-image-repeat: stretch; border-image-slice: 100%; border-image-so=
urce: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); bord=
er-left-style: none; border-left-width: 0px; border-right-color: rgb(34, 34=
, 34); border-right-style: none; border-right-width: 0px; border-top-color:=
rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color: rgb=
(34, 34, 34); line-height: normal; margin-bottom: 0px; margin-left: 0px; ma=
rgin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; p=
adding-right: 0px; padding-top: 0px;"></div><div style=3D"background-color:=
transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: no=
ne; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: =
stretch; border-image-slice: 100%; border-image-source: none; border-image-=
width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bord=
er-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style=
: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-=
top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family=
: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font-=
size: 13px; font-style: normal; font-variant: normal; font-weight: 400; let=
ter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0p=
x; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; pad=
ding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none;=
text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; wh=
ite-space: normal; word-spacing: 0px;">like You said, i created a new list-=
class today wich is more standard-conform. In fact i only put things togeth=
er and renamed everything, i did no changes to the code itself.</div><div s=
tyle=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34)=
; border-bottom-style: none; border-bottom-width: 0px; border-image-outset:=
0; border-image-repeat: stretch; border-image-slice: 100%; border-image-so=
urce: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); bord=
er-left-style: none; border-left-width: 0px; border-right-color: rgb(34, 34=
, 34); border-right-style: none; border-right-width: 0px; border-top-color:=
rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color: rgb=
(34, 34, 34); font-family: &quot;Arial&quot;,&quot;Helvetica&am=
p;quot;,sans-serif; font-size: 13px; font-style: normal; font-variant: norm=
al; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-le=
ft: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0p=
x; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: lef=
t; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-t=
ext-stroke-width: 0px; white-space: normal; word-spacing: 0px;"><br></div><=
div style=3D"background-color: transparent; border-bottom-color: rgb(34, 34=
, 34); border-bottom-style: none; border-bottom-width: 0px; border-image-ou=
tset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-ima=
ge-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 34);=
border-left-style: none; border-left-width: 0px; border-right-color: rgb(3=
4, 34, 34); border-right-style: none; border-right-width: 0px; border-top-c=
olor: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; color=
: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&quot;Helveti=
ca&quot;,sans-serif; font-size: 13px; font-style: normal; font-variant:=
normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; marg=
in-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-botto=
m: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align=
: left; text-decoration: none; text-indent: 0px; text-transform: none; -web=
kit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">http:/=
/github.com/svenbieg/clusters-standard</div><div style=3D"background-color:=
transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: no=
ne; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: =
stretch; border-image-slice: 100%; border-image-source: none; border-image-=
width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bord=
er-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style=
: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-=
top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family=
: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font-=
size: 13px; font-style: normal; font-variant: normal; font-weight: 400; let=
ter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0p=
x; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; pad=
ding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none;=
text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; wh=
ite-space: normal; word-spacing: 0px;"><br style=3D"border-bottom-color: rg=
b(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-=
image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; bo=
rder-image-source: none; border-image-width: 1; border-left-color: rgb(34, =
34, 34); border-left-style: none; border-left-width: 0px; border-right-colo=
r: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; bord=
er-top-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0p=
x; color: rgb(34, 34, 34); line-height: normal; margin-bottom: 0px; margin-=
left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding=
-left: 0px; padding-right: 0px; padding-top: 0px;"></div><div style=3D"back=
ground-color: transparent; border-bottom-color: rgb(34, 34, 34); border-bot=
tom-style: none; border-bottom-width: 0px; border-image-outset: 0; border-i=
mage-repeat: stretch; border-image-slice: 100%; border-image-source: none; =
border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-styl=
e: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); borde=
r-right-style: none; border-right-width: 0px; border-top-color: rgb(34, 34,=
34); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34)=
; font-family: &quot;Arial&quot;,&quot;Helvetica&quot;,sans=
-serif; font-size: 13px; font-style: normal; font-variant: normal; font-wei=
ght: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; mar=
gin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-l=
eft: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-deco=
ration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-w=
idth: 0px; white-space: normal; word-spacing: 0px;">To the questions again:=
</div><div style=3D"background-color: transparent; border-bottom-color: rgb=
(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-i=
mage-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; bor=
der-image-source: none; border-image-width: 1; border-left-color: rgb(34, 3=
4, 34); border-left-style: none; border-left-width: 0px; border-right-color=
: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; borde=
r-top-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px=
; color: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&quot;=
Helvetica&quot;,sans-serif; font-size: 13px; font-style: normal; font-v=
ariant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0p=
x; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; paddin=
g-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; tex=
t-align: left; text-decoration: none; text-indent: 0px; text-transform: non=
e; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"=
><br style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: no=
ne; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: =
stretch; border-image-slice: 100%; border-image-source: none; border-image-=
width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bord=
er-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style=
: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-=
top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); line-height=
: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-t=
op: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; paddin=
g-top: 0px;"></div><div style=3D"background-color: transparent; border-bott=
om-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: =
0px; border-image-outset: 0; border-image-repeat: stretch; border-image-sli=
ce: 100%; border-image-source: none; border-image-width: 1; border-left-col=
or: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; borde=
r-right-color: rgb(34, 34, 34); border-right-style: none; border-right-widt=
h: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; border-t=
op-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&quo=
t;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style: n=
ormal; font-variant: normal; font-weight: 400; letter-spacing: normal; marg=
in-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orpha=
ns: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-=
top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-t=
ransform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-s=
pacing: 0px;">1) I now understand what You mean with iterator-stability. Th=
e iterators have to stay valid, when another iterator changes the list.</di=
v><div style=3D"background-color: transparent; border-bottom-color: rgb(34,=
34, 34); border-bottom-style: none; border-bottom-width: 0px; border-image=
-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-=
image-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 3=
4); border-left-style: none; border-left-width: 0px; border-right-color: rg=
b(34, 34, 34); border-right-style: none; border-right-width: 0px; border-to=
p-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; co=
lor: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&quot;Helv=
etica&quot;,sans-serif; font-size: 13px; font-style: normal; font-varia=
nt: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; m=
argin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bo=
ttom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-al=
ign: left; text-decoration: none; text-indent: 0px; text-transform: none; -=
webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">I d=
idn't implement this, but it is possible. The list would have to keep t=
rack of all iterators for this, maybe a limited number of</div><div style=
=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34); bo=
rder-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; =
border-image-repeat: stretch; border-image-slice: 100%; border-image-source=
: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-l=
eft-style: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34=
); border-right-style: none; border-right-width: 0px; border-top-color: rgb=
(34, 34, 34); border-top-style: none; border-top-width: 0px; color: rgb(34,=
34, 34); font-family: &quot;Arial&quot;,&quot;Helvetica&qu=
ot;,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; =
font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: =
0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; p=
adding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; t=
ext-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-=
stroke-width: 0px; white-space: normal; word-spacing: 0px;">simultaneous it=
erators.</div><div style=3D"background-color: transparent; border-bottom-co=
lor: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; =
border-image-outset: 0; border-image-repeat: stretch; border-image-slice: 1=
00%; border-image-source: none; border-image-width: 1; border-left-color: r=
gb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-rig=
ht-color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0p=
x; border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-wi=
dth: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&a=
mp;quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style: normal=
; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bo=
ttom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2=
; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: =
0px; text-align: left; text-decoration: none; text-indent: 0px; text-transf=
orm: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacin=
g: 0px;"><br style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-s=
tyle: none; border-bottom-width: 0px; border-image-outset: 0; border-image-=
repeat: stretch; border-image-slice: 100%; border-image-source: none; borde=
r-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: no=
ne; border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-rig=
ht-style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34);=
border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); lin=
e-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; =
margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px=
; padding-top: 0px;"></div><div style=3D"background-color: transparent; bor=
der-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom=
-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border-i=
mage-slice: 100%; border-image-source: none; border-image-width: 1; border-=
left-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0p=
x; border-right-color: rgb(34, 34, 34); border-right-style: none; border-ri=
ght-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; =
border-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial=
&quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-=
style: normal; font-variant: normal; font-weight: 400; letter-spacing: norm=
al; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0p=
x; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; =
padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px=
; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal=
; word-spacing: 0px;">2) The allocator is easy to integrate, i think. I wil=
l leave this away, because i have integrated a custom allocator already.</d=
iv><div style=3D"background-color: transparent; border-bottom-color: rgb(34=
, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-imag=
e-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border=
-image-source: none; border-image-width: 1; border-left-color: rgb(34, 34, =
34); border-left-style: none; border-left-width: 0px; border-right-color: r=
gb(34, 34, 34); border-right-style: none; border-right-width: 0px; border-t=
op-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; c=
olor: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&quot;Hel=
vetica&quot;,sans-serif; font-size: 13px; font-style: normal; font-vari=
ant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; =
margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-b=
ottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-a=
lign: left; text-decoration: none; text-indent: 0px; text-transform: none; =
-webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">A =
number of 100 items is allocated uninitialized in each item-group.<br><div =
style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; b=
order-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stret=
ch; border-image-slice: 100%; border-image-source: none; border-image-width=
: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; border-le=
ft-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style: non=
e; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-s=
tyle: none; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; ma=
rgin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; p=
adding-right: 0px; padding-top: 0px;"><br style=3D"border-bottom-color: rgb=
(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-i=
mage-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; bor=
der-image-source: none; border-image-width: 1; border-left-color: rgb(34, 3=
4, 34); border-left-style: none; border-left-width: 0px; border-right-color=
: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; borde=
r-top-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px=
; color: rgb(34, 34, 34); line-height: normal; margin-bottom: 0px; margin-l=
eft: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-=
left: 0px; padding-right: 0px; padding-top: 0px;"></div><div style=3D"borde=
r-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-w=
idth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-ima=
ge-slice: 100%; border-image-source: none; border-image-width: 1; border-le=
ft-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px;=
border-right-color: rgb(34, 34, 34); border-right-style: none; border-righ=
t-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; bo=
rder-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0p=
x; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: =
0px; padding-top: 0px;">3) You first have to use this algorithm, before You=
really can make a benefit!</div><div style=3D"border-bottom-color: rgb(34,=
34, 34); border-bottom-style: none; border-bottom-width: 0px; border-image=
-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border-=
image-source: none; border-image-width: 1; border-left-color: rgb(34, 34, 3=
4); border-left-style: none; border-left-width: 0px; border-right-color: rg=
b(34, 34, 34); border-right-style: none; border-right-width: 0px; border-to=
p-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; ma=
rgin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; pad=
ding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"=
><br style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-style: no=
ne; border-bottom-width: 0px; border-image-outset: 0; border-image-repeat: =
stretch; border-image-slice: 100%; border-image-source: none; border-image-=
width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; bord=
er-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style=
: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-=
top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); line-height=
: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-t=
op: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; paddin=
g-top: 0px;"></div></div><div style=3D"background-color: transparent; borde=
r-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-w=
idth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-ima=
ge-slice: 100%; border-image-source: none; border-image-width: 1; border-le=
ft-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px;=
border-right-color: rgb(34, 34, 34); border-right-style: none; border-righ=
t-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; bo=
rder-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&a=
mp;quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-st=
yle: normal; font-variant: normal; font-weight: 400; letter-spacing: normal=
; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;=
orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; pa=
dding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; =
text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; =
word-spacing: 0px;">4) Splicing single items in and out is possible. Insert=
ions and deletions are processed in constant low time.</div><div style=3D"b=
ackground-color: transparent; border-bottom-color: rgb(34, 34, 34); border-=
bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; borde=
r-image-repeat: stretch; border-image-slice: 100%; border-image-source: non=
e; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-s=
tyle: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); bo=
rder-right-style: none; border-right-width: 0px; border-top-color: rgb(34, =
34, 34); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, =
34); font-family: &quot;Arial&quot;,&quot;Helvetica&quot;,s=
ans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-=
weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; =
margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; paddin=
g-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-d=
ecoration: none; text-indent: 0px; text-transform: none; -webkit-text-strok=
e-width: 0px; white-space: normal; word-spacing: 0px;">Even chains of items=
are possible, but one thing after another.</div><div style=3D"background-c=
olor: transparent; border-bottom-color: rgb(34, 34, 34); border-bottom-styl=
e: none; border-bottom-width: 0px; border-image-outset: 0; border-image-rep=
eat: stretch; border-image-slice: 100%; border-image-source: none; border-i=
mage-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none;=
border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-=
style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); bo=
rder-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); font-f=
amily: &quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; =
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 400=
; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-righ=
t: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px=
; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: =
none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0p=
x; white-space: normal; word-spacing: 0px;"><br style=3D"border-bottom-colo=
r: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; bo=
rder-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100=
%; border-image-source: none; border-image-width: 1; border-left-color: rgb=
(34, 34, 34); border-left-style: none; border-left-width: 0px; border-right=
-color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px;=
border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-widt=
h: 0px; color: rgb(34, 34, 34); line-height: normal; margin-bottom: 0px; ma=
rgin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; pa=
dding-left: 0px; padding-right: 0px; padding-top: 0px;"></div><div style=3D=
"background-color: transparent; border-bottom-color: rgb(34, 34, 34); borde=
r-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; bor=
der-image-repeat: stretch; border-image-slice: 100%; border-image-source: n=
one; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left=
-style: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); =
border-right-style: none; border-right-width: 0px; border-top-color: rgb(34=
, 34, 34); border-top-style: none; border-top-width: 0px; color: rgb(34, 34=
, 34); font-family: &quot;Arial&quot;,&quot;Helvetica&quot;=
,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; fon=
t-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px=
; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padd=
ing-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text=
-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-str=
oke-width: 0px; white-space: normal; word-spacing: 0px;">5) I will add this=
to index-class.</div><div style=3D"background-color: transparent; border-b=
ottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-widt=
h: 0px; border-image-outset: 0; border-image-repeat: stretch; border-image-=
slice: 100%; border-image-source: none; border-image-width: 1; border-left-=
color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; bo=
rder-right-color: rgb(34, 34, 34); border-right-style: none; border-right-w=
idth: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; borde=
r-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&=
quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style=
: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; m=
argin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; or=
phans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; paddi=
ng-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; tex=
t-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; wor=
d-spacing: 0px;"><br style=3D"border-bottom-color: rgb(34, 34, 34); border-=
bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; borde=
r-image-repeat: stretch; border-image-slice: 100%; border-image-source: non=
e; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-s=
tyle: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34); bo=
rder-right-style: none; border-right-width: 0px; border-top-color: rgb(34, =
34, 34); border-top-style: none; border-top-width: 0px; color: rgb(34, 34, =
34); line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-righ=
t: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-ri=
ght: 0px; padding-top: 0px;"></div><div style=3D"background-color: transpar=
ent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; borde=
r-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stretch; =
border-image-slice: 100%; border-image-source: none; border-image-width: 1;=
border-left-color: rgb(34, 34, 34); border-left-style: none; border-left-w=
idth: 0px; border-right-color: rgb(34, 34, 34); border-right-style: none; b=
order-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style=
: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: &qu=
ot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13p=
x; font-style: normal; font-variant: normal; font-weight: 400; letter-spaci=
ng: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin=
-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-righ=
t: 0px; padding-top: 0px; text-align: left; text-decoration: none; text-ind=
ent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space=
: normal; word-spacing: 0px;">6) I have to add the noexcept keyword to all =
read-only functions.</div><div style=3D"background-color: transparent; bord=
er-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-=
width: 0px; border-image-outset: 0; border-image-repeat: stretch; border-im=
age-slice: 100%; border-image-source: none; border-image-width: 1; border-l=
eft-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px=
; border-right-color: rgb(34, 34, 34); border-right-style: none; border-rig=
ht-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; b=
order-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&=
amp;quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-s=
tyle: normal; font-variant: normal; font-weight: 400; letter-spacing: norma=
l; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px=
; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; p=
adding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px;=
text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal;=
word-spacing: 0px;"><br style=3D"border-bottom-color: rgb(34, 34, 34); bor=
der-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; b=
order-image-repeat: stretch; border-image-slice: 100%; border-image-source:=
none; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-le=
ft-style: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34)=
; border-right-style: none; border-right-width: 0px; border-top-color: rgb(=
34, 34, 34); border-top-style: none; border-top-width: 0px; color: rgb(34, =
34, 34); line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-=
right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; paddin=
g-right: 0px; padding-top: 0px;"></div><div style=3D"background-color: tran=
sparent; border-bottom-color: rgb(34, 34, 34); border-bottom-style: none; b=
order-bottom-width: 0px; border-image-outset: 0; border-image-repeat: stret=
ch; border-image-slice: 100%; border-image-source: none; border-image-width=
: 1; border-left-color: rgb(34, 34, 34); border-left-style: none; border-le=
ft-width: 0px; border-right-color: rgb(34, 34, 34); border-right-style: non=
e; border-right-width: 0px; border-top-color: rgb(34, 34, 34); border-top-s=
tyle: none; border-top-width: 0px; color: rgb(34, 34, 34); font-family: &am=
p;quot;Arial&quot;,&quot;Helvetica&quot;,sans-serif; font-size:=
13px; font-style: normal; font-variant: normal; font-weight: 400; letter-s=
pacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; ma=
rgin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-=
right: 0px; padding-top: 0px; text-align: left; text-decoration: none; text=
-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-s=
pace: normal; word-spacing: 0px;">Like i said, i am a hobby-programmer and =
i don't got much time, too. I have a full-time-job in electric industry=
..<br></div><div style=3D"background-color: transparent; border-bottom-color=
: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; bor=
der-image-outset: 0; border-image-repeat: stretch; border-image-slice: 100%=
; border-image-source: none; border-image-width: 1; border-left-color: rgb(=
34, 34, 34); border-left-style: none; border-left-width: 0px; border-right-=
color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0px; =
border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-width=
: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&=
quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style: normal; f=
ont-variant: normal; font-weight: 400; letter-spacing: normal; margin-botto=
m: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; p=
adding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px=
; text-align: left; text-decoration: none; text-indent: 0px; text-transform=
: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: =
0px;"><br style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-styl=
e: none; border-bottom-width: 0px; border-image-outset: 0; border-image-rep=
eat: stretch; border-image-slice: 100%; border-image-source: none; border-i=
mage-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: none;=
border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-right-=
style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34); bo=
rder-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); line-h=
eight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; mar=
gin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; p=
adding-top: 0px;"></div><div style=3D"background-color: transparent; border=
-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom-wi=
dth: 0px; border-image-outset: 0; border-image-repeat: stretch; border-imag=
e-slice: 100%; border-image-source: none; border-image-width: 1; border-lef=
t-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0px; =
border-right-color: rgb(34, 34, 34); border-right-style: none; border-right=
-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; bor=
der-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&am=
p;quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-sty=
le: normal; font-variant: normal; font-weight: 400; letter-spacing: normal;=
margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; =
orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; pad=
ding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; t=
ext-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; w=
ord-spacing: 0px;">I will add the functionality You need and do some benchm=
arks. I will post the results here, so You stay up to date.</div><div style=
=3D"background-color: transparent; border-bottom-color: rgb(34, 34, 34); bo=
rder-bottom-style: none; border-bottom-width: 0px; border-image-outset: 0; =
border-image-repeat: stretch; border-image-slice: 100%; border-image-source=
: none; border-image-width: 1; border-left-color: rgb(34, 34, 34); border-l=
eft-style: none; border-left-width: 0px; border-right-color: rgb(34, 34, 34=
); border-right-style: none; border-right-width: 0px; border-top-color: rgb=
(34, 34, 34); border-top-style: none; border-top-width: 0px; color: rgb(34,=
34, 34); font-family: &quot;Arial&quot;,&quot;Helvetica&qu=
ot;,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; =
font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: =
0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; p=
adding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; t=
ext-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-=
stroke-width: 0px; white-space: normal; word-spacing: 0px;"><br style=3D"bo=
rder-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-botto=
m-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border-=
image-slice: 100%; border-image-source: none; border-image-width: 1; border=
-left-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0=
px; border-right-color: rgb(34, 34, 34); border-right-style: none; border-r=
ight-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none;=
border-top-width: 0px; color: rgb(34, 34, 34); line-height: normal; margin=
-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding=
-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"></d=
iv><div style=3D"background-color: transparent; border-bottom-color: rgb(34=
, 34, 34); border-bottom-style: none; border-bottom-width: 0px; border-imag=
e-outset: 0; border-image-repeat: stretch; border-image-slice: 100%; border=
-image-source: none; border-image-width: 1; border-left-color: rgb(34, 34, =
34); border-left-style: none; border-left-width: 0px; border-right-color: r=
gb(34, 34, 34); border-right-style: none; border-right-width: 0px; border-t=
op-color: rgb(34, 34, 34); border-top-style: none; border-top-width: 0px; c=
olor: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&quot;Hel=
vetica&quot;,sans-serif; font-size: 13px; font-style: normal; font-vari=
ant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; =
margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-b=
ottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-a=
lign: left; text-decoration: none; text-indent: 0px; text-transform: none; =
-webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">Th=
ank You,</div><div style=3D"background-color: transparent; border-bottom-co=
lor: rgb(34, 34, 34); border-bottom-style: none; border-bottom-width: 0px; =
border-image-outset: 0; border-image-repeat: stretch; border-image-slice: 1=
00%; border-image-source: none; border-image-width: 1; border-left-color: r=
gb(34, 34, 34); border-left-style: none; border-left-width: 0px; border-rig=
ht-color: rgb(34, 34, 34); border-right-style: none; border-right-width: 0p=
x; border-top-color: rgb(34, 34, 34); border-top-style: none; border-top-wi=
dth: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial&quot;,&a=
mp;quot;Helvetica&quot;,sans-serif; font-size: 13px; font-style: normal=
; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bo=
ttom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2=
; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: =
0px; text-align: left; text-decoration: none; text-indent: 0px; text-transf=
orm: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacin=
g: 0px;"><br style=3D"border-bottom-color: rgb(34, 34, 34); border-bottom-s=
tyle: none; border-bottom-width: 0px; border-image-outset: 0; border-image-=
repeat: stretch; border-image-slice: 100%; border-image-source: none; borde=
r-image-width: 1; border-left-color: rgb(34, 34, 34); border-left-style: no=
ne; border-left-width: 0px; border-right-color: rgb(34, 34, 34); border-rig=
ht-style: none; border-right-width: 0px; border-top-color: rgb(34, 34, 34);=
border-top-style: none; border-top-width: 0px; color: rgb(34, 34, 34); lin=
e-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; =
margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px=
; padding-top: 0px;"></div><div style=3D"background-color: transparent; bor=
der-bottom-color: rgb(34, 34, 34); border-bottom-style: none; border-bottom=
-width: 0px; border-image-outset: 0; border-image-repeat: stretch; border-i=
mage-slice: 100%; border-image-source: none; border-image-width: 1; border-=
left-color: rgb(34, 34, 34); border-left-style: none; border-left-width: 0p=
x; border-right-color: rgb(34, 34, 34); border-right-style: none; border-ri=
ght-width: 0px; border-top-color: rgb(34, 34, 34); border-top-style: none; =
border-top-width: 0px; color: rgb(34, 34, 34); font-family: &quot;Arial=
&quot;,&quot;Helvetica&quot;,sans-serif; font-size: 13px; font-=
style: normal; font-variant: normal; font-weight: 400; letter-spacing: norm=
al; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0p=
x; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; =
padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px=
; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal=
; word-spacing: 0px;">Sven</div><br>
</div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/72b08652-8634-4b67-9a7e-926054fbdc63%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/72b08652-8634-4b67-9a7e-926054fbdc63=
%40isocpp.org</a>.<br />
------=_Part_1156_1479477323.1539489483160--
------=_Part_1155_940351712.1539489483159--
.
Author: Bengt Gustafsson <bengt.gustafsson@beamways.com>
Date: Sun, 14 Oct 2018 03:15:23 -0700 (PDT)
Raw View
------=_Part_1175_2130789397.1539512123784
Content-Type: multipart/alternative;
boundary="----=_Part_1176_1304164942.1539512123785"
------=_Part_1176_1304164942.1539512123785
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Its still a B-tree, give or take. Here is another implementation, which is=
=20
already "std-ish" when it comes to the API:
https://code.google.com/archive/p/cpp-btree/
It was made by Google but apparently they didn't have time or interest to=
=20
reformat it to a specification for inclusion in the standard.
Den s=C3=B6ndag 14 oktober 2018 kl. 05:58:03 UTC+2 skrev sven...@web.de:
>
> Hello Gasper,
>
> like You said, i created a new list-class today wich is more=20
> standard-conform. In fact i only put things together and renamed=20
> everything, i did no changes to the code itself.
>
> http://github.com/svenbieg/clusters-standard
>
> To the questions again:
>
> 1) I now understand what You mean with iterator-stability. The iterators=
=20
> have to stay valid, when another iterator changes the list.
> I didn't implement this, but it is possible. The list would have to keep=
=20
> track of all iterators for this, maybe a limited number of
> simultaneous iterators.
>
No, iterators don't have to be stable, but the specification must say=20
whether they are or not. For instance vector iterators are not stable.
=20
>
> 2) The allocator is easy to integrate, i think. I will leave this away,=
=20
> because i have integrated a custom allocator already.
> A number of 100 items is allocated uninitialized in each item-group.
>
If each block has a parent pointer I don't think the iterator needs to=20
store a variable amount of data. You'd still need an allocator for the=20
blocks themselves though.
With traditional allocators you'd be in trouble if you try to allocate=20
something that is not an array of your T type, but I don't think this is a=
=20
valid concern anymore.
A classical B-tree has all blocks equally structured as an array of pair<T,=
=20
Block*>, and if the Block* is not nullptr there is at least one sub-block=
=20
containing elements between the T of the pair and the next. This way=20
internal and leaf nodes have the same structure.
However, if you store only keys in internal nodes you can get a steeper=20
tree with equal size blocks which may be advantageous. This decision would=
=20
however probably not have to be in the specification but would be a=20
_quality of implementation_ (QOI) issue.
=20
>
> 3) You first have to use this algorithm, before You really can make a=20
> benefit!
>
> 4) Splicing single items in and out is possible. Insertions and deletions=
=20
> are processed in constant low time.
> Even chains of items are possible, but one thing after another.
>
> 5) I will add this to index-class.
>
> 6) I have to add the noexcept keyword to all read-only functions.
>
> Like i said, i am a hobby-programmer and i don't got much time, too. I=20
> have a full-time-job in electric industry.
>
> I will add the functionality You need and do some benchmarks. I will post=
=20
> the results here, so You stay up to date.
>
> Thank You,
>
> Sven
>
>
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/d59e5fc6-5cae-459d-a593-9c302e3d9e38%40isocpp.or=
g.
------=_Part_1176_1304164942.1539512123785
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Its still a B-tree, give or take. Here is another implemen=
tation, which is already "std-ish" when it comes to the API:<div>=
<br></div><div>https://code.google.com/archive/p/cpp-btree/</div><div><br><=
/div><div>It was made by Google but apparently they didn't have time or=
interest to reformat it to a specification for inclusion in the standard.<=
/div><div><br><br>Den s=C3=B6ndag 14 oktober 2018 kl. 05:58:03 UTC+2 skrev =
sven...@web.de:<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-=
left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"ltr=
"><div>Hello Gasper,</div><div><br style=3D"border-bottom-color:rgb(34,34,3=
4);border-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(3=
4,34,34);border-left-style:none;border-left-width:0px;border-right-color:rg=
b(34,34,34);border-right-style:none;border-right-width:0px;border-top-color=
:rgb(34,34,34);border-top-style:none;border-top-width:0px;color:rgb(34,34,3=
4);line-height:normal;margin-bottom:0px;margin-left:0px;margin-right:0px;ma=
rgin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-=
top:0px"></div><div>like You said, i created a new list-class today wich is=
more standard-conform. In fact i only put things together and renamed ever=
ything, i did no changes to the code itself.</div><div><br></div><div><a hr=
ef=3D"http://github.com/svenbieg/clusters-standard" target=3D"_blank" rel=
=3D"nofollow" onmousedown=3D"this.href=3D'http://www.google.com/url?q\x=
3dhttp%3A%2F%2Fgithub.com%2Fsvenbieg%2Fclusters-standard\x26sa\x3dD\x26sntz=
\x3d1\x26usg\x3dAFQjCNHAF0hjpTdIwdFE-a7woPsIle7Bhg';return true;" oncli=
ck=3D"this.href=3D'http://www.google.com/url?q\x3dhttp%3A%2F%2Fgithub.c=
om%2Fsvenbieg%2Fclusters-standard\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNH=
AF0hjpTdIwdFE-a7woPsIle7Bhg';return true;">http://github.com/svenbieg/<=
wbr>clusters-standard</a></div><div><br style=3D"border-bottom-color:rgb(34=
,34,34);border-bottom-style:none;border-bottom-width:0px;border-left-color:=
rgb(34,34,34);border-left-style:none;border-left-width:0px;border-right-col=
or:rgb(34,34,34);border-right-style:none;border-right-width:0px;border-top-=
color:rgb(34,34,34);border-top-style:none;border-top-width:0px;color:rgb(34=
,34,34);line-height:normal;margin-bottom:0px;margin-left:0px;margin-right:0=
px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;pad=
ding-top:0px"></div><div>To the questions again:</div><div><br style=3D"bor=
der-bottom-color:rgb(34,34,34);border-bottom-style:none;border-bottom-width=
:0px;border-left-color:rgb(34,34,34);border-left-style:none;border-left-wid=
th:0px;border-right-color:rgb(34,34,34);border-right-style:none;border-righ=
t-width:0px;border-top-color:rgb(34,34,34);border-top-style:none;border-top=
-width:0px;color:rgb(34,34,34);line-height:normal;margin-bottom:0px;margin-=
left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0p=
x;padding-right:0px;padding-top:0px"></div><div>1) I now understand what Yo=
u mean with iterator-stability. The iterators have to stay valid, when anot=
her iterator changes the list.</div><div>I didn't implement this, but i=
t is possible. The list would have to keep track of all iterators for this,=
maybe a limited number of</div><div>simultaneous iterators.</div></div></b=
lockquote><div>No, iterators don't have to be stable, but the specifica=
tion must say whether they are or not. For instance vector iterators are no=
t stable.</div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"=
margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;=
"><div dir=3D"ltr"><div><br style=3D"border-bottom-color:rgb(34,34,34);bord=
er-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,34,34=
);border-left-style:none;border-left-width:0px;border-right-color:rgb(34,34=
,34);border-right-style:none;border-right-width:0px;border-top-color:rgb(34=
,34,34);border-top-style:none;border-top-width:0px;color:rgb(34,34,34);line=
-height:normal;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-to=
p:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px=
"></div><div>2) The allocator is easy to integrate, i think. I will leave t=
his away, because i have integrated a custom allocator already.</div><div>A=
number of 100 items is allocated uninitialized in each item-group.<br></di=
v></div></blockquote><div>If each block has a parent pointer I don't th=
ink the iterator needs to store a variable amount of data. You'd still =
need an allocator for the blocks themselves though.</div><div><br></div><di=
v>With traditional allocators you'd be in trouble if you try to allocat=
e something that is not an array of your T type, but I don't think this=
is a valid concern anymore.</div><div><br></div><div>A classical B-tree ha=
s all blocks equally structured as an array of pair<T, Block*>, and i=
f the Block* is not nullptr there is at least one sub-block containing elem=
ents between the T of the pair and the next. This way internal and leaf nod=
es have the same structure.</div><div>However, if you store only keys in in=
ternal nodes you can get a steeper tree with equal size blocks which may be=
advantageous. This decision would however probably not have to be in the s=
pecification but would be a _quality of implementation_ (QOI) issue.</div><=
div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin: 0;margin=
-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"lt=
r"><div><div style=3D"border-bottom-color:rgb(34,34,34);border-bottom-style=
:none;border-bottom-width:0px;border-left-color:rgb(34,34,34);border-left-s=
tyle:none;border-left-width:0px;border-right-color:rgb(34,34,34);border-rig=
ht-style:none;border-right-width:0px;border-top-color:rgb(34,34,34);border-=
top-style:none;border-top-width:0px;margin-bottom:0px;margin-left:0px;margi=
n-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-righ=
t:0px;padding-top:0px"><br style=3D"border-bottom-color:rgb(34,34,34);borde=
r-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(34,34,34)=
;border-left-style:none;border-left-width:0px;border-right-color:rgb(34,34,=
34);border-right-style:none;border-right-width:0px;border-top-color:rgb(34,=
34,34);border-top-style:none;border-top-width:0px;color:rgb(34,34,34);line-=
height:normal;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top=
:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px"=
></div><div style=3D"border-bottom-color:rgb(34,34,34);border-bottom-style:=
none;border-bottom-width:0px;border-left-color:rgb(34,34,34);border-left-st=
yle:none;border-left-width:0px;border-right-color:rgb(34,34,34);border-righ=
t-style:none;border-right-width:0px;border-top-color:rgb(34,34,34);border-t=
op-style:none;border-top-width:0px;margin-bottom:0px;margin-left:0px;margin=
-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right=
:0px;padding-top:0px">3) You first have to use this algorithm, before You r=
eally can make a benefit!</div><div style=3D"border-bottom-color:rgb(34,34,=
34);border-bottom-style:none;border-bottom-width:0px;border-left-color:rgb(=
34,34,34);border-left-style:none;border-left-width:0px;border-right-color:r=
gb(34,34,34);border-right-style:none;border-right-width:0px;border-top-colo=
r:rgb(34,34,34);border-top-style:none;border-top-width:0px;margin-bottom:0p=
x;margin-left:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;paddin=
g-left:0px;padding-right:0px;padding-top:0px"><br style=3D"border-bottom-co=
lor:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px;border-l=
eft-color:rgb(34,34,34);border-left-style:none;border-left-width:0px;border=
-right-color:rgb(34,34,34);border-right-style:none;border-right-width:0px;b=
order-top-color:rgb(34,34,34);border-top-style:none;border-top-width:0px;co=
lor:rgb(34,34,34);line-height:normal;margin-bottom:0px;margin-left:0px;marg=
in-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-rig=
ht:0px;padding-top:0px"></div></div><div>4) Splicing single items in and ou=
t is possible. Insertions and deletions are processed in constant low time.=
</div><div>Even chains of items are possible, but one thing after another.<=
/div><div><br style=3D"border-bottom-color:rgb(34,34,34);border-bottom-styl=
e:none;border-bottom-width:0px;border-left-color:rgb(34,34,34);border-left-=
style:none;border-left-width:0px;border-right-color:rgb(34,34,34);border-ri=
ght-style:none;border-right-width:0px;border-top-color:rgb(34,34,34);border=
-top-style:none;border-top-width:0px;color:rgb(34,34,34);line-height:normal=
;margin-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-=
bottom:0px;padding-left:0px;padding-right:0px;padding-top:0px"></div><div>5=
) I will add this to index-class.</div><div><br style=3D"border-bottom-colo=
r:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px;border-lef=
t-color:rgb(34,34,34);border-left-style:none;border-left-width:0px;border-r=
ight-color:rgb(34,34,34);border-right-style:none;border-right-width:0px;bor=
der-top-color:rgb(34,34,34);border-top-style:none;border-top-width:0px;colo=
r:rgb(34,34,34);line-height:normal;margin-bottom:0px;margin-left:0px;margin=
-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right=
:0px;padding-top:0px"></div><div>6) I have to add the noexcept keyword to a=
ll read-only functions.</div><div><br style=3D"border-bottom-color:rgb(34,3=
4,34);border-bottom-style:none;border-bottom-width:0px;border-left-color:rg=
b(34,34,34);border-left-style:none;border-left-width:0px;border-right-color=
:rgb(34,34,34);border-right-style:none;border-right-width:0px;border-top-co=
lor:rgb(34,34,34);border-top-style:none;border-top-width:0px;color:rgb(34,3=
4,34);line-height:normal;margin-bottom:0px;margin-left:0px;margin-right:0px=
;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-right:0px;paddi=
ng-top:0px"></div><div>Like i said, i am a hobby-programmer and i don't=
got much time, too. I have a full-time-job in electric industry.<br></div>=
<div><br style=3D"border-bottom-color:rgb(34,34,34);border-bottom-style:non=
e;border-bottom-width:0px;border-left-color:rgb(34,34,34);border-left-style=
:none;border-left-width:0px;border-right-color:rgb(34,34,34);border-right-s=
tyle:none;border-right-width:0px;border-top-color:rgb(34,34,34);border-top-=
style:none;border-top-width:0px;color:rgb(34,34,34);line-height:normal;marg=
in-bottom:0px;margin-left:0px;margin-right:0px;margin-top:0px;padding-botto=
m:0px;padding-left:0px;padding-right:0px;padding-top:0px"></div><div>I will=
add the functionality You need and do some benchmarks. I will post the res=
ults here, so You stay up to date.</div><div><br style=3D"border-bottom-col=
or:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px;border-le=
ft-color:rgb(34,34,34);border-left-style:none;border-left-width:0px;border-=
right-color:rgb(34,34,34);border-right-style:none;border-right-width:0px;bo=
rder-top-color:rgb(34,34,34);border-top-style:none;border-top-width:0px;col=
or:rgb(34,34,34);line-height:normal;margin-bottom:0px;margin-left:0px;margi=
n-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;padding-righ=
t:0px;padding-top:0px"></div><div>Thank You,</div><div><br style=3D"border-=
bottom-color:rgb(34,34,34);border-bottom-style:none;border-bottom-width:0px=
;border-left-color:rgb(34,34,34);border-left-style:none;border-left-width:0=
px;border-right-color:rgb(34,34,34);border-right-style:none;border-right-wi=
dth:0px;border-top-color:rgb(34,34,34);border-top-style:none;border-top-wid=
th:0px;color:rgb(34,34,34);line-height:normal;margin-bottom:0px;margin-left=
:0px;margin-right:0px;margin-top:0px;padding-bottom:0px;padding-left:0px;pa=
dding-right:0px;padding-top:0px"></div><div>Sven</div><br>
</div></blockquote></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/d59e5fc6-5cae-459d-a593-9c302e3d9e38%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/d59e5fc6-5cae-459d-a593-9c302e3d9e38=
%40isocpp.org</a>.<br />
------=_Part_1176_1304164942.1539512123785--
------=_Part_1175_2130789397.1539512123784--
.
Author: svenbieg@web.de
Date: Sun, 14 Oct 2018 03:40:42 -0700 (PDT)
Raw View
------=_Part_16_2084867733.1539513642436
Content-Type: multipart/alternative;
boundary="----=_Part_17_904528225.1539513642436"
------=_Part_17_904528225.1539513642436
Content-Type: text/plain; charset="UTF-8"
Hello Mr. Gustaffson,
the Balancing-tree seems to have the same goal, but again:
My algorithm does not build a tree. It is working in the other direction.
I will do a comparison to btree, i wonder wich algorithm performs better.
Thank You for Your reply,
Sven
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/be18bab0-492b-45aa-9345-ef87051b076c%40isocpp.org.
------=_Part_17_904528225.1539513642436
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Hello Mr. Gustaffson,</div><div><br></div><div>the Ba=
lancing-tree seems to have the same goal, but again:</div><div>My algorithm=
does not build a tree. It is working in the other direction.</div><div>I w=
ill do a comparison to btree, i wonder wich algorithm performs better.</div=
><div><br></div><div>Thank You for Your reply,</div><div><br></div><div>Sve=
n</div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/be18bab0-492b-45aa-9345-ef87051b076c%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/be18bab0-492b-45aa-9345-ef87051b076c=
%40isocpp.org</a>.<br />
------=_Part_17_904528225.1539513642436--
------=_Part_16_2084867733.1539513642436--
.
Author: svenbieg@web.de
Date: Sun, 14 Oct 2018 04:48:52 -0700 (PDT)
Raw View
------=_Part_1157_681099298.1539517732714
Content-Type: multipart/alternative;
boundary="----=_Part_1158_1404371189.1539517732714"
------=_Part_1158_1404371189.1539517732714
Content-Type: text/plain; charset="UTF-8"
[image: btree-add.jpg]
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/4cb699f5-ac53-4856-8f99-7cd6e1f5d536%40isocpp.org.
------=_Part_1158_1404371189.1539517732714
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<p class=3D"separator" style=3D"text-align: left; clear: both;"><img style=
=3D"margin-right: 1em; margin-left: 1em;" alt=3D"btree-add.jpg" src=3D"cid:=
c56ace6d-f1f4-40a8-ac63-f542e6c6b2c2"></p><br>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/4cb699f5-ac53-4856-8f99-7cd6e1f5d536%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/4cb699f5-ac53-4856-8f99-7cd6e1f5d536=
%40isocpp.org</a>.<br />
------=_Part_1158_1404371189.1539517732714--
------=_Part_1157_681099298.1539517732714
Content-Type: image/jpeg; name=btree-add.jpg
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=btree-add.jpg
X-Attachment-Id: c56ace6d-f1f4-40a8-ac63-f542e6c6b2c2
Content-ID: <c56ace6d-f1f4-40a8-ac63-f542e6c6b2c2>
/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAICA98DASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD341Qv
NRNtf2VnHF5sty7ZG7bsRRln9/4Rj1Iq/wBqwNIzqOs3+qnmJT9ktvTahO9h9Xz/AN8ipb1sTJ9i
/qmo/wBnww7IvOmnmWGKPdt3Enk59AAT+FX6woidT8Vyyjm30xPKX0MzgFj/AMBXA/4Ea1ZrG3uL
qC5lQmW3yYzvIxkYPAOD+NEddRJttlbUNXjsbmK1jt57u7lBZYIAu7aOrEsQoHQckZ7Zq3bTtcW6
yvBLAxzmKUDcpHrgkH6gkVg3xl0vxWNTktriazntRbmSCJpWidWZuVUFsHPUDqBnrSazbjW5tDb7
Ncm2N07ShkZDs8px846hTwMNjOcEc4qVJ2uJyd2dKMdc0VyGt6A1hozQ6QhW1ku0mnt1i8xFjxhl
WJSCykgEqDzluvSqunwTWGj6xPYRGffGu2yh06ayQNzllVjkkjGduM7R3NHO+wnNp2sdySAKp6dq
MOp25nhV1USSRYcDOUcqf1BrjvD+mbteuENhENNnsykippb2kMjhxw0bk7jgnnA4Pfte8K6fpum3
Mtu2kfZ9RSefEwsSoMZkYriULtxtIGM+3aiMm2hKpJvY6Rbi7OqSW5ssWixBlufNB3OTyu3qMDBz
71byPWuP0+SxtvGlzJaadcwRXECI0i6dLGry73JLHYB0I+Y8e9Z95YK6anHd6ZdT67JO5s7pYGba
Cf3RWYDEarxxkYweOeUpuw3No9Az70tcTdaAmoahr0uoWP2lxaxiBnQlS+xslB03ZA5HIrp9G87+
xbH7Rv8AP8hPM3g7t20ZznvmqjJttMcZt7o0KKKKs0CiiigAooooAKKKKACiiigAooooAKKKKACi
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKAEqKCCK2iWKCNIo1+6iLtA+gFPbKjIGfYd68+t7++1zxpfw3mka
9HDafZ1SKG/SFYN2SzyCOcb88f3+F6djcKbmm+3/AAwmd9HBDBv8qJE3sXbYoG5j1J9TUtczdeMr
a3+1Spp9/cWFnIY7q+iVDFEQfn4LB2C9yqkde4NS3viuG21SXTbbTr+/uooEuCtsiY8ttwzuZlX+
HpnJzwDg4PZy7AdD9aK4/XdWOt6ZoVnplzJDFr0oUzplHSARtI+09VYhdvqN3tWxJK1lrGl6dbbY
rQwSDylUAALtC49MZqVF3sKUktTYowKxo5bq8udUgF5JCIJlEbRqmVGxTj5gQeSaoLd6gng5b7+0
JWupliIdo4/3ZZlBwAoHfvmnyMn2iOoorAg1C5ur+0t/NMPmW03nBFGVlRkXIyD0yfanaYt7Jqt7
HNqlzLHayhFRkiAYFAecID1PbFHIJVE9EbuB6UYFVor62mvJ7SOUNPAFMiD+HPSsmbxbYQaVqmot
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
u2Ejcf4dvzHbjv1z7UWA0ftCejflR9oT0b8qzVjvgiB7i3LeThiLdgDLx8w+fhevy9f9qho74o4S
4tw3k4Um3YgS8/Mfn5Xp8vX/AGqLAaX2hPRvyo+0J6N+VZ0iXh83y54FyF8rdCTtP8W75huz26Y9
6HS8LSbJ4AC6FAYSdq8bgfn5J5weMZHBxyWA0ftCejflR9oT0b8qztl5k/v4MeaCP3J/1ePu/f8A
vZz83T/ZoVLzcu6eAr5rFgISMx84UHdww4y3IODwM8FgNH7Qno35UfaE9G/Ks6NLwGLzJ4GALeZt
hI3D+Hb8xxjjPXPtSIl6Fj8y4t2IjYSFYCNz8YI+c4HXjnORyO5YDS+0J6N+VH2hPRvyrM8u+2Y+
0W+/ydufs7Y83+9jf93/AGev+1Sul6Vk8u4t1JjURloCdr85J+cZHTjjGDyexYDS+0J6N+VH2hPR
vyrOkS8Jl8ueBQSvl7oSdo/i3fMM55x0x70Ml5ubbPAF81SoMJOI+MqTu5Y84bgDI4OOSwGj9oT0
b8qPtCejflWdsvMj9/BjzST+5P8Aq8fd+/8Aezj5un+zQiXgaPfPAQHcuBCRuXnaB8/BHGTznB4G
eCwF6WUOuAD171DVON7lLu3hnuLVi0UjOqqUdiGXBVSx+UBsH3K1coEFFFFMAooooAKKKKACiiig
AooooAKKKKACiiigAooooAmilCLgg9e1P+0J6N+VVqKVgLP2hPRvyo+0J6N+VVqKLIZZ+0J6N+VH
2hPRvyqtRRZAWftCejflR9oT0b8qrUUWQFn7Qno35UfaE9G/Kq1FFgLP2hPRvyo+0J6N+VVqKLIC
z9oT0b8qPtCejflVaiiyAs/aE9G/Kj7Qno35VWoosgLP2hPRvyo+0J6N+VVqKLICz9oT0b8qPtCe
jflVaiiyAs/aE9G/Kj7Qno35VWoosgLP2hPRvyo+0J6N+VVqKLICz9oT0b8qPtCejflVaiiyAs/a
E9G/Kj7Qno35VWoosgLP2hPRvyo+0J6N+VVqKLICz9oT0b8qPtCejflVaiiyAs/aE9G/Kj7Qno35
VWoosgLP2hPRvyo+0J6N+VVqKLIDXpOOlISdp2gE9gTivOLS2v8AWvHmqHVvD+jXZtBbKBPdtKLZ
SGYmLdDyT1P3eQOe9VTp86b7K/42E2ek0VyNz4uvUt7/AFG00dZ9K0+R455nutkreWcSMkewhgMH
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
oAKKKKACiiigAooooAKKKKACiiigD//Z
------=_Part_1157_681099298.1539517732714--
.
Author: Bryce Adelstein Lelbach aka wash <brycelelbach@gmail.com>
Date: Thu, 18 Oct 2018 23:59:55 -0400
Raw View
--00000000000064cc4f05788cf0f8
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Hi Sven,
I'd suggest moving this discussion to the Boost mailing list, which would
be closer to a good fit for this work than the standard.
On Fri, Oct 12, 2018, 5:29 AM Martin Moene <
m.j.moene@eld.physics.leidenuniv.nl> wrote:
> On 11-Oct-18 19:09, svenbieg@web.de wrote:
>
> I hope my solution will make it into the standard-library!
>
>
> To get an idea about standardi[sz]ing:
>
> - How To Submit a Proposal <https://isocpp.org/std/submit-a-proposal>
> - The life of an ISO proposal: From =E2=80=9Ccool idea=E2=80=9D to =E2=
=80=9Cinternational
> standard=E2=80=9D <https://isocpp.org/std/the-life-of-an-iso-proposal>
>
> Best regards
> Martin
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposals+unsubscribe@isocpp.org.
> To post to this group, send email to std-proposals@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/3c8fb242-bdd=
e-1ee8-878f-94bfb3ae084c%40eld.physics.LeidenUniv.nl
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/3c8fb242-bd=
de-1ee8-878f-94bfb3ae084c%40eld.physics.LeidenUniv.nl?utm_medium=3Demail&ut=
m_source=3Dfooter>
> .
>
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAP3wax9SbaeKF8AknMB4mXQ1ofqHgR8WPa%3DgKmTFt9%3D=
5JsSdFg%40mail.gmail.com.
--00000000000064cc4f05788cf0f8
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"auto">Hi Sven,<div dir=3D"auto"><br></div><div dir=3D"auto">I&#=
39;d suggest moving this discussion to the Boost mailing list, which would =
be closer to a good fit for this work than the standard.</div></div><br><di=
v class=3D"gmail_quote"><div dir=3D"ltr">On Fri, Oct 12, 2018, 5:29 AM Mart=
in Moene <<a href=3D"mailto:m.j.moene@eld.physics.leidenuniv.nl">m.j.moe=
ne@eld.physics.leidenuniv.nl</a>> wrote:<br></div><blockquote class=3D"g=
mail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-l=
eft:1ex">
=20
=20
=20
<div text=3D"#000000" bgcolor=3D"#FFFFFF">
<div class=3D"m_-561427697108637842moz-cite-prefix">On 11-Oct-18 19:09,=
<a class=3D"m_-561427697108637842moz-txt-link-abbreviated" href=3D"mailto:=
svenbieg@web.de" target=3D"_blank" rel=3D"noreferrer">svenbieg@web.de</a>
wrote:<br>
</div>
<blockquote type=3D"cite">
<div>=C2=A0I hope my solution will make it into the standard-library!=
</div>
</blockquote>
<br>
To get an idea about standardi[sz]ing:<br>
<ul id=3D"m_-561427697108637842nav-sub">
<li><a href=3D"https://isocpp.org/std/submit-a-proposal" target=3D"_b=
lank" rel=3D"noreferrer">How To
Submit a Proposal</a></li>
<li><a href=3D"https://isocpp.org/std/the-life-of-an-iso-proposal" ta=
rget=3D"_blank" rel=3D"noreferrer">The
life of an ISO proposal: From =E2=80=9Ccool idea=E2=80=9D to =E2=
=80=9Cinternational
standard=E2=80=9D</a></li>
</ul>
<p>Best regards<br>
Martin</p>
<p><br>
</p>
</div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_=
blank" rel=3D"noreferrer">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank" rel=3D"noreferrer">std-proposals@isocpp.org</a>.<br=
>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/3c8fb242-bdde-1ee8-878f-94bfb3ae084c%=
40eld.physics.LeidenUniv.nl?utm_medium=3Demail&utm_source=3Dfooter" tar=
get=3D"_blank" rel=3D"noreferrer">https://groups.google.com/a/isocpp.org/d/=
msgid/std-proposals/3c8fb242-bdde-1ee8-878f-94bfb3ae084c%40eld.physics.Leid=
enUniv.nl</a>.<br>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAP3wax9SbaeKF8AknMB4mXQ1ofqHgR8WPa%3=
DgKmTFt9%3D5JsSdFg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter"=
>https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAP3wax9SbaeK=
F8AknMB4mXQ1ofqHgR8WPa%3DgKmTFt9%3D5JsSdFg%40mail.gmail.com</a>.<br />
--00000000000064cc4f05788cf0f8--
.
Author: svenbieg@web.de
Date: Thu, 18 Oct 2018 21:27:17 -0700 (PDT)
Raw View
------=_Part_3488_1065362872.1539923237596
Content-Type: text/plain; charset="UTF-8"
I don't think so, sorry!
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/5888e4a7-3ed3-4759-969e-30211027e7b0%40isocpp.org.
------=_Part_3488_1065362872.1539923237596--
.
Author: Bryce Adelstein Lelbach aka wash <brycelelbach@gmail.com>
Date: Fri, 19 Oct 2018 10:41:36 -0400
Raw View
--0000000000003fc6c4057895e77d
Content-Type: text/plain; charset="UTF-8"
If you want to suggest something for standardization, you need more than
just an implementation. As others have mentioned, you need a specification.
I don't think this work is a great fit for the standard. I would suggest
Boost.
On Fri, Oct 19, 2018, 12:27 AM <svenbieg@web.de> wrote:
> I don't think so, sorry!
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposals+unsubscribe@isocpp.org.
> To post to this group, send email to std-proposals@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/5888e4a7-3ed3-4759-969e-30211027e7b0%40isocpp.org
> .
>
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAP3wax_V-42h6fBD3LvEFWfGGAcBF1nf0NPmMbAKN%2B3QzKg1eA%40mail.gmail.com.
--0000000000003fc6c4057895e77d
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"auto">If you want to suggest something for standardization, you=
need more than just an implementation. As others have mentioned, you need =
a specification.<div dir=3D"auto"><br></div><div dir=3D"auto">I don't t=
hink this work is a great fit for the standard. I would suggest Boost.</div=
></div><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Fri, Oct 19, 2018=
, 12:27 AM <<a href=3D"mailto:svenbieg@web.de">svenbieg@web.de</a>> =
wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8e=
x;border-left:1px #ccc solid;padding-left:1ex">I don't think so, sorry!=
<br>
<br>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org" target=3D=
"_blank" rel=3D"noreferrer">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank" rel=3D"noreferrer">std-proposals@isocpp.org</a>.<br=
>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/5888e4a7-3ed3-4759-969e-30211027e7b0%=
40isocpp.org" rel=3D"noreferrer noreferrer" target=3D"_blank">https://group=
s.google.com/a/isocpp.org/d/msgid/std-proposals/5888e4a7-3ed3-4759-969e-302=
11027e7b0%40isocpp.org</a>.<br>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAP3wax_V-42h6fBD3LvEFWfGGAcBF1nf0NPm=
MbAKN%2B3QzKg1eA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfooter">h=
ttps://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAP3wax_V-42h6f=
BD3LvEFWfGGAcBF1nf0NPmMbAKN%2B3QzKg1eA%40mail.gmail.com</a>.<br />
--0000000000003fc6c4057895e77d--
.
Author: svenbieg@web.de
Date: Fri, 19 Oct 2018 09:01:47 -0700 (PDT)
Raw View
------=_Part_3662_10304551.1539964907262
Content-Type: multipart/alternative;
boundary="----=_Part_3663_1633523523.1539964907262"
------=_Part_3663_1633523523.1539964907262
Content-Type: text/plain; charset="UTF-8"
Sorry Mr., may i call You Brice?
i think Gasper is right when he says that some functionality is still
missing, like subtree-splicing,
lower- and upper-bound, equal-range and, from my opinion, insert- and
remove-many.
The algorithm is not only faster, then boost would be the right place, it
is also consuming less memory.
B-tree was much to complicated to make it into the standard-library, maybe
it lacks.
Clusters is as simple as effective, so the right place is the
standard-library.
Like Mr. Gustafsson said, iterator-stability ain't critical in a
single-threaded apartment,
and the standard-library is not thread-safe at all.
Tomorrow i'm going to try to get a standard-implementation of the index.
The list-iterator is still missing set-item.
I will do the specification later on, maybe somebody is really interested
in Clusters
and wants to some "testing".
Best regards,
Sven
>
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/60dd8662-9fa2-4406-9945-fff0c7451179%40isocpp.org.
------=_Part_3663_1633523523.1539964907262
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Sorry Mr., may i call You Brice?</div><div><br></div>=
<div>i think Gasper is right when he says that some functionality is still =
missing, like subtree-splicing,</div><div>lower- and upper-bound, equal-ran=
ge and, from my opinion, insert- and remove-many.</div><div>The algorithm i=
s not only faster, then boost would be the right place, it is also consumin=
g less memory.</div><div>B-tree was much to complicated to make it into the=
standard-library, maybe it lacks.</div><div>Clusters is as simple as effec=
tive, so the right place is the standard-library.</div><div>Like Mr. Gustaf=
sson said, iterator-stability ain't critical in a single-threaded apart=
ment,</div><div>and the standard-library is not thread-safe at all.</div><d=
iv>Tomorrow i'm going to try to get a standard-implementation of the in=
dex.</div><div>The list-iterator is still missing set-item.</div><div>I wil=
l do the specification later on, maybe somebody is really interested in Clu=
sters</div><div>and wants to some "testing".</div><div><br></div>=
<div>Best regards,</div><div><br></div><div>Sven</div><blockquote class=3D"=
gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc so=
lid;padding-left: 1ex;"><div class=3D"gmail_quote"><blockquote class=3D"gma=
il_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-lef=
t:1ex">
</blockquote></div>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/60dd8662-9fa2-4406-9945-fff0c7451179%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/60dd8662-9fa2-4406-9945-fff0c7451179=
%40isocpp.org</a>.<br />
------=_Part_3663_1633523523.1539964907262--
------=_Part_3662_10304551.1539964907262--
.
Author: =?UTF-8?B?R2HFoXBlciBBxb5tYW4=?= <gasper.azman@gmail.com>
Date: Sat, 20 Oct 2018 16:07:50 +0100
Raw View
--000000000000e1c87b0578aa628e
Content-Type: text/plain; charset="UTF-8"
.... Please don't think I'm endorsing whatever this guy is doing. I tried to
tell him.
However, I think that not turning people away is our duty, and I'm hoping
we can coach him enough for him to realize that he's missing a ton of
context.
I agree with you completely though, boost is a much better fit.
G
On Fri, Oct 19, 2018 at 3:41 PM Bryce Adelstein Lelbach aka wash <
brycelelbach@gmail.com> wrote:
> If you want to suggest something for standardization, you need more than
> just an implementation. As others have mentioned, you need a specification.
>
> I don't think this work is a great fit for the standard. I would suggest
> Boost.
>
> On Fri, Oct 19, 2018, 12:27 AM <svenbieg@web.de> wrote:
>
>> I don't think so, sorry!
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit
>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/5888e4a7-3ed3-4759-969e-30211027e7b0%40isocpp.org
>> .
>>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposals+unsubscribe@isocpp.org.
> To post to this group, send email to std-proposals@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAP3wax_V-42h6fBD3LvEFWfGGAcBF1nf0NPmMbAKN%2B3QzKg1eA%40mail.gmail.com
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAP3wax_V-42h6fBD3LvEFWfGGAcBF1nf0NPmMbAKN%2B3QzKg1eA%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkX0twuh4a279GinJV20uvy2Wdm%2B%2BMTmbxbjcHs97gGBVA%40mail.gmail.com.
--000000000000e1c87b0578aa628e
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">... Please don't think I'm endorsing whatever this=
guy is doing. I tried to tell him.<div><br></div><div>However, I think tha=
t not turning people away is our duty, and I'm hoping we can coach him =
enough for him to realize that he's missing a ton of context.</div><div=
><br></div><div>I agree with you completely though, boost is a much better =
fit.</div><div><br></div><div>G</div></div><br><div class=3D"gmail_quote"><=
div dir=3D"ltr">On Fri, Oct 19, 2018 at 3:41 PM Bryce Adelstein Lelbach aka=
wash <<a href=3D"mailto:brycelelbach@gmail.com">brycelelbach@gmail.com<=
/a>> wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0=
0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"auto">If=
you want to suggest something for standardization, you need more than just=
an implementation. As others have mentioned, you need a specification.<div=
dir=3D"auto"><br></div><div dir=3D"auto">I don't think this work is a =
great fit for the standard. I would suggest Boost.</div></div><br><div clas=
s=3D"gmail_quote"><div dir=3D"ltr">On Fri, Oct 19, 2018, 12:27 AM <<a h=
ref=3D"mailto:svenbieg@web.de" target=3D"_blank">svenbieg@web.de</a>> wr=
ote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;=
border-left:1px #ccc solid;padding-left:1ex">I don't think so, sorry!<b=
r>
<br>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org" rel=3D"no=
referrer" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" rel=3D"noreferrer" target=3D"_blank">std-proposals@isocpp.org</a>.<br=
>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/5888e4a7-3ed3-4759-969e-30211027e7b0%=
40isocpp.org" rel=3D"noreferrer noreferrer" target=3D"_blank">https://group=
s.google.com/a/isocpp.org/d/msgid/std-proposals/5888e4a7-3ed3-4759-969e-302=
11027e7b0%40isocpp.org</a>.<br>
</blockquote></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_=
blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAP3wax_V-42h6fBD3LvEFWfGGAcBF1nf0NPm=
MbAKN%2B3QzKg1eA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-pro=
posals/CAP3wax_V-42h6fBD3LvEFWfGGAcBF1nf0NPmMbAKN%2B3QzKg1eA%40mail.gmail.c=
om</a>.<br>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkX0twuh4a279GinJV20uvy2Wdm%2B=
%2BMTmbxbjcHs97gGBVA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkX0=
twuh4a279GinJV20uvy2Wdm%2B%2BMTmbxbjcHs97gGBVA%40mail.gmail.com</a>.<br />
--000000000000e1c87b0578aa628e--
.
Author: =?UTF-8?B?R2HFoXBlciBBxb5tYW4=?= <gasper.azman@gmail.com>
Date: Sat, 20 Oct 2018 16:14:01 +0100
Raw View
--000000000000fa42690578aa78c4
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
I apologize for the tone of the above. It was addressed to Bryce, who is a
friend of mine, and I didn't realize it was going straight to the
reflector. Mea culpa.
Sven, I meant what I said, though - I hope you realize boost is a much
better target for this at this time. Once it matures, you can very well
target the standard library with the specification of your boost library -
the standard *does not* accept code. If you want proof, look at the ranges
proposal that Eric Niebler and Casey Carter have been trying to get into
the standard, or the current flatmap proposal by Zach Laine. It will give
you an idea of what is expected for the standard.
Again, sorry for the tone; I really do want you to keep working in the
community, and try for the standard with a mature specification, because
your clusters do look like a useful data-structure - they are far from
ready, though.
I'd like to address your iterator stability statement above as well;
iterator stability has nothing to do with threading, and everything to do
with how you can combine data structures; without stable iterators, storing
iterators to objects in your data structure in *another* data structure is
not possible, which severely limits composability.
Ga=C5=A1per
On Sat, Oct 20, 2018 at 4:07 PM Ga=C5=A1per A=C5=BEman <gasper.azman@gmail.=
com> wrote:
> ... Please don't think I'm endorsing whatever this guy is doing. I tried
> to tell him.
>
> However, I think that not turning people away is our duty, and I'm hoping
> we can coach him enough for him to realize that he's missing a ton of
> context.
>
> I agree with you completely though, boost is a much better fit.
>
> G
>
> On Fri, Oct 19, 2018 at 3:41 PM Bryce Adelstein Lelbach aka wash <
> brycelelbach@gmail.com> wrote:
>
>> If you want to suggest something for standardization, you need more than
>> just an implementation. As others have mentioned, you need a specificati=
on.
>>
>> I don't think this work is a great fit for the standard. I would suggest
>> Boost.
>>
>> On Fri, Oct 19, 2018, 12:27 AM <svenbieg@web.de> wrote:
>>
>>> I don't think so, sorry!
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "ISO C++ Standard - Future Proposals" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to std-proposals+unsubscribe@isocpp.org.
>>> To post to this group, send email to std-proposals@isocpp.org.
>>> To view this discussion on the web visit
>>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/5888e4a7-3=
ed3-4759-969e-30211027e7b0%40isocpp.org
>>> .
>>>
>> --
>> You received this message because you are subscribed to the Google Group=
s
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send a=
n
>> email to std-proposals+unsubscribe@isocpp.org.
>> To post to this group, send email to std-proposals@isocpp.org.
>> To view this discussion on the web visit
>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAP3wax_V-4=
2h6fBD3LvEFWfGGAcBF1nf0NPmMbAKN%2B3QzKg1eA%40mail.gmail.com
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAP3wax_V-=
42h6fBD3LvEFWfGGAcBF1nf0NPmMbAKN%2B3QzKg1eA%40mail.gmail.com?utm_medium=3De=
mail&utm_source=3Dfooter>
>> .
>>
>
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CAANG%3DkXdS-_-ns%2BTvv%2BEgm%3DsQkY7u0SaeSh__k_=
yV_kD9%2BqDaw%40mail.gmail.com.
--000000000000fa42690578aa78c4
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">I apologize for the tone of the above. It was addressed to=
Bryce, who is a friend of mine, and I didn't realize it was going stra=
ight to the reflector. Mea culpa.<div><br></div><div>Sven, I meant what I s=
aid, though - I hope you realize boost is a much better target for this at =
this time. Once it matures, you can very well target the standard library w=
ith the specification of your boost library - the standard <i>does not</i>=
=C2=A0accept code. If you want proof, look at the ranges proposal that Eric=
Niebler and Casey Carter have been trying to get into the standard, or the=
current flatmap proposal by Zach Laine. It will give you an idea of what i=
s expected for the standard.</div><div><br></div><div>Again, sorry for the =
tone; I really do want you to keep working in the community, and try for th=
e standard with a mature specification, because your clusters do look like =
a useful data-structure - they are far from ready, though.</div><div><br></=
div><div>I'd like to address your iterator stability statement above as=
well; iterator stability has nothing to do with threading, and everything =
to do with how you can combine data structures; without stable iterators, s=
toring iterators to objects in your data structure in *another* data struct=
ure is not possible, which severely limits composability.</div><div><br></d=
iv><div>Ga=C5=A1per</div></div><br><div class=3D"gmail_quote"><div dir=3D"l=
tr">On Sat, Oct 20, 2018 at 4:07 PM Ga=C5=A1per A=C5=BEman <<a href=3D"m=
ailto:gasper.azman@gmail.com">gasper.azman@gmail.com</a>> wrote:<br></di=
v><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:=
1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">... Please don't thin=
k I'm endorsing whatever this guy is doing. I tried to tell him.<div><b=
r></div><div>However, I think that not turning people away is our duty, and=
I'm hoping we can coach him enough for him to realize that he's mi=
ssing a ton of context.</div><div><br></div><div>I agree with you completel=
y though, boost is a much better fit.</div><div><br></div><div>G</div></div=
><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Fri, Oct 19, 2018 at 3:=
41 PM Bryce Adelstein Lelbach aka wash <<a href=3D"mailto:brycelelbach@g=
mail.com" target=3D"_blank">brycelelbach@gmail.com</a>> wrote:<br></div>=
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><div dir=3D"auto">If you want to suggest som=
ething for standardization, you need more than just an implementation. As o=
thers have mentioned, you need a specification.<div dir=3D"auto"><br></div>=
<div dir=3D"auto">I don't think this work is a great fit for the standa=
rd. I would suggest Boost.</div></div><br><div class=3D"gmail_quote"><div d=
ir=3D"ltr">On Fri, Oct 19, 2018, 12:27 AM <<a href=3D"mailto:svenbieg@w=
eb.de" target=3D"_blank">svenbieg@web.de</a>> wrote:<br></div><blockquot=
e class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc sol=
id;padding-left:1ex">I don't think so, sorry!<br>
<br>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals%2Bunsubscribe@isocpp.org" rel=3D"no=
referrer" target=3D"_blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" rel=3D"noreferrer" target=3D"_blank">std-proposals@isocpp.org</a>.<br=
>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/5888e4a7-3ed3-4759-969e-30211027e7b0%=
40isocpp.org" rel=3D"noreferrer noreferrer" target=3D"_blank">https://group=
s.google.com/a/isocpp.org/d/msgid/std-proposals/5888e4a7-3ed3-4759-969e-302=
11027e7b0%40isocpp.org</a>.<br>
</blockquote></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_=
blank">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAP3wax_V-42h6fBD3LvEFWfGGAcBF1nf0NPm=
MbAKN%2B3QzKg1eA%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r" target=3D"_blank">https://groups.google.com/a/isocpp.org/d/msgid/std-pro=
posals/CAP3wax_V-42h6fBD3LvEFWfGGAcBF1nf0NPmMbAKN%2B3QzKg1eA%40mail.gmail.c=
om</a>.<br>
</blockquote></div>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAANG%3DkXdS-_-ns%2BTvv%2BEgm%3DsQkY7=
u0SaeSh__k_yV_kD9%2BqDaw%40mail.gmail.com?utm_medium=3Demail&utm_source=3Df=
ooter">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAANG%3=
DkXdS-_-ns%2BTvv%2BEgm%3DsQkY7u0SaeSh__k_yV_kD9%2BqDaw%40mail.gmail.com</a>=
..<br />
--000000000000fa42690578aa78c4--
.
Author: svenbieg@web.de
Date: Sat, 20 Oct 2018 12:12:41 -0700 (PDT)
Raw View
------=_Part_76_1491441253.1540062761176
Content-Type: multipart/alternative;
boundary="----=_Part_77_559898916.1540062761176"
------=_Part_77_559898916.1540062761176
Content-Type: text/plain; charset="UTF-8"
I've written a standard-implementation and moved it to
http://github.com/svenbieg/clusters.
I think this is also the right place for the specification.
In a cluster, iterator-stability doesn't seem to be so important, because
iterators can be set to any position.
The absolute position can be saved, the cluster can be changed, and the
iterator can be reset to the previous item.
In a multi-threaded environment the operations can be synchronized, like
i've done in Clusters-Runtime.
Mr. Gustafsson mentioned, if groups would have parent-pointers, the
iterators would not have to allocate.
This is right, but they still would not be stable. I think it's better to
keep the clusters as small as possible.
A custom allocator would have to be faster than the default. I'm thinking
of a memory-manager using clusters,
making custom allocators unnecessary.
A very interesting feature is the sublist-splicing, wich You suggested.
I'm going to implement this, but i didn't make it by now.
I thought of insert- and remove-many, having large text-files doing
replacements.
Splicing out a sub-list is possible in constant-low time in a cluster.
Combination of data-structures is another interesting feature You mentioned.
Some functions are still missing, like insert-many and remove-many,
splice-out, Thank You, and maybe some boolean functions for indices.
This can be done with high-performance, but i didn't make, too.
I think i misunderstood You with lower- and upper-bound.
You can use an absolute position and a counter in clusters.
The user can pass invalid arguments now, i've added some exceptions.
I've also added the noexcept-keyword to read-only functions,
it is necessary for std::move_if_no_except, wich is also still missing.
Maybe some one on this list can have a look at the code?
Some pieces might be very un-professional.
Today i've read of std::move_if_no_except for the first time.
I'm going to write a specification, i got some ideas already.
Pictures say more than words, i think.
Sven
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8cd19c2f-3a6d-4943-b18e-625b6cc6ee95%40isocpp.org.
------=_Part_77_559898916.1540062761176
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>I've written a standard-implementation and moved =
it to http://github.com/svenbieg/clusters.</div><div>I think this is also t=
he right place for the specification.</div><div><br></div><div>In a cluster=
, iterator-stability doesn't seem to be so important, because iterators=
can be set to any position.</div><div>The absolute position can be saved, =
the cluster can be changed, and the iterator can be reset to the previous i=
tem.</div><div>In a multi-threaded environment the operations can be synchr=
onized, like i've done in Clusters-Runtime.</div><div>Mr. Gustafsson me=
ntioned, if groups would have parent-pointers, the iterators would not have=
to allocate.</div><div>This is right, but they still would not be stable. =
I think it's better to keep the clusters as small as possible.</div><di=
v><br></div><div>A custom allocator would have to be faster than the defaul=
t. I'm thinking of a memory-manager using clusters,</div><div>making cu=
stom allocators unnecessary.</div><div><br></div><div>A very interesting fe=
ature is the sublist-splicing, wich You suggested.</div><div>I'm going =
to implement this, but i didn't make it by now.</div><div>I thought of =
insert- and remove-many, having large text-files doing replacements.</div><=
div>Splicing out a sub-list is possible in constant-low time in a cluster.<=
/div><div><br></div><div>Combination of data-structures is another interest=
ing feature You mentioned.</div><div>Some functions are still missing, like=
insert-many and remove-many,</div><div>splice-out, Thank You, and maybe so=
me boolean functions for indices.</div><div>This can be done with high-perf=
ormance, but i didn't make, too.</div><div><br></div><div>I think i mis=
understood You with lower- and upper-bound.</div><div>You can use an absolu=
te position and a counter in clusters.</div><div><br></div><div>The user ca=
n pass invalid arguments now, i've added some exceptions.</div><div>I&#=
39;ve also added the noexcept-keyword to read-only functions,</div><div>it =
is necessary for std::move_if_no_except, wich is also still missing.</div><=
div><br></div><div>Maybe some one on this list can have a look at the code?=
</div><div>Some pieces might be very un-professional.</div><div>Today i'=
;ve read of std::move_if_no_except for the first time.</div><div><br></div>=
<div>I'm going to write a specification, i got some ideas already.</div=
><div>Pictures say more than words, i think.</div><div><br></div><div>Sven<=
/div><div><br></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/8cd19c2f-3a6d-4943-b18e-625b6cc6ee95%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/8cd19c2f-3a6d-4943-b18e-625b6cc6ee95=
%40isocpp.org</a>.<br />
------=_Part_77_559898916.1540062761176--
------=_Part_76_1491441253.1540062761176--
.
Author: Bryce Adelstein Lelbach aka wash <brycelelbach@gmail.com>
Date: Sat, 20 Oct 2018 19:08:52 -0400
Raw View
--0000000000002ce8f10578b11b61
Content-Type: text/plain; charset="UTF-8"
Adding Odin.
On Sat, Oct 20, 2018, 3:12 PM <svenbieg@web.de> wrote:
> I've written a standard-implementation and moved it to
> http://github.com/svenbieg/clusters.
> I think this is also the right place for the specification.
>
> In a cluster, iterator-stability doesn't seem to be so important, because
> iterators can be set to any position.
> The absolute position can be saved, the cluster can be changed, and the
> iterator can be reset to the previous item.
> In a multi-threaded environment the operations can be synchronized, like
> i've done in Clusters-Runtime.
> Mr. Gustafsson mentioned, if groups would have parent-pointers, the
> iterators would not have to allocate.
> This is right, but they still would not be stable. I think it's better to
> keep the clusters as small as possible.
>
> A custom allocator would have to be faster than the default. I'm thinking
> of a memory-manager using clusters,
> making custom allocators unnecessary.
>
> A very interesting feature is the sublist-splicing, wich You suggested.
> I'm going to implement this, but i didn't make it by now.
> I thought of insert- and remove-many, having large text-files doing
> replacements.
> Splicing out a sub-list is possible in constant-low time in a cluster.
>
> Combination of data-structures is another interesting feature You
> mentioned.
> Some functions are still missing, like insert-many and remove-many,
> splice-out, Thank You, and maybe some boolean functions for indices.
> This can be done with high-performance, but i didn't make, too.
>
> I think i misunderstood You with lower- and upper-bound.
> You can use an absolute position and a counter in clusters.
>
> The user can pass invalid arguments now, i've added some exceptions.
> I've also added the noexcept-keyword to read-only functions,
> it is necessary for std::move_if_no_except, wich is also still missing.
>
> Maybe some one on this list can have a look at the code?
> Some pieces might be very un-professional.
> Today i've read of std::move_if_no_except for the first time.
>
> I'm going to write a specification, i got some ideas already.
> Pictures say more than words, i think.
>
> Sven
>
> --
> You received this message because you are subscribed to the Google Groups
> "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to std-proposals+unsubscribe@isocpp.org.
> To post to this group, send email to std-proposals@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8cd19c2f-3a6d-4943-b18e-625b6cc6ee95%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8cd19c2f-3a6d-4943-b18e-625b6cc6ee95%40isocpp.org?utm_medium=email&utm_source=footer>
> .
>
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAP3wax8Yu7GaRi-Cjz1H7jGEvMfC_%2Bxfpy%2BkhF2_2Wb4XJC%2BtQ%40mail.gmail.com.
--0000000000002ce8f10578b11b61
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"auto">Adding Odin.</div><br><div class=3D"gmail_quote"><div dir=
=3D"ltr">On Sat, Oct 20, 2018, 3:12 PM <<a href=3D"mailto:svenbieg@web.=
de">svenbieg@web.de</a>> wrote:<br></div><blockquote class=3D"gmail_quot=
e" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">=
<div dir=3D"ltr"><div>I've written a standard-implementation and moved =
it to <a href=3D"http://github.com/svenbieg/clusters" target=3D"_blank" rel=
=3D"noreferrer">http://github.com/svenbieg/clusters</a>.</div><div>I think =
this is also the right place for the specification.</div><div><br></div><di=
v>In a cluster, iterator-stability doesn't seem to be so important, bec=
ause iterators can be set to any position.</div><div>The absolute position =
can be saved, the cluster can be changed, and the iterator can be reset to =
the previous item.</div><div>In a multi-threaded environment the operations=
can be synchronized, like i've done in Clusters-Runtime.</div><div>Mr.=
Gustafsson mentioned, if groups would have parent-pointers, the iterators =
would not have to allocate.</div><div>This is right, but they still would n=
ot be stable. I think it's better to keep the clusters as small as poss=
ible.</div><div><br></div><div>A custom allocator would have to be faster t=
han the default. I'm thinking of a memory-manager using clusters,</div>=
<div>making custom allocators unnecessary.</div><div><br></div><div>A very =
interesting feature is the sublist-splicing, wich You suggested.</div><div>=
I'm going to implement this, but i didn't make it by now.</div><div=
>I thought of insert- and remove-many, having large text-files doing replac=
ements.</div><div>Splicing out a sub-list is possible in constant-low time =
in a cluster.</div><div><br></div><div>Combination of data-structures is an=
other interesting feature You mentioned.</div><div>Some functions are still=
missing, like insert-many and remove-many,</div><div>splice-out, Thank You=
, and maybe some boolean functions for indices.</div><div>This can be done =
with high-performance, but i didn't make, too.</div><div><br></div><div=
>I think i misunderstood You with lower- and upper-bound.</div><div>You can=
use an absolute position and a counter in clusters.</div><div><br></div><d=
iv>The user can pass invalid arguments now, i've added some exceptions.=
</div><div>I've also added the noexcept-keyword to read-only functions,=
</div><div>it is necessary for std::move_if_no_except, wich is also still m=
issing.</div><div><br></div><div>Maybe some one on this list can have a loo=
k at the code?</div><div>Some pieces might be very un-professional.</div><d=
iv>Today i've read of std::move_if_no_except for the first time.</div><=
div><br></div><div>I'm going to write a specification, i got some ideas=
already.</div><div>Pictures say more than words, i think.</div><div><br></=
div><div>Sven</div><div><br></div></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_=
blank" rel=3D"noreferrer">std-proposals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank" rel=3D"noreferrer">std-proposals@isocpp.org</a>.<br=
>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/8cd19c2f-3a6d-4943-b18e-625b6cc6ee95%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" target=3D"_blank" =
rel=3D"noreferrer">https://groups.google.com/a/isocpp.org/d/msgid/std-propo=
sals/8cd19c2f-3a6d-4943-b18e-625b6cc6ee95%40isocpp.org</a>.<br>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CAP3wax8Yu7GaRi-Cjz1H7jGEvMfC_%2Bxfpy=
%2BkhF2_2Wb4XJC%2BtQ%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CAP3wax8Yu7=
GaRi-Cjz1H7jGEvMfC_%2Bxfpy%2BkhF2_2Wb4XJC%2BtQ%40mail.gmail.com</a>.<br />
--0000000000002ce8f10578b11b61--
.
Author: holmes.odin@gmail.com
Date: Sat, 20 Oct 2018 16:59:10 -0700 (PDT)
Raw View
------=_Part_4054_1644204136.1540079950381
Content-Type: multipart/alternative;
boundary="----=_Part_4055_1149968836.1540079950381"
------=_Part_4055_1149968836.1540079950381
Content-Type: text/plain; charset="UTF-8"
Hello Sven,
I had a look at your code and I think I understand how it works inside.
It looks like an implementation of a b-tree with the 'order' template-able
and defaulted to 100. There are a few things which I noticed about the
implementation but that's not important here (I'll post issues on your
GitHub repo). What's interesting from a standardization standpoint is the
public interface as well as the
guarantees/requirements http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf
see section 26 and think about how your container fits in (which guarantees
it fulfills and which it can't). Having a working implementation is a plus
but the real work will be coming up with a proposal/wording etc. This might
be interesting for SG14 (we have looked at enough other proposals, this
would play nice with pool allocators, caching etc.) but you should read the
standard and try to come up with wording in a similar form. Feel free to
contact me in German if that's easier for you.
Best,
Odin
Am Sonntag, 21. Oktober 2018 01:09:06 UTC+2 schrieb Bryce Adelstein Lelbach:
>
> Adding Odin.
>
> On Sat, Oct 20, 2018, 3:12 PM <sven...@web.de <javascript:>> wrote:
>
>> I've written a standard-implementation and moved it to
>> http://github.com/svenbieg/clusters.
>> I think this is also the right place for the specification.
>>
>> In a cluster, iterator-stability doesn't seem to be so important, because
>> iterators can be set to any position.
>> The absolute position can be saved, the cluster can be changed, and the
>> iterator can be reset to the previous item.
>> In a multi-threaded environment the operations can be synchronized, like
>> i've done in Clusters-Runtime.
>> Mr. Gustafsson mentioned, if groups would have parent-pointers, the
>> iterators would not have to allocate.
>> This is right, but they still would not be stable. I think it's better to
>> keep the clusters as small as possible.
>>
>> A custom allocator would have to be faster than the default. I'm thinking
>> of a memory-manager using clusters,
>> making custom allocators unnecessary.
>>
>> A very interesting feature is the sublist-splicing, wich You suggested.
>> I'm going to implement this, but i didn't make it by now.
>> I thought of insert- and remove-many, having large text-files doing
>> replacements.
>> Splicing out a sub-list is possible in constant-low time in a cluster.
>>
>> Combination of data-structures is another interesting feature You
>> mentioned.
>> Some functions are still missing, like insert-many and remove-many,
>> splice-out, Thank You, and maybe some boolean functions for indices.
>> This can be done with high-performance, but i didn't make, too.
>>
>> I think i misunderstood You with lower- and upper-bound.
>> You can use an absolute position and a counter in clusters.
>>
>> The user can pass invalid arguments now, i've added some exceptions.
>> I've also added the noexcept-keyword to read-only functions,
>> it is necessary for std::move_if_no_except, wich is also still missing.
>>
>> Maybe some one on this list can have a look at the code?
>> Some pieces might be very un-professional.
>> Today i've read of std::move_if_no_except for the first time.
>>
>> I'm going to write a specification, i got some ideas already.
>> Pictures say more than words, i think.
>>
>> Sven
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "ISO C++ Standard - Future Proposals" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to std-proposal...@isocpp.org <javascript:>.
>> To post to this group, send email to std-pr...@isocpp.org <javascript:>.
>> To view this discussion on the web visit
>> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8cd19c2f-3a6d-4943-b18e-625b6cc6ee95%40isocpp.org
>> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8cd19c2f-3a6d-4943-b18e-625b6cc6ee95%40isocpp.org?utm_medium=email&utm_source=footer>
>> .
>>
>
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/f251c914-4200-48dc-a6b5-360319391bf5%40isocpp.org.
------=_Part_4055_1149968836.1540079950381
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Hello Sven,<div><br></div><div>I had a look at your code a=
nd I think I understand how it works inside. It=C2=A0looks like an implemen=
tation of a b-tree with the 'order' template-able and defaulted to =
100. There are a few things which I noticed about the implementation but th=
at's not important here (I'll post issues on your GitHub repo). Wha=
t's interesting from a standardization standpoint is the public interfa=
ce as well as the guarantees/requirements=C2=A0http://www.open-std.org/jtc1=
/sc22/wg21/docs/papers/2017/n4659.pdf see section 26 and think about how yo=
ur container fits in (which guarantees it fulfills and which it can't).=
Having a working implementation is a plus but the real work will be coming=
up with a proposal/wording etc. This might be interesting for SG14 (we hav=
e looked at enough other proposals, this would play nice with pool allocato=
rs, caching etc.) but you should read the standard and try to come up with =
wording in a similar form. Feel free to contact me in German=C2=A0if that&#=
39;s easier for you.</div><div><br></div><div>Best,</div><div>Odin<br><br>A=
m Sonntag, 21. Oktober 2018 01:09:06 UTC+2 schrieb Bryce Adelstein Lelbach:=
<blockquote class=3D"gmail_quote" style=3D"margin: 0;margin-left: 0.8ex;bor=
der-left: 1px #ccc solid;padding-left: 1ex;"><div dir=3D"auto">Adding Odin.=
</div><br><div class=3D"gmail_quote"><div dir=3D"ltr">On Sat, Oct 20, 2018,=
3:12 PM <<a href=3D"javascript:" target=3D"_blank" gdf-obfuscated-mail=
to=3D"KVgLbpmRCQAJ" rel=3D"nofollow" onmousedown=3D"this.href=3D'javasc=
ript:';return true;" onclick=3D"this.href=3D'javascript:';retur=
n true;">sven...@web.de</a>> wrote:<br></div><blockquote class=3D"gmail_=
quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1=
ex"><div dir=3D"ltr"><div>I've written a standard-implementation and mo=
ved it to <a href=3D"http://github.com/svenbieg/clusters" rel=3D"nofollow" =
target=3D"_blank" onmousedown=3D"this.href=3D'http://www.google.com/url=
?q\x3dhttp%3A%2F%2Fgithub.com%2Fsvenbieg%2Fclusters\x26sa\x3dD\x26sntz\x3d1=
\x26usg\x3dAFQjCNFZtYCl7mu57k35iUnfRILMWI_oVQ';return true;" onclick=3D=
"this.href=3D'http://www.google.com/url?q\x3dhttp%3A%2F%2Fgithub.com%2F=
svenbieg%2Fclusters\x26sa\x3dD\x26sntz\x3d1\x26usg\x3dAFQjCNFZtYCl7mu57k35i=
UnfRILMWI_oVQ';return true;">http://github.com/svenbieg/<wbr>clusters</=
a>.</div><div>I think this is also the right place for the specification.</=
div><div><br></div><div>In a cluster, iterator-stability doesn't seem t=
o be so important, because iterators can be set to any position.</div><div>=
The absolute position can be saved, the cluster can be changed, and the ite=
rator can be reset to the previous item.</div><div>In a multi-threaded envi=
ronment the operations can be synchronized, like i've done in Clusters-=
Runtime.</div><div>Mr. Gustafsson mentioned, if groups would have parent-po=
inters, the iterators would not have to allocate.</div><div>This is right, =
but they still would not be stable. I think it's better to keep the clu=
sters as small as possible.</div><div><br></div><div>A custom allocator wou=
ld have to be faster than the default. I'm thinking of a memory-manager=
using clusters,</div><div>making custom allocators unnecessary.</div><div>=
<br></div><div>A very interesting feature is the sublist-splicing, wich You=
suggested.</div><div>I'm going to implement this, but i didn't mak=
e it by now.</div><div>I thought of insert- and remove-many, having large t=
ext-files doing replacements.</div><div>Splicing out a sub-list is possible=
in constant-low time in a cluster.</div><div><br></div><div>Combination of=
data-structures is another interesting feature You mentioned.</div><div>So=
me functions are still missing, like insert-many and remove-many,</div><div=
>splice-out, Thank You, and maybe some boolean functions for indices.</div>=
<div>This can be done with high-performance, but i didn't make, too.</d=
iv><div><br></div><div>I think i misunderstood You with lower- and upper-bo=
und.</div><div>You can use an absolute position and a counter in clusters.<=
/div><div><br></div><div>The user can pass invalid arguments now, i've =
added some exceptions.</div><div>I've also added the noexcept-keyword t=
o read-only functions,</div><div>it is necessary for std::move_if_no_except=
, wich is also still missing.</div><div><br></div><div>Maybe some one on th=
is list can have a look at the code?</div><div>Some pieces might be very un=
-professional.</div><div>Today i've read of std::move_if_no_except for =
the first time.</div><div><br></div><div>I'm going to write a specifica=
tion, i got some ideas already.</div><div>Pictures say more than words, i t=
hink.</div><div><br></div><div>Sven</div><div><br></div></div>
<p></p>
-- <br>
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br>
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"javascript:" rel=3D"nofollow" target=3D"_blank" gdf-obfu=
scated-mailto=3D"KVgLbpmRCQAJ" onmousedown=3D"this.href=3D'javascript:&=
#39;;return true;" onclick=3D"this.href=3D'javascript:';return true=
;">std-proposal...@<wbr>isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"javascript:" rel=3D"nofollo=
w" target=3D"_blank" gdf-obfuscated-mailto=3D"KVgLbpmRCQAJ" onmousedown=3D"=
this.href=3D'javascript:';return true;" onclick=3D"this.href=3D'=
;javascript:';return true;">std-pr...@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/8cd19c2f-3a6d-4943-b18e-625b6cc6ee95%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter" rel=3D"nofollow" t=
arget=3D"_blank" onmousedown=3D"this.href=3D'https://groups.google.com/=
a/isocpp.org/d/msgid/std-proposals/8cd19c2f-3a6d-4943-b18e-625b6cc6ee95%40i=
socpp.org?utm_medium\x3demail\x26utm_source\x3dfooter';return true;" on=
click=3D"this.href=3D'https://groups.google.com/a/isocpp.org/d/msgid/st=
d-proposals/8cd19c2f-3a6d-4943-b18e-625b6cc6ee95%40isocpp.org?utm_medium\x3=
demail\x26utm_source\x3dfooter';return true;">https://groups.google.com=
/a/<wbr>isocpp.org/d/msgid/std-<wbr>proposals/8cd19c2f-3a6d-4943-<wbr>b18e-=
625b6cc6ee95%40isocpp.org</a><wbr>.<br>
</blockquote></div>
</blockquote></div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/f251c914-4200-48dc-a6b5-360319391bf5%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/f251c914-4200-48dc-a6b5-360319391bf5=
%40isocpp.org</a>.<br />
------=_Part_4055_1149968836.1540079950381--
------=_Part_4054_1644204136.1540079950381--
.
Author: svenbieg@web.de
Date: Sun, 21 Oct 2018 00:29:22 -0700 (PDT)
Raw View
------=_Part_4270_682396974.1540106962862
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Hey Odin,
nice to meet You! I'm looking forward to Your issues on GitHub. I've seen a=
chart of the stadard-comittee today, where SG14 is part of. There is anoth=
er team SG21, working with databases. They should know about Clusters, too!=
I actually was writing a database, when the algorithm began becoming inter=
sting for memory-management. There is a lot of work to do, but not today. T=
oday is party-time!
Mit freundlichen Gr=C3=BC=C3=9Fen,
Sven
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/4d45f1d1-528a-4a4f-8d43-c8bef02df3fb%40isocpp.or=
g.
------=_Part_4270_682396974.1540106962862--
.
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date: Sun, 21 Oct 2018 09:51:00 +0200
Raw View
On 10/21/2018 09:29 AM, svenbieg@web.de wrote:
> Hey Odin,
>=20
> nice to meet You! I'm looking forward to Your issues on GitHub. I've seen=
a chart of the stadard-comittee today, where SG14 is part of. There is ano=
ther team SG21, working with databases. They should know about Clusters, to=
o! I actually was writing a database, when the algorithm began becoming int=
ersting for memory-management. There is a lot of work to do, but not today.=
Today is party-time!
SG11 (Databases) is defunct. In any case, SG11 was not about
writing a database implementation (where b-trees are useful),
but standardizing the interface to relational databases such=20
as Oracle or MySQL (roughly, ODBC for C++).
Jens
--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/5BCC2FE4.6000006%40gmx.net.
.
Author: svenbieg@web.de
Date: Sun, 28 Oct 2018 01:22:27 -0700 (PDT)
Raw View
------=_Part_289_390789269.1540714947272
Content-Type: multipart/alternative;
boundary="----=_Part_290_1785843264.1540714947272"
------=_Part_290_1785843264.1540714947272
Content-Type: text/plain; charset="UTF-8"
I have created a printable version of the specification.
You can find it at http://svenbieg.azurewebsites.net/Clusters/Printable.aspx
..
It is only the introduction right now, i will have to add the different
interfaces.
But i think, this is what You meant.
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/8002474d-b065-48cd-92dc-69c3e0be9c66%40isocpp.org.
------=_Part_290_1785843264.1540714947272
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>I have created a printable version of the specificati=
on.</div><div>You can find it at=C2=A0<a href=3D"http://svenbieg.azurewebsi=
tes.net/Clusters/Printable.aspx">http://svenbieg.azurewebsites.net/Clusters=
/Printable.aspx</a>.</div><div>It is only the introduction right now, i wil=
l have to add the different interfaces.</div><div>But i think, this is what=
You meant.</div></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/8002474d-b065-48cd-92dc-69c3e0be9c66%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/8002474d-b065-48cd-92dc-69c3e0be9c66=
%40isocpp.org</a>.<br />
------=_Part_290_1785843264.1540714947272--
------=_Part_289_390789269.1540714947272--
.
Author: svenbieg@web.de
Date: Sun, 28 Oct 2018 01:52:54 -0700 (PDT)
Raw View
------=_Part_1215_42387846.1540716774160
Content-Type: multipart/alternative;
boundary="----=_Part_1216_1731581859.1540716774160"
------=_Part_1216_1731581859.1540716774160
Content-Type: text/plain; charset="UTF-8"
http://svenbieg.azurewebsites.net/Clusters/Clusters_en-US.pdf
>
--
You received this message because you are subscribed to the Google Groups "ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an email to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/20830363-63b7-4771-8eba-a4586b26d436%40isocpp.org.
------=_Part_1216_1731581859.1540716774160
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div><a href=3D"http://svenbieg.azurewebsites.net/Clusters=
/Clusters_en-US.pdf">http://svenbieg.azurewebsites.net/Clusters/Clusters_en=
-US.pdf</a><br></div><blockquote class=3D"gmail_quote" style=3D"margin: 0;m=
argin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><div dir=
=3D"ltr"><div></div></div></blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/20830363-63b7-4771-8eba-a4586b26d436%=
40isocpp.org?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.=
com/a/isocpp.org/d/msgid/std-proposals/20830363-63b7-4771-8eba-a4586b26d436=
%40isocpp.org</a>.<br />
------=_Part_1216_1731581859.1540716774160--
------=_Part_1215_42387846.1540716774160--
.