Please suggest a tool that could automate replacing like:
Mutex staticMutex = Mutex(m_StaticMutex.Handle());
staticMutex.Wait();
to
boost::unique_lock<boost::mutex> lock(m_StaticMutex);
As you see, the arguments must be taken into account. Is there a way simpler than regular expressions?
If you can do this with a modest amount of manual work (even including “search and replace”) then this answer isn’t relevant.
If the code varies too much (indentation, comments, different variable names) and there’s a lot of these, you might need a Program Transformation tool. Such tools tend to operate on program representations such as abstract syntax trees, and consequently are not bother by layout or whitespace or even numbers that are spelled differently because of radix, but actually have the same value.
Our DMS Software Reengineering Toolkit is one of these, and has a C++ Front End.
You’d need to give it a rewrite rule something like the following:
The use of the metavariable \i in both places will ensure that the rule only fires if the name is exactly the same in both places.
It isn’t clear to me precisely what you are trying to accomplish; it sort of looks like you want to replace each private mutex with one global one, but I’m not a boost expert. If you tried to do that, I’d expect your program to behave differently.