- My diffs now _perfectly match MicroSoft's WinMerge. - 4 Updates
- SemaCondvar and SemaMonitor 2.02 - 1 Update
- Read again about My C++ synchronization objects library - 2 Updates
- Scalable Parallel C++ Conjugate Gradient Linear System Solver Library was updated to version 1.55 - 1 Update
- My C++ synchronization objects library was just updated - 1 Update
- Problem with std::set - 1 Update
- Range-based for loop with intializer_list - 2 Updates
Jeff-Relf.Me <@.>: Jan 07 03:56AM -0800 |
Peter Köhlmann <peter-koehlmann@t-online.de>: Jan 07 01:09PM +0100 wrote: > I wrote: >> My guide: " Dynamic Programming | Set 4 (Longest Common Subsequence) " >> http://www.geeksforgeeks.org/dynamic-programming-set-4-longest-common-subsequence/ < snip shitty code > Just leave us alone with your shite. That garbage is not worth to be pissed on |
jonkalb <google@kalbweb.com>: Jan 07 08:32AM -0800 On Saturday, January 7, 2017 at 3:56:47 AM UTC-8, Jeff-Relf.Me wrote: > _FileCmp( LnA BB, LnA _BB, LnA PP, LnA _PP, LnT &Ln ) { > int Rows = PP - BB + 1, Cols = _PP - _BB + 1 ; u64 Row = Rows, Col = Cols ; This language has a passing resemblance to C++, but isn't C++. Why are you posting in this group? Jon |
moroney@world.std.spaamtrap.com (Michael Moroney): Jan 07 08:25PM >My diffs now _perfectly match MicroSoft's WinMerge. >Now _any whitspace change, including blank lines, is flaged. While you continue to struggle getting your differences going, I will continue using the differences code I have, which, although ancient (but updated for modern computer advances), is based on a rather sophisticated algorithm. It's recursive, but with memory measured in gigabytes these days and efficient use of the stack, this is not a problem. It can turn on or off whether spaces/whitespace, character case, the number of matching lines before a section after a mismatch is considered matching, and how far to look ahead to look for a match etc. It can even produce editing output to produce merged sources so that if Person A makes some source code changes implementing Change X, and Person B makes changes to the same original code implementing Change Y, and Person C makes his own changes Z to the same original code, I can easily produce code with all three changes X, Y and Z in it. Of course any changes to the same area are flagged for special consideration, and there is never any guarantee all changes are even compatible with each other, but it is a huge headstart when the goal is to produce new code with changes X, Y and Z in it. Another nice feature is it doesn't run on Windows. |
Ramine <toto@toto.net>: Jan 07 12:24PM -0800 Hello, I have been working all yesterday and modifying a little bit my SemaCondvar and SemaMonitor algorithms, and and now i think they are working properly, i have ensured that they are more stable now by testing them thoroughly again and again, and now they are powerful, and i think you can be more confident with them You can download my Lightweight SemaMonitor and my SemaCondvar version 2.02 from: Lightweight SemaCondvar & SemaMonitor version 2.02 https://sites.google.com/site/aminer68/light-weight-semacondvar-semamonitor And: SemaCondvar & SemaMonitor version 2.02 https://sites.google.com/site/aminer68/semacondvar-semamonitor You can port them to C++... Thank you, Amine Moulay Ramdane. |
Ramine <toto@toto.net>: Jan 07 12:00PM -0800 Hello.... My C++ synchronization objects library was just updated, now i think that my DRWLock is working properly and i think that my SemaMonitor is working properly, i have just tested it thoroughly and i think it is working properly: You can download it from: https://sites.google.com/site/aminer68/c-synchronization-objects-library Author: Amine Moulay Ramdane Email: aminer@videotron.ca Description: This library contains 7 synchronization objects, first one is my scalable SeqlockX that is a variant of Seqlock that eliminates the weakness of Seqlock that is "livelock"of the readers when there is more writers, and second is my scalable MLock that is a scalable lock , and third is my SemaMonitor that combines all characteristics of a semaphore and an eventcount and also a windows Manual-reset event and also a windows Auto-reset event, and fourth is my scalable DRWLock that is a scalable reader-writer lock that is starvation-free and it does spin-wait, and five is is my scalable DRWLockX that is a scalable reader-writer lock that is starvation-free and it doesn't spin-wait, but it waits on the Event objects and my SemaMonitor, so it is energy efficient, and six is my LW_Asym_RWLockX that is a lightweight scalable Asymmetric Reader-Writer Mutex that uses a technic that looks like Seqlock without looping on the reader side like Seqlock, and this has permited the reader side to be costless, it is FIFO fair on the writer side and FIFO fair on the reader side and it is of course Starvation-free and it does spin-wait, and seven is my Asym_RWLockX, a lightweight scalable Asymmetric Reader-Writer Mutex that uses a technic that looks like Seqlock without looping on the reader side like Seqlock, and this has permited the reader side to be costless, it is FIFO fair on the writer side and FIFO fair on the reader side and it is of course Starvation-free and it does not spin-wait, but waits on my SemaMonitor, so it is energy efficient. My scalable Asymmetric Reader-Writer Mutex calls the windows FlushProcessWriteBuffers() just one time for each writer. I have implemented my inventions with FreePascal and Delphi compilers that don't reorder loads and stores even with compiler optimization, and this is less error prone than C++ that follows a relaxed memory model when compiled with optimization, so i have finally compiled my algorithms implementations with FreePascal into Dynamic Link Libraries that are used by C++ in a form of my C++ Object Synchronization Library. If you take a look at the zip file , you will notice that it contains the DLLs Object pascal source codes, to compile those dynamic link libraries source codes you will have to download my SemaMonitor Object pascal source code and my SeqlockX Object pascal source code and my scalable MLock Object pascal source code and my scalable DRWLock Object pascal source code from here: https://sites.google.com/site/aminer68/ I have compiled and included the 32 bit and 64 bit windows Dynamic Link libraries inside the zip file, if you want to compile the dynamic link libraries for Unix and Linux and OSX on (x86) , please download the source codes of my SemaMonitor and my scalable SeqlockX and my scalable MLock and my scalable DRWLock and compile them yourself. SemaMonitor is a new and portable synchronization object, SemaMonitor combines some of the characteristics of a semaphore and all the characteristics of an eventcount and all the characteristics of a windows Manual-reset event and also all the characteristics of a windows Auto-reset event , and if you want the signal(s) to not be lost, you can configure it by passing a parameter to the constructor, they only use an event object and and a very fast and very efficient and portable lock, so it is fast and it is FIFO fair and and it is portable to windows,Linux and OSX on x86 architecture, here is its C++ interface: class SemaMonitor{ public: SemaMonitor(bool state, long3 InitialCount1=0,long3 MaximumCount1=MaxInt1); ~SemaMonitor(); bool checkRange(long1 x); void wait(signed long mstime=INFINITE); void signal(); void signal_all(); bool signal(long1 nbr); void setSignal(); void resetSignal(); long2 WaitersBlocked(); }; When you set the first parameter of the constructor to true, the signal will not be lost if the threads are not waiting for the SemaMonitor objects, but when you set the first parameter of the construtor to false, if the threads are not waiting for the SemaCondvar or SemaMonitor the signal will be lost.. the parameters InitialCount1 and MaximumCount1 is the semaphore InitialCount and MaximumCount. The wait() method is for the threads to wait on the SemaMonitor or SemaCondvar object for the signal to be signaled. If wait() fails, that can be that the number of waiters is greater than the maximum number of an unsigned long. and the signal() method will signal one time a waiting thread on the SemaMonitor object. the signal_all() method will signal all the waiting threads on the SemaMonitor object. the signal(long2 nbr) method will signal nbr number of waiting threads the setSignal() and resetSignal() methods behave like the windows Event object's methods that are setEvent() and resetEvent(). and WaitersBlocked() will return the number of waiting threads on the SemaMonitor object. As you have noticed my SemaMonitor is a powerful synchronization object. Please read the readme files inside the zip file to know more about them.. Here is my new invention that is my new algorithm: I have invented a new algorithm of my scalable Asymmetric Distributed Reader-Writer Mutex, and this one is costless on the reader side, this one doesn't use any atomic operations and/or StoreLoad style memory barriers on the reader side, my new algorithm has added a technic that looks like Seqlock, but this technic doesn't loop as Seqlock. Here is my algorithm: On the reader side we have this: -- procedure TRWLOCK.RLock(var myid:integer); var myid1:integer; id:long; begin myid1:=0; id:=FCount5^.fcount5; if (id mod 2)=0 then FCount1^[myid1].fcount1:=1 else FCount1^[myid1].fcount1:=2; if ((FCount3^.fcount3=0) and (id=FCount5^.fcount5) and (FCount1^[myid1].fcount1=1)) then else begin LockedExchangeAdd(nbr^.nbr,1); if FCount1^[myid1].fcount1=2 then LockedExchangeAdd(FCount1^[myid1].fcount1,-2) else if FCount1^[myid1].fcount1=1 then LockedExchangeAdd(FCount1^[myid1].fcount1,-1); event2.wait; LockedExchangeAdd(FCount1^[myid1].fcount1,1); LockedExchangeAdd(nbr^.nbr,-1); end; end; -- The writer side will increment FCount5^.fcount5 like does a Seqlock, and the reader side will grap a copy of FCount5^.fcount5 and copy it on the id variable, if (id modula 2) is equal to zero that means the writer side has not modified yet Fcount3^.fcount3, and the reader side will test again if FCount3^.fcount3 equal 0, and if id=FCount5^.fcount5 didn't change and if FCount1^[myid1].fcount1 that we have assigned before didn't change and that means that we are sure that the writer side will block on FCount1^[myid1].fcount1 equal 1. And notice with me that i am not looping like in Seqlock. And the rest of my algorithm is easy to understand. This technic that looks like Seqlock without looping like Seqlock will allow us to be sure that although the x86 architecture will reorder the loads of the inside reader critical section , the loads inside the reader critical section will not go beyond the load of FCount5^.fcount5 and this will allow my algorithm to work correctly. My algorithm is FIFO fair on the writer side and FIFO fair on the Reader side , and of course it is Starvation-free, and it is suitable for realtime critical systems. My Asym_RWLockX and LW_Asym_RWLockX algorithms work the same. You will find the source code of my new algorithm here: https://sites.google.com/site/aminer68/scalable-distributed-reader-writer-mutex It is the version 2 that is my own algorithm. and you can download the source code of my Asym_RWLockX and LW_Asym_RWLockX algorithms that work the same from here: https://sites.google.com/site/aminer68/scalable-rwlock Language: GNU C++ and Visual C++ and C++Builder Operating Systems: Windows, Linux, Unix and Mac OS X on (x86) Thank you, Amine Moulay Ramdane. |
Ramine <toto@toto.net>: Jan 07 12:07PM -0800 Hello.... I correct, read again about the Description: Description: This library contains 7 synchronization objects, first one is my scalable SeqlockX that is a variant of Seqlock that eliminates the weakness of Seqlock that is "livelock"of the readers when there is more writers, and second is my scalable MLock that is a scalable lock , and third is my SemaMonitor that combines some of the characteristics of a semaphore and all the characteristics of an eventcount and all the characteristics of a windows Manual-reset event and also all the characteristics of a windows Auto-reset event , and if you want the signal(s) to not be lost, you can configure it by passing a parameter to the constructor, and fourth is my scalable DRWLock that is a scalable reader-writer lock that is starvation-free and it does spin-wait, and five is is my scalable DRWLockX that is a scalable reader-writer lock that is starvation-free and it doesn't spin-wait, but it waits on the Event objects and my SemaMonitor, so it is energy efficient, and six is my LW_Asym_RWLockX that is a lightweight scalable Asymmetric Reader-Writer Mutex that uses a technic that looks like Seqlock without looping on the reader side like Seqlock, and this has permited the reader side to be costless, it is FIFO fair on the writer side and FIFO fair on the reader side and it is of course Starvation-free and it does spin-wait, and seven is my Asym_RWLockX, a lightweight scalable Asymmetric Reader-Writer Mutex that uses a technic that looks like Seqlock without looping on the reader side like Seqlock, and this has permited the reader side to be costless, it is FIFO fair on the writer side and FIFO fair on the reader side and it is of course Starvation-free and it does not spin-wait, but waits on my SemaMonitor, so it is energy efficient. You can download it from: https://sites.google.com/site/aminer68/c-synchronization-objects-library Thank you, Amine Moulay Ramdane. |
Ramine <toto@toto.net>: Jan 07 11:47AM -0800 Hello.... Scalable Parallel C++ Conjugate Gradient Linear System Solver Library was updated to version 1.55 You can download it from: https://sites.google.com/site/aminer68/scalable-parallel-c-conjugate-gradient-linear-system-solver-library Author: Amine Moulay Ramdane Description: This library contains a Scalable Parallel implementation of Conjugate Gradient Dense Linear System Solver library that is NUMA-aware and cache-aware, and it contains also a Scalable Parallel implementation of Conjugate Gradient Sparse Linear System Solver library that is cache-aware. Please download the zip file and read the readme file inside the zip to know how to use it. Language: GNU C++ and Visual C++ and C++Builder Operating Systems: Windows, Linux, Unix and Mac OS X on (x86) Thank you, Amine Moulay Ramdane. |
Ramine <toto@toto.net>: Jan 07 11:40AM -0800 Hello... My C++ synchronization objects library was just updated, now i think that my DRWLock is working properly and i think that my SemaMonitor is working properly, i have just tested it thoroughly and i think it is working properly: You can download it from: https://sites.google.com/site/aminer68/c-synchronization-objects-library Author: Amine Moulay Ramdane Email: aminer@videotron.ca Description: This library contains 7 synchronization objects, first one is my scalable SeqlockX that is a variant of Seqlock that eliminates the weakness of Seqlock that is "livelock"of the readers when there is more writers, and second is my scalable MLock that is a scalable lock , and third is my SemaMonitor that combines all characteristics of a semaphore and an eventcount and also a windows Manual-reset event and also a windows Auto-reset event, and fourth is my scalable DRWLock that is a scalable reader-writer lock that is starvation-free and it does spin-wait, and five is is my scalable DRWLockX that is a scalable reader-writer lock that is starvation-free and it doesn't spin-wait, but it waits on the Event objects and my SemaMonitor, so it is energy efficient, and six is my LW_Asym_RWLockX that is a lightweight scalable Asymmetric Reader-Writer Mutex that uses a technic that looks like Seqlock without looping on the reader side like Seqlock, and this has permited the reader side to be costless, it is FIFO fair on the writer side and FIFO fair on the reader side and it is of course Starvation-free and it does spin-wait, and seven is my Asym_RWLockX, a lightweight scalable Asymmetric Reader-Writer Mutex that uses a technic that looks like Seqlock without looping on the reader side like Seqlock, and this has permited the reader side to be costless, it is FIFO fair on the writer side and FIFO fair on the reader side and it is of course Starvation-free and it does not spin-wait, but waits on my SemaMonitor, so it is energy efficient. My scalable Asymmetric Reader-Writer Mutex calls the windows FlushProcessWriteBuffers() just one time for each writer. I have implemented my inventions with FreePascal and Delphi compilers that don't reorder loads and stores even with compiler optimization, and this is less error prone than C++ that follows a relaxed memory model when compiled with optimization, so i have finally compiled my algorithms implementations with FreePascal into Dynamic Link Libraries that are used by C++ in a form of my C++ Object Synchronization Library. If you take a look at the zip file , you will notice that it contains the DLLs Object pascal source codes, to compile those dynamic link libraries source codes you will have to download my SemaMonitor Object pascal source code and my SeqlockX Object pascal source code and my scalable MLock Object pascal source code and my scalable DRWLock Object pascal source code from here: https://sites.google.com/site/aminer68/ I have compiled and included the 32 bit and 64 bit windows Dynamic Link libraries inside the zip file, if you want to compile the dynamic link libraries for Unix and Linux and OSX on (x86) , please download the source codes of my SemaMonitor and my scalable SeqlockX and my scalable MLock and my scalable DRWLock and compile them yourself. My SemaMonitor of my C++ synchronization objects library is easy to use, it combines all characteristics of a semaphore and an eventcount and also a windows Manual-reset event and also a windows Auto-reset event, here is its C++ interface: class SemaMonitor{ SemaMonitor(bool state, long1 InitialCount1=0,long1 MaximumCount1=MaxInt1); ~SemaMonitor(); void wait(signed long mstime=INFINITE); void signal(); void signal_all(); void signal(long1 nbr); void setSignal(); void resetSignal(); long2 WaitersBlocked(); }; So when you set the first parameter that is state of the constructor to true. it will add the characteristic of a Semaphore to the to the Eventcount, so the signal will not be lost if the threads are not waiting for the SemaMonitor objects, but when you set the first parameter of the construtor to false, it will not behave like a Semaphore because if the threads are not waiting for the SemaCondvar or SemaMonitor the signal will be lost.. the parameters InitialCount1 and MaximumCount1 is the semaphore InitialCount and MaximumCount. The wait() method is for the threads to wait on the SemaMonitor object for the signal to be signaled. If wait() fails, that can be that the number of waiters is greater than the maximum number of an unsigned long. and the signal() method will signal one time a waiting thread on the SemaMonitor object. the signal_all() method will signal all the waiting threads on the SemaMonitor object. the signal(long2 nbr) method will signal nbr number of waiting threads the setSignal() and resetSignal() methods behave like the windows Event object's methods that are setEvent() and resetEvent(). and WaitersBlocked() will return the number of waiting threads on the SemaMonitor object. As you have noticed my SemaMonitor is a powerful synchronization object. Please read the readme files inside the zip file to know more about them.. Here is my new invention that is my new algorithm: I have invented a new algorithm of my scalable Asymmetric Distributed Reader-Writer Mutex, and this one is costless on the reader side, this one doesn't use any atomic operations and/or StoreLoad style memory barriers on the reader side, my new algorithm has added a technic that looks like Seqlock, but this technic doesn't loop as Seqlock. Here is my algorithm: On the reader side we have this: -- procedure TRWLOCK.RLock(var myid:integer); var myid1:integer; id:long; begin myid1:=0; id:=FCount5^.fcount5; if (id mod 2)=0 then FCount1^[myid1].fcount1:=1 else FCount1^[myid1].fcount1:=2; if ((FCount3^.fcount3=0) and (id=FCount5^.fcount5) and (FCount1^[myid1].fcount1=1)) then else begin LockedExchangeAdd(nbr^.nbr,1); if FCount1^[myid1].fcount1=2 then LockedExchangeAdd(FCount1^[myid1].fcount1,-2) else if FCount1^[myid1].fcount1=1 then LockedExchangeAdd(FCount1^[myid1].fcount1,-1); event2.wait; LockedExchangeAdd(FCount1^[myid1].fcount1,1); LockedExchangeAdd(nbr^.nbr,-1); end; end; -- The writer side will increment FCount5^.fcount5 like does a Seqlock, and the reader side will grap a copy of FCount5^.fcount5 and copy it on the id variable, if (id modula 2) is equal to zero that means the writer side has not modified yet Fcount3^.fcount3, and the reader side will test again if FCount3^.fcount3 equal 0, and if id=FCount5^.fcount5 didn't change and if FCount1^[myid1].fcount1 that we have assigned before didn't change and that means that we are sure that the writer side will block on FCount1^[myid1].fcount1 equal 1. And notice with me that i am not looping like in Seqlock. And the rest of my algorithm is easy to understand. This technic that looks like Seqlock without looping like Seqlock will allow us to be sure that although the x86 architecture will reorder the loads of the inside reader critical section , the loads inside the reader critical section will not go beyond the load of FCount5^.fcount5 and this will allow my algorithm to work correctly. My algorithm is FIFO fair on the writer side and FIFO fair on the Reader side , and of course it is Starvation-free, and it is suitable for realtime critical systems. My Asym_RWLockX and LW_Asym_RWLockX algorithms work the same. You will find the source code of my new algorithm here: https://sites.google.com/site/aminer68/scalable-distributed-reader-writer-mutex It is the version 2 that is my own algorithm. and you can download the source code of my Asym_RWLockX and LW_Asym_RWLockX algorithms that work the same from here: https://sites.google.com/site/aminer68/scalable-rwlock Language: GNU C++ and Visual C++ and C++Builder Operating Systems: Windows, Linux, Unix and Mac OS X on (x86) Thank you, Amine Moulay Ramdane. |
jonkalb <google@kalbweb.com>: Jan 07 08:37AM -0800 On Thursday, December 22, 2016 at 3:16:40 PM UTC-8, Joseph Hesse wrote: > stuff that goes between < and > have to be types. > std::set<X, bool (*)(const X &, const X &)> SetOfX(Comp); > fixes it when I want to use function pointers. But, in general, you shouldn't want to use function pointers. In-lineable function objects will give you better performance without giving up clarity. Jon |
Paul <pepstein5@gmail.com>: Jan 07 07:58AM -0800 I'm stuck on the below question from C++ Primer. Various answers are available on the web, none of them completely convincing. No, this isn't homework or anything. I'm just using the book to learn. I'm not a student. Thanks for your help. "When you use an initializer_list in a range for would you ever use a reference as the loop control variable? If so, why? If not, why not?" Paul |
"Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com>: Jan 07 05:14PM +0100 On 07.01.2017 16:58, Paul wrote: > "When you use an initializer_list in a range for would you ever use a > reference as the loop control variable? If so, why? If not, why > not?" The same concerns as when choosing formal argument types, apply. Biggish thing: pass by reference (usually reference to `const`). Built-in type: pass by value. Cheers & hth., - Alf |
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