Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for range-based for loops #2635

Merged
merged 4 commits into from
Oct 26, 2023

Conversation

timvdm
Copy link
Member

@timvdm timvdm commented Oct 21, 2023

  • Add OBMol::GetAtoms(), OBMol::GetBonds(), OBAtom::GetBonds() and OBAtom::GetNbrs()
  • These methods return ranges that can be used in a range-based for loop
  • Replaced FOR_ATOMS_OF_MOL, FOR_BONDS_OF_MOL, FOR_BONDS_OF_ATOM and FOR_NBORS_OF_ATOM
  • Works with C++11

* Add OBMol::GetAtoms(), OBMol::GetBonds() and OBAtom::GetBonds().
* These methods return ranges usable in a range-based for loop.
* Replace FOR_ATOMS_OF_MOL, FOR_BONDS_OF_MOL, FOR_BONDS_OF_ATOM and
  FOR_NBORS_OF_ATOM with range based for loops.
* Still need to implement OBAtom::GetNbrs().
@timvdm
Copy link
Member Author

timvdm commented Oct 21, 2023

-------------------------------------------------------------------------------
iterators-mol-atom
-------------------------------------------------------------------------------
/home/timvdm/openbabel-benchmark/main.cpp:37
...............................................................................

benchmark name                       samples       iterations    est run time
                                     mean          low mean      high mean
                                     std dev       low std dev   high std dev
-------------------------------------------------------------------------------
NumAtoms / GetAtom                             100            57     1.3395 ms 
                                        239.704 ns    237.452 ns    242.998 ns 
                                        13.6856 ns     10.255 ns     17.355 ns 
                                                                               
OBMolAtomIter                                  100            63     1.3356 ms 
                                        213.093 ns    211.359 ns    215.806 ns 
                                        10.8516 ns    7.52759 ns    14.4128 ns 
                                                                               
BeginAtom / NextAtom                           100           115      1.334 ms 
                                        119.102 ns    117.784 ns    120.949 ns 
                                        7.96645 ns    6.23579 ns    9.59511 ns 
                                                                               
FOR_ATOMS_OF_MOL                               100           366     1.3176 ms 
                                        37.0429 ns    36.6542 ns    37.5867 ns 
                                        2.33947 ns    1.81348 ns     2.8415 ns 
                                                                               
BeginAtoms / EndAtoms                          100           321     1.3161 ms 
                                        37.5913 ns    37.0588 ns    38.2691 ns 
                                        3.02309 ns    2.49616 ns    3.52564 ns 
                                                                               
GetAtoms                                       100           348     1.3224 ms 
                                          37.13 ns    36.7279 ns    37.7013 ns 
                                         2.4104 ns    1.85212 ns    2.89647 ns 
                                                                               

-------------------------------------------------------------------------------
iterators-mol-bond
-------------------------------------------------------------------------------
/home/timvdm/openbabel-benchmark/main.cpp:103
...............................................................................

benchmark name                       samples       iterations    est run time
                                     mean          low mean      high mean
                                     std dev       low std dev   high std dev
-------------------------------------------------------------------------------
NumBonds / GetBond                             100            56     1.3272 ms 
                                         244.13 ns    241.171 ns    248.033 ns 
                                        17.2515 ns    13.6996 ns     20.423 ns 
                                                                               
OBMolBondIter                                  100            62     1.3268 ms 
                                         218.45 ns    215.996 ns    221.761 ns 
                                        14.4162 ns    11.4463 ns    17.2281 ns 
                                                                               
BeginBond / NextBond                           100           114     1.3338 ms 
                                        120.307 ns    119.038 ns    122.127 ns 
                                        7.69576 ns    5.91677 ns    9.36035 ns 
                                                                               
FOR_BONDS_OF_MOL                               100           348     1.3224 ms 
                                        38.5333 ns    38.3025 ns    38.9516 ns 
                                        1.55949 ns   0.938391 ns    2.30401 ns 
                                                                               
BeginBonds / EndBonds                          100           352     1.3024 ms 
                                        37.2908 ns     36.905 ns    37.8549 ns 
                                        2.35191 ns    1.75338 ns    2.92314 ns 
                                                                               
GetBonds                                       100           348     1.3224 ms 
                                        37.7961 ns    37.3666 ns    38.3528 ns 
                                        2.48275 ns    2.02509 ns    2.91912 ns 
                                                                               

-------------------------------------------------------------------------------
iterators-atom-bond
-------------------------------------------------------------------------------
/home/timvdm/openbabel-benchmark/main.cpp:168
...............................................................................

benchmark name                       samples       iterations    est run time
                                     mean          low mean      high mean
                                     std dev       low std dev   high std dev
-------------------------------------------------------------------------------
OBAtomBondIter                                 100             9     1.3851 ms 
                                        1.60022 us    1.58045 us    1.62492 us 
                                        112.515 ns    94.3982 ns    129.009 ns 
                                                                               
BeginBond / NextBond                           100            17       1.36 ms 
                                        809.956 ns    803.673 ns    820.129 ns 
                                        39.3122 ns    27.1928 ns    52.9569 ns 
                                                                               
FOR_BONDS_OF_ATOM                              100            79     1.3272 ms 
                                         175.51 ns    173.628 ns    178.167 ns 
                                        11.3124 ns    8.75191 ns    13.7801 ns 
                                                                               
BeginBonds / EndBonds                          100            78      1.326 ms 
                                        173.413 ns    171.365 ns    176.226 ns 
                                        12.1837 ns    9.54524 ns    14.7505 ns 
                                                                               
GetBonds                                       100           109     1.3298 ms 
                                        125.818 ns     124.27 ns    127.769 ns 
                                        8.80802 ns     7.1704 ns    10.2525 ns 
                                                                               

-------------------------------------------------------------------------------
iterators-atom-atom
-------------------------------------------------------------------------------
/home/timvdm/openbabel-benchmark/main.cpp:233
...............................................................................

benchmark name                       samples       iterations    est run time
                                     mean          low mean      high mean
                                     std dev       low std dev   high std dev
-------------------------------------------------------------------------------
OBAtomAtomIter                                 100             8      1.332 ms 
                                        1.75625 us    1.73897 us    1.78088 us 
                                        105.282 ns    78.5718 ns    131.181 ns 
                                                                               
BeginNbr / NextNbr                             100            13     1.4313 ms 
                                        1.12652 us    1.11472 us    1.14416 us 
                                        72.6578 ns    53.7948 ns    93.3306 ns 
                                                                               
FOR_NBORS_OF_ATOM                              100            63     1.3356 ms 
                                        224.037 ns     221.28 ns    227.784 ns 
                                        16.3251 ns    13.0803 ns    19.7404 ns 
                                                                               
GetNbrs                                        100            60      1.344 ms 
                                        238.905 ns    235.938 ns    242.825 ns 
                                        17.3301 ns    13.9846 ns    20.3396 ns 

@ghutchis
Copy link
Member

This all looks good to me. Want me to merge, or is there more to do?

@timvdm
Copy link
Member Author

timvdm commented Oct 26, 2023

Yes, this can be merged. I still have to mark the old iteration methods as deprecated and perhaps replace the use of old iterator methods with the new ones. This could be a new PR.

@timvdm timvdm marked this pull request as ready for review October 26, 2023 20:46
@ghutchis ghutchis merged commit d62e512 into openbabel:master Oct 26, 2023
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants