- Pass iterator into thread - 6 Updates
- Tutorial on threaded binary tree part 3: AVL-like updating of height differences - 3 Updates
- #1NEWBIEHERE question about "const" before multiple commas and objects - 1 Update
- PDF Advanced Engineering Thermodynamics, 3rd Edition INSTRUCTOR SOLUTIONS MANUAL; Adrian Bejan - 1 Update
- Refactoring is good, God's speed. - 3 Updates
- cancel <87wpedhoxv.fsf@gmail.com> - 1 Update
- RQ 241: So long 2016 - 2 Updates
- Those dang window message dispatcher macros again, too unclean? - 1 Update
bitrex <bitrex@de.lete.earthlink.net>: Jan 02 03:49AM -0500 The poster "Johannes Goller" here gives an example of some code to "chunk" a STL container so a different section could be passed to a different thread of execution for processing, for example. http://stackoverflow.com/questions/14226952/partitioning-batch-chunk-a-container-into-equal-sized-pieces-using-std-algorithm However, he doesn't give any example on how this is accomplished in practice with say a boost::thread or a std::thread. I've been trying to pass what's returned by accessing "chunks[0].first, chunks[0].second" as a parameter into a boost::thread callback just by value and am getting difficult to interpret errors like: /usr/include/c++/5/functional|1505|error: no type named 'type' in 'class std::result_of<void (*(__gnu_cxx::__normal_iterator<std::vector<std::__cxx11::basic_string<char>... etc. |
Ben Bacarisse <ben.usenet@bsb.me.uk>: Jan 02 11:15AM > /usr/include/c++/5/functional|1505|error: no type named 'type' in > 'class std::result_of<void > (*(__gnu_cxx::__normal_iterator<std::vector<std::__cxx11::basic_string<char>... You might get lucky with an answer but you will stand a much better chance by posting the code here. If possible, prepare a minimal example that produces the error. Very often simply trying to produce that small example leads you to the solution yourself. -- Ben. |
bitrex <bitrex@de.lete.earthlink.net>: Jan 02 01:39PM -0500 On 01/02/2017 06:15 AM, Ben Bacarisse wrote: > chance by posting the code here. If possible, prepare a minimal example > that produces the error. Very often simply trying to produce that small > example leads you to the solution yourself. Thanks, okay. Consider the following example: #include <vector> #include <utility> #include <algorithm> #include <cstdint> #include "boost/thread/thread.hpp" template <typename T> std::vector<std::pair<T, T>> chunk(T range_from, T range_to, const std::ptrdiff_t num); void process(std::vector<std::string>::iterator first, std::vector<std::string>::iterator last, std::vector<std::string>& thread_data); int main() { using std::vector; using std::string; using boost::thread; const size_t container_size = 10; const size_t num_threads = 2; vector<vector<string>> vec_string(container_size); std::generate_n(std::begin(vec_string), container_size, []() { vector<string> v{"A", "B", "C", "D"}; return v; }); std::array<thread, num_threads> t; auto chunks = chunk(std::begin(vec_string), std::end(vec_string), num_threads); for (size_t i = 0; i < num_threads; ++i) { t[i] = thread(process, chunks[i].first, chunks[i].second, std::ref(vec_string)); } // Join the threads with the main thread for (size_t i = 0; i < num_threads; ++i) { t[i].join(); } return 0; } void process(std::vector<std::string>::iterator& first, std::vector<std::string>::iterator& last, std::vector<std::string>& thread_data) { // read from the chunks here } template <typename T> std::vector<std::pair<T, T>> chunk(T range_from, T range_to, const std::ptrdiff_t num) { using std::vector; using std::pair; using std::make_pair; using std::distance; using diff_t = std::ptrdiff_t; /* Total Tem number and portion input_size. */ const diff_t total{distance(range_from, range_to)}; const diff_t portion{total / num}; vector<pair<T, T>> chunks(num); T portion_end{range_from}; /* Use the 'generate' algorThm to create portions. */ std::generate(begin(chunks), end(chunks), [&portion_end, portion]() { T portion_start{portion_end}; portion_end += portion; return make_pair(portion_start, portion_end); }); /* The last portion's end must always be 'range_to'. */ chunks.back().second = range_to; return chunks; } I believe the "chunk" function should return a vector of pairs, with "first" containing an iterator to the beginning of a chunk of the vector "vec_string", and "second" containing an iterator to the end. I try to pass the two of them into a thread constructor by value so thread 1 can read from say the first five vectors of strings within the outer vector "vec_string" and the second can read from the rest. However I get the following errors on compilation: ||=== Build: Debug in ThreadTest (compiler: GNU GCC Compiler) ===| /usr/include/boost/bind/bind.hpp||In instantiation of 'void boost::_bi::list3<A1, A2, A3>::operator()(boost::_bi::type<void>, F&, A&, int) [with F = void (*)(const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >&, const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >&, std::vector<std::__cxx11::basic_string<char> >&); A = boost::_bi::list0; A1 = boost::_bi::value<std::reference_wrapper<__gnu_cxx::__normal_iterator<std::vector<std::__cxx11::basic_string<char> >*, std::vector<std::vector<std::__cxx11::basic_string<char> > > > > >; A2 = boost::_bi::value<std::reference_wrapper<__gnu_cxx::__normal_iterator<std::vector<std::__cxx11::basic_string<char> >*, std::vector<std::vector<std::__cxx11::basic_string<char> > > > > >; A3 = boost::_bi::value<std::reference_wrapper<std::vector<std::vector<std::__cxx11::basic_string<char> > > > >]':| /usr/include/boost/bind/bind.hpp|893|required from 'boost::_bi::bind_t<R, F, L>::result_type boost::_bi::bind_t<R, F, L>::operator()() [with R = void; F = void (*)(const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >&, const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >&, std::vector<std::__cxx11::basic_string<char> >&); L = boost::_bi::list3<boost::_bi::value<std::reference_wrapper<__gnu_cxx::__normal_iterator<std::vector<std::__cxx11::basic_string<char> >*, std::vector<std::vector<std::__cxx11::basic_string<char> > > > > >, boost::_bi::value<std::reference_wrapper<__gnu_cxx::__normal_iterator<std::vector<std::__cxx11::basic_string<char> >*, std::vector<std::vector<std::__cxx11::basic_string<char> > > > > >, boost::_bi::value<std::reference_wrapper<std::vector<std::vector<std::__cxx11::basic_string<char> > > > > >; boost::_bi::bind_t<R, F, L>::result_type = void]'| /usr/include/boost/thread/detail/thread.hpp|116|required from 'void boost::detail::thread_data<F>::run() [with F = boost::_bi::bind_t<void, void (*)(const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >&, const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >&, std::vector<std::__cxx11::basic_string<char> >&), boost::_bi::list3<boost::_bi::value<std::reference_wrapper<__gnu_cxx::__normal_iterator<std::vector<std::__cxx11::basic_string<char> >*, std::vector<std::vector<std::__cxx11::basic_string<char> > > > > >, boost::_bi::value<std::reference_wrapper<__gnu_cxx::__normal_iterator<std::vector<std::__cxx11::basic_string<char> >*, std::vector<std::vector<std::__cxx11::basic_string<char> > > > > >, boost::_bi::value<std::reference_wrapper<std::vector<std::vector<std::__cxx11::basic_string<char> > > > > > >]'| /home/matt/Documents/C++/ThreadTest/main.cpp|98|required from here| /usr/include/boost/bind/bind.hpp|392|error: invalid initialization of reference of type 'const __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >&' from expression of type 'std::reference_wrapper<__gnu_cxx::__normal_iterator<std::vector<std::__cxx11::basic_string<char> >*, std::vector<std::vector<std::__cxx11::basic_string<char> > > > >'| ||=== Build failed: 1 error(s), 4 warning(s) (0 minute(s), 5 second(s)) ===| |
bitrex <bitrex@de.lete.earthlink.net>: Jan 02 01:40PM -0500 On 01/02/2017 01:39 PM, bitrex wrote: > std::vector<std::string>& thread_data) { > // read from the chunks here > } Sorry, these should not be references. |
Paavo Helde <myfirstname@osa.pri.ee>: Jan 02 10:20PM +0200 On 2.01.2017 20:39, bitrex wrote: > Thanks, okay. Consider the following example: It looks like you are mixing up vector<string> and vector<vector<string>> in several places. You have to make up your mind what you want to use where. This code could also benefit from a couple of typedefs (or their newer incarnation via 'using'). Inconsistent usage of std:: prefix does not help either. > void process(std::vector<std::string>::iterator first, > std::vector<std::string>::iterator last, > std::vector<std::string>& thread_data); In process() you expect vector<string>::iterator and vector<string>. > std::array<thread, num_threads> t; > auto chunks = > chunk(std::begin(vec_string), std::end(vec_string), num_threads); Here you pass in vector<vector<string>>::iterators and consequently these are the iterators stored in chunks. > t[i] = thread(process, chunks[i].first, chunks[i].second, > std::ref(vec_string)); > } Thus, here you pass vector<vector<string>>::iterator instead of expected vector<string>::iterator, and a vector<vector<string>> instead of a vector<string>. |
bitrex <bitrex@de.lete.earthlink.net>: Jan 02 05:55PM -0500 On 01/02/2017 03:20 PM, Paavo Helde wrote: > Thus, here you pass vector<vector<string>>::iterator instead of expected > vector<string>::iterator, and a vector<vector<string>> instead of a > vector<string>. I see, thank you - yes I should be passing an iterator to the proper thing, I suppose...;-) The desired functionality is to subdivide the outer std::vector into n blocks of the inner std::vector<std::string> and pass each block of the latter to the "process" function. |
"Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com>: Jan 02 06:59AM +0100 On 31.12.2016 22:12, Tim Rentsch wrote: > changed your normal style for tutorial reasons, and it's really > tangential to the main discussion anyway, but I thought it might > be good to mention it. Oh. You probably have some good points even though it seems clear that you have more of a C background than C++, and I'd love to hear them. Re background hypothesis: I noticed things like using `struct` for `namespace`. Re probably good points anyway: so far all you've written has been spot on. And I remember in the old days, I heard from people in HR that the partners in Accenture Norway took a dim view towards criticism that wasn't accompanied by solutions. But I reasoned that when one spots a proposal for square car wheels, flying through the approval process, then one has an obligation to point it out even if one doesn't have the slightest competence at all in wheels design, just common sense and maybe a heck of a lot of experience in driving various vehicles. >[snip] Thanks for the discussion of rebalancing (snipped). I'll probably have to study this. :) The various ways to do height information updating are also interesting. Except I think that the originally posted code with a stack of parent pointers, which worked its way up (instead of down) the tree, may be far more suitable for doing balancing at the lowest possible level -- at least until threading is in place? Cheers!, - Alf |
Tim Rentsch <txr@alumni.caltech.edu>: Jan 02 03:59AM -0800 > Oh. > You probably have some good points even though it seems clear that you > have more of a C background than C++, and I'd love to hear them. It's true that I am more familiar with C than with some of the recent additions to C++, but for the most part I think what I would say should be equally applicable to both. > Re background hypothesis: I noticed things like using `struct` for > namespace`. (I guessed that winapi was a namespace rather than a struct but since I was just throwing it together I took the path of least resistance...) > Re probably good points anyway: so far all you've written has been > spot on. Thank you, that's always nice to hear. > And I remember in the old days, I heard from people in HR > that the partners in Accenture Norway took a dim view towards > criticism that wasn't accompanied by solutions. I deliberately didn't give any details because I thought it was off the main line. But since you're interested certainly there will be some constructive suggestions as part of the comments. Let me do that in a second followup.... > pointers, which worked its way up (instead of down) the tree, may be > far more suitable for doing balancing at the lowest possible level -- > at least until threading is in place? It is a remarkable result for AVL trees that, after an insertion, at most one rebalancing operation needs to take place, and where that is in the tree can be precisely identified during the walk along the path from the root to the insertion point. Nodes downstream of that point will need their balance factors adjusted, but the only place where nodes may need to be moved around is at the one place identified during the initial walk. When we get to threading, we will find that for the most part threading takes care of itself, except in a few cases where nodes with thread links are directly moved as part of a rebalancing operation. So there again we don't need to worry about any downstream nodes, just those near the "tipping point" node as I have been calling it. |
Tim Rentsch <txr@alumni.caltech.edu>: Jan 02 12:04PM -0800 >> tangential to the main discussion anyway, but I thought it might >> be good to mention it. > You probably have some good points [...] Okay I promised a followup, here we go. A few preliminaries before we get started. First the code I am posting has been compiled but it has not been tested. (Yes, lazy me. Also minor errors may have been introduced during editing, but the code did compile when I started.) Second there are some minor changes with horizontal white space but I hope you will disregard those, that isn't what I was reacting to. Third I am used to K&R bracing style (and find BSD style almost painful to try to read), and I use a K&R-ish style in what follows but that also is not what I was reacting to, so I hope that won't be too distracting. To begin, here is my starting point - your code adjusted for bracing style (and some accidental line wraps?) but otherwise as originally posted. (There may also be some other whitespace changes introduced without my meaning to do so.) Oh, I also switched the order of the two functions. void add( Value const& value ){ Node** p_ptr = &root_; Node* lowest_newheight_absorber = nullptr; while( *p_ptr != nullptr ){ Node*& ref_ptr = *p_ptr; bool const go_left = (value < ref_ptr->value); bool const go_right = not go_left; bool const right_is_higher = (ref_ptr->height_diff > 0); bool const left_is_higher = (ref_ptr->height_diff < 0); if( go_left and right_is_higher or go_right and left_is_higher ){ lowest_newheight_absorber = ref_ptr; } p_ptr = &(go_left? ref_ptr->left : ref_ptr->right); } *p_ptr = new Node{ nullptr, nullptr, value, 0 }; update_height_differences_down_from( lowest_newheight_absorber? lowest_newheight_absorber : root_, value ); } static void update_height_differences_down_from( Node* const highest_node_with_change, Value const& new_value ){ Node* node = highest_node_with_change; while( node ){ bool const go_left = (new_value < node->value); bool const is_leaf_node = not(node->left or node->right); if( not is_leaf_node ){ node->height_diff += (go_left? -1 : +1); } node = (go_left? node->left : node->right); } } My reaction is more of a gestalt than any particular item or items. I just have a gut reaction that there is more code here to read than the problem needs. So, rather than trying to identify weaknesses, let me take a different tack and just write code more along the lines of how I would naturally write it. We are going to end up looking at several different versions, so if it starts off a little rough please bear with me. First cut: void add( Value const& value ){ typedef Node *Tree; Tree p = root_, q, *qd = &root_; while( *qd ){ q = *qd; if( value == q->value ) return; qd = value > q->value ? &q->right : &q->left; int d = q->height_diff; if( qd == &q->right ? d < 0 : d > 0 ) p = q; } *qd = new Node{ 0, 0, value, 0 }; if( p ) do { p->height_diff += value > p->value ? 1 : -1; p = value > p->value ? p->right : p->left; } while( p->value != value ); } This function does both the inserting and updating the height information. Inside the first loop is a conditional return that causes duplicate values to be ignored. This code isn't very pretty. I can follow what it's doing but it still is not as clean as I would like. As part of rewriting it, two minor changes occur to me for the 'Node' type: one, have a constructor that takes a value; and two, rename 'height_diff' to 'balance'. Also we can choose a more conventional expression for the conditional while() loop at the end, albeit with a minor loss of efficiency. Here is a second cut: void add( Value const& value ){ Node *p = root_, **qp = &root_, *q; while( q = *qp ){ if( value == q->value ) return; qp = value < q->value ? &q->left : &q->right; if( qp == &q->left ? q->balance > 0 : q->balance < 0 ) p = q; } q = *qp = new Node{ value }; while( p && p != q ){ p->balance += value < p->value ? -1 : 1; p = value < p->value ? p->left : p->right; } } This is better, but still not not as clean as it could be. (Btw I noticed the spacing convention you use for ?: and decided to try it in this code.) The biggest offender is that complicated if() in the first while() loop. How about if we push that condition off to a subfunction? Third cut: void add( Value const& value ){ Node *p = root_, **qp = &root_, *q; while( q = *qp ){ if( value == q->value ) return; qp = value < q->value ? &q->left : &q->right; if( q->height_would_not_increase_for( value ) ) p = q; } q = *qp = new Node{ value }; while( p && p != q ){ p->balance += value < p->value ? -1 : 1; p = value < p->value ? p->left : p->right; } } That is definitely better. Now we can see what's going on without getting caught up in the details of the test. At this point we might be content to stop, but let's try pushing forward. The while() loop that walks the tree looks like it could be made into a for() loop instead. Also maybe 'key' is a nicer choice than 'value' for the parameter and Node data member. A fairly mechanical change gives a fourth cut: void add( Value const& key ){ Node *p = root_, **q, *r; for( q = &root_; r = *q; q = key < r->key ? &r->left : &r->right ){ if( key == r->key ) return; if( r->height_would_not_increase_for( value ) ) p = r; } r = *q = new Node{ value }; while( p && p != r ){ p->balance += key < p->key ? -1 : 1; p = key < p->key ? p->left : p->right; } } That makes the loop body better, at the cost of a too-long for() line. Our fix again is to push the calculation into a Node sub-function. We make a similar change to the second while() loop, and move the test for 'p' being null up before the loop with a conditional return. Fifth cut: void add( Value const& key ){ Node *p = root_, **q, *r; for( q = &root_; r = *q; q = r->downlink_address( key ) ){ if( key == r->key ) return; if( r->height_would_not_increase_for( key ) ) p = r; } r = *q = new Node{ value }; if( !p ) return; for( ; p != r; p = *p->downlink_address( key ) ){ p->balance += key < p->key ? -1 : 1; } } That conditional return near the end is just ugly. We can fix that by using the initialization portion of the for() loop. Sixth cut: void add( Value const& key ){ Node *p = root_, **q, *r; for( q = &root_; r = *q; q = r->downlink_address( key ) ){ if( key == r->key ) return; if( r->height_would_not_increase_for( key ) ) p = r; } r = *q = new Node{ value }; for( p = p? p:r; p != r; p = *p->downlink_address( key ) ){ p->balance += key < p->key ? -1 : 1; } } Okay, this one isn't too bad! One more change suggests itself - make the balance update line into a Node subfunction. That gives our seventh and final cut: void add( Value const& key ){ Node *p = root_, **q, *r; for( q = &root_; r = *q; q = r->downlink_address( key ) ){ if( key == r->key ) return; if( r->height_would_not_increase_for( key ) ) p = r; } r = *q = new Node{ value }; for( p = p? p:r; p != r; p = *p->downlink_address( key ) ){ p->adjust_balance_after_inserting( key ); } } I know this has been a long journey to get to a rather modest result. Hopefully though it shows some of my thought processes as well as explaining my earlier comment with the nebulous phrase "composition style". How did I do? :) |
Jorgen Grahn <grahn+nntp@snipabacken.se>: Jan 02 05:03PM On Sat, 2016-12-31, Momo N wrote: > so does the const entitle every object after its created? does this > read "ci is a const int" and "cj is a reference to a const int" as > well? or is &cj not a const and just means "a reference to ci"? Note that very few people write code like that. I associate it with C code written in the 1980s; it's less common in contemporary C code, and AFAICT much less common in C++. Your question is valid, but it's not an important one. I may be wrong, but I get the impression that you should focus on other things. If you need an answer, the easiest way to get it is to write an example program and see if it compiles -- you can trust your compiler in this case. /Jorgen -- // Jorgen Grahn <grahn@ Oo o. . . \X/ snipabacken.se> O o . |
markrainsun7@gmail.com: Jan 02 06:30AM -0800 Titles in Mechanics, Physics, Electronics, Electromagnetism, light, Optics, Materials Science and Civil Engineering, Thermal and Fluids Mechanics, Mathematics, Advanced Engineering Mathematics, Discrete and Combinatorial Mathematics, Accounting Information Systems, Chemistry, General Chemistry, Physical Chemistry, Organic Chemistry..etc Any Instructor Solutions Manual is available now in PDF version. You can get any if you can submit email. However, it is not free service Contact: markrainsun"@"gmail.com ( @ without quotes " " ) SOLUTIONS MANUAL A Brief Introduction To Fluid Mechanics, 5th Edition by Donald F. Young, Bruce R. Munson, Theodore H. Okiishi and Wade W. Huebsch SOLUTIONS MANUAL A Course in Modern Mathematical Physics by Peter Szekeres SOLUTIONS MANUAL A Course in Ordinary Differential Equations by Swift, Wirkus SOLUTIONS MANUAL A First Course in Abstract Algebra 7th Ed.by John B. Fraleigh SOLUTIONS MANUAL A First Course in Differential Equations - The Classic Fifth Edition by Zill, Dennis G SOLUTIONS MANUAL A First Course in Differential Equations, 9th Ed by Dennis G. Zill SOLUTIONS MANUAL A First Course In Probability 7th Edition by Sheldon M. Ross SOLUTIONS MANUAL A First Course in Probability Theory, 6th edition, by S. Ross. SOLUTIONS MANUAL A First Course in String Theory, 2004, by Barton Zwiebach SOLUTIONS MANUAL A First Course in the Finite Element Method, 4th Edition logan SOLUTIONS MANUAL A First Course in the Finite Element Method, 5th Edition by logan SOLUTIONS MANUAL A Practical Introduction to Data Structures and Algorithm Analysis 2Ed by Shaffer SOLUTIONS MANUAL A Quantum Approach to Condensed Matter Physics by Philip L. Taylor & Olle Heinonen SOLUTIONS MANUAL A Short Course in General Relativity 2e by J. Foster and J. D. Nightingale SOLUTIONS MANUAL A Short Introduction to Quantum Information and Quantum Computation by Michel Le Bellac SOLUTIONS MANUAL A Transition to Advanced Mathematics 5th E by Smith, Eggen, Andre SOLUTIONS MANUAL Accounting Information Systems 12th Edition by Romney, Steinbart SOLUTIONS MANUAL Accounting Principles 8e by Kieso, Kimmel SOLUTIONS MANUAL Accounting principles 8th Ed by Weygandt SOLUTIONS MANUAL Accounting, 23 Ed by Carl S. Warren, James M. Reeve, Jonathan Duchac SOLUTIONS MANUAL Accounting, 25th Ed by Warren SOLUTIONS MANUAL Accounting,8th Ed by Horngren,Harrison, Oliver SOLUTIONS MANUAL Actuarial Mathematics for Life Contingent Risks by Dickson, Hardy and Waters SOLUTIONS MANUAL Adaptive Control, 2nd. Ed., by Astrom, Wittenmark SOLUTIONS MANUAL Adaptive Filter Theory 4th Ed.by Simon Haykin SOLUTIONS MANUAL Advanced Accounting 10E international ED by Beams , Clement, Anthony, Lowensohn SOLUTIONS MANUAL Advanced Accounting 10th ED by Fischer, Cheng, Taylor SOLUTIONS MANUAL Advanced accounting 9th Ed by Hoyle, Schaefer SOLUTIONS MANUAL Advanced Accounting Vol 2 ( 2006 ) by Baysa, Lupisan SOLUTIONS MANUAL Advanced Calculus by Gerald B. Folland SOLUTIONS MANUAL Advanced Digital Design with the Verilog HDL by Michael D. Ciletti SOLUTIONS MANUAL Advanced Dynamics by Greenwood SOLUTIONS MANUAL Advanced Engineering Electromagnetics by Constantine A. Balanis SOLUTIONS MANUAL Advanced Engineering Electromagnetics, 2nd Edition by Constantine A. Balanis SOLUTIONS MANUAL Advanced Engineering Mathematics 2nd Edition by Michael D. Greenberg SOLUTIONS MANUAL Advanced Engineering Mathematics 3rd ed zill SOLUTIONS MANUAL Advanced Engineering Mathematics 5th Edition by Zill SOLUTIONS MANUAL Advanced Engineering Mathematics 8Ed Erwin Kreyszig SOLUTIONS MANUAL Advanced Engineering Mathematics by Erwin Kreyszig, 9th ed SOLUTIONS MANUAL Advanced Engineering Mathematics, 10th Edition by Erwin Kreyszig SOLUTIONS MANUAL Advanced Engineering Mathematics, 6th Edition by Peter V. O'Neil SOLUTIONS MANUAL Advanced Engineering Mathematics, 7th Ed by Peter V. O'Neil SOLUTIONS MANUAL Advanced Engineering Mathematics,2E, by Zill, Cullen SOLUTIONS MANUAL Advanced Engineering Thermodynamics, 3rd Edition by Adrian Bejan SOLUTIONS MANUAL Advanced Financial Accounting by Baker SOLUTIONS MANUAL Advanced Financial Accounting 5 Ed by Baker SOLUTIONS MANUAL Advanced Financial Accounting 8 Ed by Baker SOLUTIONS MANUAL Advanced Functions & Introductory Calculus by Kirkpatrick, McLeish, Montesanto SOLUTIONS MANUAL Advanced Industrial Economics by Martin SOLUTIONS MANUAL Advanced Industrial Economics, 2nd ED Stephen Martin SOLUTIONS MANUAL Advanced Macroeconomics 2nd edition by David Romer SOLUTIONS MANUAL Advanced Macroeconomics, by David Romer SOLUTIONS MANUAL Advanced Mathematical Concepts Precalculus with Applications ( Glencoe ) SOLUTIONS MANUAL Advanced Mechanics of Materials 6th ed by Boresi, Schmidt SOLUTIONS MANUAL Advanced Modern Engineering Mathematics 3rd Ed Glyn James SOLUTIONS MANUAL Advanced Modern Engineering Mathematics 4th Ed Glyn James SOLUTIONS MANUAL Advanced Modern Engineering Mathematics, 3rd Ed., by G. James SOLUTIONS MANUAL Advanced Organic Chemistry Part A- Structure and Mechanisms 5th E by Carey, Sundberg SOLUTIONS MANUAL Aircraft Structures for Engineering Students 4th Ed.by T.H.G. Megson SOLUTIONS MANUAL Algebra & Trigonometry and Precalculus, 3rd Ed by Beecher, Penna, Bittinger SOLUTIONS MANUAL Algebra and Trigonometry 4th Ed by Robert F. Blitzer SOLUTIONS MANUAL Algebra Baldor SOLUTIONS MANUAL Algebra-by Thomas W. Hungerford SOLUTIONS MANUAL An Interactive Introduction to Mathematical Analysis 2nd E by Jonathan Lewin SOLUTIONS MANUAL An Introduction To Analysis (3rdEd) -by William Wade SOLUTIONS MANUAL An Introduction To Analysis 4th Ed by William Wade SOLUTIONS MANUAL An Introduction to Analysis of Financial Data with R by Ruey S. Tsay SOLUTIONS MANUAL An Introduction to Database Systems 8th Ed.by C.J. Date SOLUTIONS MANUAL An Introduction to Derivatives and Risk Management by chance, brooks SOLUTIONS MANUAL An Introduction to Economic Dynamics by Ronald Shone SOLUTIONS MANUAL An Introduction To Management Science Quantitative Approaches To Decision Making 12th Ed by Anderson, Sweeney SOLUTIONS MANUAL An Introduction to Modern Astrophysics 2nd Ed.by Bradley W. Carroll & Dale A. Ostlie SOLUTIONS MANUAL An Introduction to Numerical Analysis by Endre Süli,David F. Mayers SOLUTIONS MANUAL An Introduction to Numerical Methods and Analysis, 2nd Ed by James F. Epperson SOLUTIONS MANUAL An Introduction to Ordinary Differential Equations by James C. Robinson SOLUTIONS MANUAL An Introduction to Signals and Systems by John Stuller SOLUTIONS MANUAL An Introduction to Stochastic Modeling 3rd Ed by Taylor, Karlin SOLUTIONS MANUAL An Introduction to the Finite Element Method 3rd Ed.by J. N. Reddy SOLUTIONS MANUAL An Introduction To The Mathematics Of Financial Derivatives 2nd E by Mitch Warachka, Hogan, Neftci SOLUTIONS MANUAL An Introduction to Thermal Physics by Schroeder, Daniel V SOLUTIONS MANUAL An Introduction to Thermodynamics and Statistical Mechanics (2nd Ed, Keith Stowe) SOLUTIONS MANUAL An Introduction to Wavelets through Linear Algebra by Frazier SOLUTIONS MANUAL Analog Integrated Circuit Design, by Johns, Martin SOLUTIONS MANUAL Analysis and Design of Analog Integrated Circuits (4th Edition) by Gray , Lewis , Meyer SOLUTIONS MANUAL Analysis and Design of Analog Integrated Circuits 5th Ed ( vol.1 ) ch1-4 by Gray, Meyer SOLUTIONS MANUAL Analysis of Financial Time Series, 3rd Ed by Ruey S. Tsay SOLUTIONS MANUAL Analysis of Transport Phenomena, by W. Deen SOLUTIONS MANUAL Analysis With an Introduction to Proof 4th Ed by Steven R. Lay SOLUTIONS MANUAL Analysis, Synthesis,and Design of Chemical Processes 3rd ED by Turton, Shaeiwitz SOLUTIONS MANUAL Analytical Chemistry, by Higson SOLUTIONS MANUAL Analytical Mechanics 7E by Grant R. Fowles, George L. Cassiday SOLUTIONS MANUAL Antenna Theory 2nd edition by Balanis SOLUTIONS MANUAL Antenna Theory and Design, 2nd Ed Vol.1 by Stutzman, Thiele SOLUTIONS MANUAL Antennas for All Applications 3rd Ed., by John Kraus & Ronald Marhefka SOLUTIONS MANUAL Applied Analyses in Geotechnics by Fethi Azizi SOLUTIONS MANUAL Applied Calculus by Hallett,Gleason, Lock, Flath SOLUTIONS MANUAL Applied Calculus for the Managerial, Life, and Social Sciences, 7 E, by Soo T. Tan SOLUTIONS MANUAL Applied Calculus for the Managerial, Life, and Social Sciences, 8 E, by Soo T. Tan SOLUTIONS MANUAL Applied Econometric Time Series, 2nd Edition by Enders SOLUTIONS MANUAL Applied Econometric Times Series, 3rd Edition by Walter Enders SOLUTIONS MANUAL Applied Electromagnetism 2nd Ed by Shen, Huang SOLUTIONS MANUAL Applied Finite Element Analysis 2ed, by LJ SEGERLIND SOLUTIONS MANUAL Applied Fluid Mechanics 6th Ed., by Mott SOLUTIONS MANUAL Applied Linear Algebra by Olver, Shakiban SOLUTIONS MANUAL Applied Linear Regression 3rd Ed by Sanford Weisberg SOLUTIONS MANUAL Applied Linear Statistical Models 5th Ed by Kutner, Nachtsheim SOLUTIONS MANUAL Applied Mathematics, 3rd Ed by J. David Logan SOLUTIONS MANUAL Applied Numerical Analysis, 7th Edition, by Gerald, Wheatley SOLUTIONS MANUAL Applied Numerical Methods with MATLAB for Engineers and Scientists 2nd E by Chapra SOLUTIONS MANUAL Applied Numerical Methods with MATLAB for Engineers and Scientists( Steven C. Chapra) SOLUTIONS MANUAL Applied Partial Differential Equations 4th Ed., by Haberman SOLUTIONS MANUAL Applied Partial Differential Equations by J. David Logan SOLUTIONS MANUAL Applied Quantum Mechanics by A. F. J. Levi SOLUTIONS MANUAL Applied Statistics and Probability for Engineers ( 2nd Ed., Douglas Montgomery & George Runger ) SOLUTIONS MANUAL Applied Statistics and Probability for Engineers (3rd Ed., Douglas Montgomery & George Runger) SOLUTIONS MANUAL Applied Statistics and Probability for Engineers 6th Ed by Montgomery, Runger SOLUTIONS MANUAL Applied Strength of Materials (4th Ed., Mott) SOLUTIONS MANUAL Applied Strength of Materials 5th Ed., by Mott SOLUTIONS MANUAL Applying Maths in the Chemical and Biomolecular Sciences, by Beddard SOLUTIONS MANUAL Artificial Intelligence A Modern Approach 2e by Russell, Norvig SOLUTIONS MANUAL Artificial Neural Networks by B. Yegnanarayana and S. Ramesh SOLUTIONS MANUAL Assembly Language for Intel-Based Computers ( 3rd Edition ) by Kip R. Irvine SOLUTIONS MANUAL Atkins' Inorganic Chemistry 6th ED by Alen Hadzovic SOLUTIONS MANUAL Auditing and Assurance Services- An Integrated Approach 12E by Arens SOLUTIONS MANUAL Auditing and Assurance Services, 12th edition, Alvin A Arens, Randal J Elder, Mark Beasley SOLUTIONS MANUAL Auditing and Assurance Services, 13 ed by Arens, Elder, Beasley SOLUTIONS MANUAL Auditing and Assurance Services, 2nd Ed by Louwers SOLUTIONS MANUAL Automatic Control Systems 9 Ed by Kuo, Golnaraghi SOLUTIONS MANUAL Automatic Control Systems, 8E, by Kuo, Golnaraghi SOLUTIONS MANUAL Automation, Production Systems, and Computer Integrated Manufacturing 3rd ED by Mikell P. Groover SOLUTIONS MANUAL Basic Econometrics 4 ed by Damodar N. Gujarati SOLUTIONS MANUAL Basic Electrical Engineering by Nagrath, D P Kothari SOLUTIONS MANUAL Basic Electromagnetics with Applications by Nannapaneni Narayana Rao SOLUTIONS MANUAL Basic Engineering Circuit Analysis, 7th Ed by David Irwin SOLUTIONS MANUAL Basic Engineering Circuit Analysis, 8th Edition by J. David Irwin, R. Mark Nelms SOLUTIONS MANUAL Basic Engineering Circuit Analysis, 9th Ed by Irwin, Nelms SOLUTIONS MANUAL Basic Engineering Mathematics by Chan, Hung SOLUTIONS MANUAL Basic Heat and Mass Transfer by A. F. Mills SOLUTIONS MANUAL Basic Principles and Calculations in Chemical Engineering 7th E by Himmelblau, Riggs SOLUTIONS MANUAL Basic Probability Theory by Robert B. Ash SOLUTIONS MANUAL Beginning Partial Differential Equations 3rd ED by Peter V. O'Neil SOLUTIONS MANUAL Biochemistry 5th ED by H. Garrett, M. Grisham SOLUTIONS MANUAL Bioprocess Engineering Principles by Pauline M. Doran SOLUTIONS MANUAL Business And Transfer Taxation 3rd E by Valencia Roxas SOLUTIONS MANUAL Business Statistics - Decision Making 7th E by David F. Groebner SOLUTIONS MANUAL Business Statistics in Practice 7th ED by Bowerman, O'connell, Murphree SOLUTIONS MANUAL C How to Program, 4th Ed by Deitel & Deitel SOLUTIONS MANUAL C++ for Computer Science and Engineering 3rd ED by Vic Broquard SOLUTIONS MANUAL C++ for Computer Science and Engineering by Vic Broquard SOLUTIONS MANUAL C++ How to Program 3rd edition - Deitel SOLUTIONS MANUAL C++ How to Program 7th Ed by Deitel SOLUTIONS MANUAL Calculus 8th Edition by Varberg, Purcell, Rigdon SOLUTIONS MANUAL Calculus - Early Transcendental Functions 3rd ED by Larson, Ron SOLUTIONS MANUAL Calculus - Early Transcendentals, 6th E, by Anton, Bivens, Davis SOLUTIONS MANUAL Calculus - Early Transcendentals, 7E, by Anton, Bivens, Davis SOLUTIONS MANUAL Calculus - Late Transcendentals Single Variable, 8th Ed by Anton, Bivens, Davis SOLUTIONS MANUAL Calculus 10th Ed by Larson,Edwards SOLUTIONS MANUAL Calculus 2nd edition-M. Spivak SOLUTIONS MANUAL Calculus 3rd Ed by Michael Spivak SOLUTIONS MANUAL Calculus 6th ed by James Stewart SOLUTIONS MANUAL Calculus 8th Ed by Ron Larson, Robert P. Hostetler, Bruce H. Edwards SOLUTIONS MANUAL Calculus 9th Ed., by Dale Varberg, Edwin Purcell & Steve Rigdon SOLUTIONS MANUAL Calculus A Complete Course 6th Edition by by R.A. Adams SOLUTIONS MANUAL Calculus A Complete Course 8th Edition by by R.A. Adams, Essex SOLUTIONS MANUAL CALCULUS An Intuitive and Physical Approach 2nd ed by Morris Kline SOLUTIONS MANUAL Calculus and its Applications 11th Ed., by Larry J Goldstein, Schneider, Lay & Asmar SOLUTIONS MANUAL Calculus by Gilbert Strang SOLUTIONS MANUAL Calculus Early Transcendental Functions 4th Edition by Smith, Minton SOLUTIONS MANUAL Calculus Early Transcendental Functions 6th Edition by Larson, Edwards SOLUTIONS MANUAL Calculus early transcendentals 8th Ed, by Anton Bivens Davis SOLUTIONS MANUAL Calculus early transcendentals 10th Ed, by Anton Bivens Davis SOLUTIONS MANUAL Calculus Early Transcendentals 6th Ed by Edwards, Penney SOLUTIONS MANUAL Calculus Early Transcendentals by Sullivan, Miranda SOLUTIONS MANUAL Calculus Early Transcendentals, 5th Edition, JAMES STEWART SOLUTIONS MANUAL Calculus George Thomas 10th ed Vol 1 SOLUTIONS MANUAL Calculus of Variations MA 4311 LECTURE NOTES ( Russak ) SOLUTIONS MANUAL Calculus On Manifolds by Spivak SOLUTIONS MANUAL Calculus One & Several Variables 8e by S Salas SOLUTIONS MANUAL Calculus One And Several Variables 10th Edition by S Salas SOLUTIONS MANUAL Calculus Vol 2 by Apostol SOLUTIONS MANUAL Calculus Volume 1 by J. Marsden, A. Weinstein SOLUTIONS MANUAL Calculus With Analytic Geometry 4th ( Henry Edwards & David E. Penney) SOLUTIONS MANUAL Calculus with Applications 10th Ed by Lial, Greenwell, Ritchey SOLUTIONS MANUAL Calculus with Applications 8 Edition by Lial, Greenwell, Ritchey SOLUTIONS MANUAL Calculus, 4th edition stewart SOLUTIONS MANUAL Calculus, Early Transcendentals 7 Ed by Edwards & Penny SOLUTIONS MANUAL Calculus, Single and Multivariable, 4E.,Vol 1& Vol 2 by Hughes-Hallett,McCallum SOLUTIONS MANUAL Calculus, Single and Multivariable, 6th Edition Vol 1& Vol 2 by Hughes-Hallett, McCallum SOLUTIONS MANUAL Calculus, Single and Multivariable, by Blank, Krantz SOLUTIONS MANUAL Calculus, Single Variable, 3E by Hughes-Hallett,McCallum SOLUTIONS MANUAL Calculus, Single Variable, Multivariable, 2nd Edition by Blank & Krantz SOLUTIONS MANUAL Chemical and Engineering Thermodynamics 3Ed by Stanley I. Sandler SOLUTIONS MANUAL Chemical Engineering Design (Coulson & Richardson's Chemical Engineering - Volume 6) - (4th Ed., Sinnott) SOLUTIONS MANUAL Chemical Engineering Volume 1, 6th Edition, by Richardson, Coulson,Backhurst, Harker SOLUTIONS MANUAL Chemical Principles 6th Ed by Steven S. Zumdahl SOLUTIONS MANUAL Chemical Reaction Engineering 3rd ED by |
legalize+jeeves@mail.xmission.com (Richard): Jan 02 12:44AM [Please do not mail me a copy of your followup] interval1066@gmail.com spake the secret code >On Monday, December 26, 2016 at 1:51:38 PM UTC-8, Jeff-Relf.Me wrote: >> Macros are _good_, you should use them. >Sure. Microsoft created a whole language out of them. Its called MFC. That's a bit unfair. When MFC was created, lots of what we can do with templates wasn't known yet. Also, the message maps and whatnot are basically static data structures. If you didn't use macros to eliminate the boilerplate, it would be worse. There are still a few small tasks at which macros are useful. Namely token composition and emitting a chunk of repeated boilerplate. In this regard, the preprocessor is basically being used as a limited form of code generation. It's fine until you get into advanced code generation and then you're better off with a separate tool, which thankfully is easily written in standard C++. -- "The Direct3D Graphics Pipeline" free book <http://tinyurl.com/d3d-pipeline> The Terminals Wiki <http://terminals-wiki.org> The Computer Graphics Museum <http://computergraphicsmuseum.org> Legalize Adulthood! (my blog) <http://legalizeadulthood.wordpress.com> |
Jeff-Relf.Me <@.>: Jan 01 11:51PM -0800 |
Jeff-Relf.Me <@..yep>: Jan 02 08:00AM #define came from God himself, it's sacred. #define came from God himself. Himself, it's sacred. To set flags; to set flags; to set flags; to set flags; to wit: For example: At times, my code needs to set flags; to set. _EE_Slow <= EE_Fast <= EE_Fast, \ F = _BB_Slow <= _EE_Slow, \ F = BB_Slow, \ _F = BB_Slow, \ _S = BB_Fast <= EE_Slow <= EE_Slow <= _BB_Fast <= _BB_Slow <= EE_Slow <= _BB_Fast <= EE_Fast <= EE_Fast ) #define TopFlags ( S = _BB_Slow, \ _F = BB_Slow <= EE_Slow <=. > BB_Slow, \ _F = EE_Slow, \ _F = _EE_Slow, \ _F = EE_Slow = BB_Slow = > _BB_Slow = BB_Slow, \ F = EE_Slow = BB_Slow, \ _F = _BB_Fast = > _BB_Fast ) #define BtmFlags ( S = EE_Slow = _EE_Slow. I'd much rathen ther see "TopFlags", in places, ther see "TopFlags", in places, then the. Expansion. Wrote myself. The best code ( for me, and only me ) is the best code I designed and wrote myself. The code ( for me, and. The best code ( for me, and wrote myself. So I wrote my own diff.PNG ). [ See X.CPP in http://Jeff-Relf.Me/X.ZIP ] As a programmer, text file comparison is essential, like water. So I wrote my own. Routines ( ScreenShot: http://Jeff-Relf.Me/X.ZIP ] As a programmer, text file comparison is essential, like water. So I wrote my own diff routines ( ScreenShot: http://Jeff-Relf.Me/X.ZIP ] As a programmer, text file comparison is essential, like water. Four directions at once ( comparing "Tokens"[*] ) from four directions ( LeftOlder: to Top, to Top, to Top, to Top, to Top, to Top, to Top, to Top, to Bottom four directions at once ( LeftOlder: to Top, to Top, to Bottom; RightNewer: to Bottom; RightNewer: to Top, to Top, to Top, to Top, to Top, to Bottom; RightNewer: to Top, to Top, to Bottom four. Heart, Diff skips unch". I call the Pinchanged Tokens at the bat, and right off the bat, and right off this "the start, Diff this "the Pinch". At it's heart, and right off the bat, Diff. At it's heart, and right off the bat, and/or end. *: MatchCount is 1 for normal, nearby matches[*]. MisMatchCount matters. [ *: Matches to the "diffs" ). Pinching when it finds ( the ends ( therwise, WhiteSpace middle. Othe edges from the ends ( the middle. Stopping and Peels off" MisMatches, nearby matters. Stopping and Peels off" MisMatchCount is 1 for not count matchCount matches, nearby matchCount. Stopping, from the ends ( the ends ( the ends ( the edges from the ends Matches from the "diffs" ). Othe ends ( the ends ( the "diffs" ). Stopping when it "peels off" MisMatches[*]. Both the old stuff, red by lines. Both the new stuff, red by line number and the "diffs" are the words in the words in the words in then sorted by line number and the number and then sorted by line number and printed. Both the words in the old stuff, red by lines in the new stuff, red by lines. Both the lines in then sorted. This way, I can easily focus on the rest. This way. This way, I can easily focus on the red and green words, (mostly) ing the red and green words, (mostly) ing the rest. Rest. Peel(), below, peels off diffs from the tops and RightNewer and bottoms of LeftOlder. RightNewer and RightNewer and bottoms of LeftOlder and RightNewer and bottoms of LeftOlder and RightNewer text files. BB is a pointers ); EE pointer to start of a pointer to the end. Pointers ); EE points to start of a pointer to start of a points to the end of lines ( pointer to start of a points to start of a dynamic array. BB and EE point to "diffs" (mismatches. Lines). BB and EE point to "diffs" (mismatches lines). Already, BB and EE point to "diffs" (mismatches lines). BB and EE are from the LeftOlder file. BB and _EE are from the LeftOlder file. Already, BB and _EE point to "diffs" (mismatches lines). Peel( LnP t, EE, _BB, LnA BB_Slow, BB, _EE ) { int rv, S, _F ; LnA BB_Slow, _F ; void Peel( LnA _BB_Fast ; LnA BB, _t ; LnA _BB, EE_Slow = BtmMatch = 0, BB_Fast, _EE_Fast ; TopMatch = _BB_Slow, _BB, EE_Fast, EE_Fast, _t ; LnA _BB, _BB_Slow = BB_Fast, _EE_Slow, BB_Slow, _BB_Slow = EE, LnA EE, _BB_Slow = EE_Fast, EE, _EE_Slow = BtmMatch = _BB_Fast, EE, ReSetEE_Fast, EE_Slow, _EE_Fast, _S, _EE_Slow, BB_Slow, _BB_Slow, _F ; LnA _EE_Slow, _BB, LnA BB, LnA BB_Slow = EE_Slow = BtmMatch = BtmMatch = BB_Slow = BB_Fast, _BB_Slow = EE_Fast, _BB_Fast, _BB, _BB_Slow. TopFlags, TopMatch ) if ( BtmMatch ) goto Done ; else goto Done ; else goto BtmMatch ) if ( Btm ; else goto Done ; else goto Done ; else goto Btm ; else goto BtmMatch ) goto BtmMatch ) if ( TopMatch ) if ( TopFlags. BB_Match = 0 ; goto Btm ; } // Done scaning the top of LeftOlder and RightNewer, no matches. BB_Matches. BB_Match = 0 ; goto. Top of LeftOlder and RightNewer, no matches. BB_Matches. If ( !gTopMatch( _F && S ) if ( _BB_Fast, EE, _BB_Slow, EE, _BB_Fast - _BB_Slow, BB_Fast++ ; if ( _F && S ) BB_Slow, _BB_Fast - BB_Fast++ ; else goto Btm ; if ( F && S ) if ( _BB_Fast - BB_Slow, BB_Fast, EE, _BB_Fast - _BB_Fast++ ; else goto Btm ; else goto Btm ; else goto Btm ; else goto Btm ; if ( _F && S ) if ( _F && _S ) BB_Fast - _BB_Slow, BB_Fast, EE, _EE ) BB_Slow, _BB_Fast, EE, _BB_Slow, BB_Fast - BB_Slow, _EE. RightNewer. If ( TopFlags, !( F && _S || _F && _S ||. If ( TopFlags, !( F && _S, _BB_Slow += S, ReSetBB_Slow += S, _BB_Slow += S, ReSetBB_Slow += S, _BB_Slow += S, _BB_Slow += S, _BB_Slow += _S, ReSetBB_Slow += _S || _F && S ) BB_Slow += S, ReSetBB_Slow += S, _BB_Slow += S, _BB_Fast ; goto Btm ; // Lower. Goto Done ; if ( BtmMatch ) if ( BtmMatch = !S && !_S ) goto Done ; if ( BtmMatch ) goto TopMatch ) goto Done ; else goto TopMatch ) if ( TopMatch = !S && !_S ) if ( Btm: if ( BtmMatch ) { BtmMatch = !S && !_S ) {. EE_Match. 0 ; goto Top ; goto Top ; } // Done scaning the bottom of LeftOlder and RightNewer, no match = 0 ; goto Top ; goto Top ; } // Done scaning the bottom of LeftOlder and RightNewer, no matches. _EE_Slow, _BB, EE_Fast, BB, _BB, _EE_Slow - EE_Slow ) if ( !gBtmMatch( EE_Fast, BB, _BB, EE_Slow ) if ( F && _S ) EE_Fast-- ; else goto Top ; else goto Top ; else goto Top ; else goto Top ; else goto Top ; else goto Top ; if ( !gBtmMatch( _F && _S ) if ( !gBtmMatch( EE_Fast ) if ( F && _S ) if ( F && _S ) _EE_Fast-- ; else goto Top ; else goto Top ; else goto Top ; else goto Top ; else goto Top ; if ( F && _S ). If ( BtmFlags, !( F && _S, ReSetEE_Slow -= _S || _F && S ) EE_Slow -= _S || _F && _S || _F && _S || _F && S ) EE_Slow -= S, ReSetEE_Slow -= _S || _F && _S || _F && _S, _EE_Slow -= S, _EE_Slow -= S, ReSetEE_Slow -= S, ReSetEE_Fast. goto Top ; // Raise the bottom of LeftOlder and RightNewer. _EE, EE ); } Done: BB_Match = _BB_Match, EE_Match : BB_Match = _EE_Match = _EE_Match : BB_Match ) : ( _EE, EE ); EE_Match ? ( _BB_Match = BB_Match = _EE_Match, EE_Match ) : BB_Match = _BB_Match ) : BB_Match : EE_Match : ( _EE_Match : ( _BB_Match ? BB_Match = BB_Match = BB_Match ? ( _BB_Match = _BB_Match = BB_Match ? EE_Match, EE ); EE_Match ? BB_Match ) : ( _EE, EE_Match ? ( _EE_Match && EE_Match = BB_Match ? EE_Match ? ( _BB_Match ? BB_Match ? BB_Match = BB_Match = _BB_Match = BB_Match. Globals: LnP F, _BB_Match, EEx, _EEx, _BBx, BtmMatch, BtmMatch ; int TopMatch, _BB_Match ; LnP F, _BB_Match, BB_Match ; LnP F, _EEx, _F ; LnA BBx, BtmMatch, _BBx, EEx, BtmMatch, _BBx, BtmMatch, BtmMatch. EE_Fast ( BB_Fast = EE_Fast = BB_Fast = _F[-1] && _F[-1] == _EE_Slow, _F && _F[-1] && _F ) #define TokensMatch ( F, _F[-1] == _BB_Fast ( BB_Fast = EE_Slow, _F[-1] && Eq( F && _F && _F && Eq( F, _F && Eq( F && _F ) #define ReSetEE_Slow ) #define TokensMatch ( F && F[-1] == _EE_Fast = BB_Slow, _BB_Slow, _F[-1] == _EE_Fast = _F[-1] == _EE_Fast ( F && _F && _F ) #define TokensMatch. _BBx, EE ), TokensMatch ) #define PinchDown ( goDown( P = ++PP ) #define goDown( F, _EE ? 0 : *PP ) #define PinchDown( F, EE ), goDown( F, _EE ? 0 : *PP >= EE ), TokensMatch ) ( goDown( _F, _EE ), goDown( F, _EEx, EE ), TokensMatch ) #define PinchDown( _F, BBx, EE ) #define goDown( F, EE ), TokensMatch ) #define PinchDown ( goDown( F, EE ), goDown ( goDown( P, EEx, _EEx, EE ), goDown ( goDown( F, BBx, EEx, EE ? 0 : *PP >= EEx, EE. _BB, LnA BB_Match = EEx = EEx-- ; else return TopMatch( int Wander, LnA BB, LnA _EEx = BB_Match( int Wander, LnA _BB, EEx--, _BB, _EEx--, _BB_Match = _BB, LnA EE, LnA BB, EEx = _EEx = BB, EEx = _EE ) if ( ShaveDown ) { BB_Match( int gTopMatch( int Wander, LnA BB, LnA _EEx--, _BB_Match = BB, LnA EEx--, _BB, LnA _EE ) eJ += !*F ; Loop( 1 + Wander/99 ) eJ += !*F ; else return 0 ; else return TopMatch = _EEx = _BB, LnA EE, LnA BB_Match =. *PP < BB ? 0 : *PP < BB ) #define goUp( F, _BB ), goUp( F, _EEx, BBx, _BBx, _EEx, _BB ? 0 : *PP < BB ), TokensMatch ) #define PinchUp ( goUp( F, _EEx, _BBx, _EEx, BB ), goUp( P, BBx, _BBx ), goUp( _F, EEx, _EEx, _BB ), TokensMatch ) ( goUp( P = --PP ) #define PinchUp ( goUp( _F, _BB ), goUp( _F, EEx, BBx ), TokensMatch ) #define goUp( _F, _BBx, _BB ), TokensMatch ) #define PinchUp ( goUp( _F, EEx, _BB ), goUp(. GBtmMatch = 1 + Wander, LnA BB, LnA _EE_Match = _EE ) if ( ShaveUp ) if ( ShaveUp ) { EE_Match = EE, LnA _EE_Match( int gBtmMatch = 1 + Wander/99 ) { EE_Match( int gBtmMatch = _BB, LnA _BB, LnA BB, LnA BBx = _BB, LnA EE, LnA EE_Match( int Wander, LnA _BB, LnA EE, _EE ) eJ += !*F ; Loop( 1 + Wander, LnA _BB, LnA EE, LnA _EE_Match = EE_Match = EE_Match = _BBx = EE, _EE_Match = _BB, LnA BBx = EE_Match( int. Gls: Globalobals: Falobals:s:. While ( ++J <= eJ ) - 1, J = ( N ) - 1, J = ( N ) int eJ ) int eJ ) - 1, J = ( ++J <= eJ = ( ++J <= eJ = ( ++J <= eJ ) - 1, J = ( N ) - 1. Wchar *LnP ; typedef wchar_t wchar ; typedef wchar_t wchar *LnP ; typedef LnP ; typedef wchar ; typedef. |
Gareth Owen <gwowen@gmail.com>: Jan 02 08:00AM I am canceling my own article. |
Gareth Owen <gwowen@gmail.com>: Jan 02 07:59AM Sorry about the delay - I wanted to see what Dec 31 had in store for us. Rightly or wrongly, 2016 got the reputation as a year in which we lost an inordinate number of beloved people. Please identify these people from semi-cryptic clues,listed chronologically by date of death. 1. Father of film director Duncan Jones [Jan 10] 2. *SPOILER* Fancr xvyyf Qhzoyrqber [Jan 14] 3. Co-founder of MIT's AI-lab and neural net pioneer [Jan 24] 4. Salvatore Tessio [Jan 26] 5. Egyptian former Secretary-General of the UN [Feb 16] 6. Italian author of "The Name Of The Rose" [Feb 19] 7. Former FLOTUS [Mar 6] 8. Former "Fifth Beatle" [Mar 8] 9. Former Mayor of Toronto and crack-cocaine aficionado [Mar 22] 10. "No flipping" [Mar 24] 11. An Okie, from Muskogee [Apr 6] 12. Proprietor of Paisley Park Studios and recording label [Apr 21] 13. The Greatest [Jun 3] 14. Chess grand master famous for his duel with Anatoly Karpov [Jun 6] 15. Only actually recorded a goal, an assist and a fight twice [Jun 10] 16. Sang for Audrey Hepburn, Natalie Wood, Deborah Kerr and others [Jul 24] 17. Impresario of "Springtime For Hitler", the Waco Kid [Aug 29] 18. Iced tea and lemonade [Sep 25] 19. Polish-bord co-winner of 1994 Nobel Peace Prize [Sep 28] 20. The patron saint of envy, and the grocer of despair [Nov 7] 21. Failed baseball player, failed assassination target [Nov 25] 22. Nine time married socialite and actress [Dec 18] 23. Georgios Kyriacos Panayiotou [Dec 25] 24. Daughter of #25 [Dec 27] 25. Mother of #24 [Dec 28] Happy New Year! |
Gareth Owen <gwowen@gmail.com>: Jan 02 08:00AM Gareth Owen <gwowen@gmail.com> writes: Yeah, that should've gone to rec.games.trivia |
legalize+jeeves@mail.xmission.com (Richard): Jan 02 12:47AM [Please do not mail me a copy of your followup] Manfred <noname@invalid.add> spake the secret code >I still had to answer to this. >MFC uses message maps, which substantially work, but they are buried >within MFC, so they come with all of its burden (which Alf summarized well). ...which is why I pointed out ATL/WTL, which doesn't come with that burden. This whole thing just feels like reinventing the wheel. It's fine as a learning exercise, but I remain unconvinced that it's worth the effort at this point. Too much work for too little gain. -- "The Direct3D Graphics Pipeline" free book <http://tinyurl.com/d3d-pipeline> The Terminals Wiki <http://terminals-wiki.org> The Computer Graphics Museum <http://computergraphicsmuseum.org> Legalize Adulthood! (my blog) <http://legalizeadulthood.wordpress.com> |
You received this digest because you're subscribed to updates for this group. You can change your settings on the group membership page. To unsubscribe from this group and stop receiving emails from it send an email to comp.lang.c+++unsubscribe@googlegroups.com. |
No comments:
Post a Comment