ENH: Synchronize factories across modules in Python#118
Conversation
|
http://review.source.kitware.com/#/c/23362/ Francois Budin Matt McCormick Francois Budin Kitware Build Robot Kitware Build Robot Francois Budin Francois Budin Francois Budin Francois Budin Kitware Build Robot Kitware Build Robot Francois Budin Bradley Lowekamp Francois Budin Kitware Build Robot Matt McCormick |
|
@fbudin69500 This was previously approved, but not merged. |
|
This is still work in progress. This is an important improvement for ITK but I haven't found the time to quite finish the PR. It is on my to-do list though. |
|
Accidentally deleted the branch in my account. |
0a971cc to
0bb36b8
Compare
4ada86c to
d62c059
Compare
Replaces individual synchronization mechanisms across modules for each global variables used in ITK by a central mechanism in which all these variables are registered and which gives a single entry point to synchronize all global variables. Global variables are registered in a map, with a key that is their name and a value that is a pair of their pointer and a pointer to a synchronization function. The synchronization function will be called to synchronize these global variables across the different modules. Different global variables may have different synchronization functions: Some variables will just override the previous value in all modules whereas some others will need to actually synchronize their values. Several macros defined in `itkSingletonMacro.h` facilitate the usage of the new mechanism. A few static global variables have yet to be integrated to this mechanism. This included static variables defined in: * itkTransformFactoryBase.h * itkSpatialObjectFactoryBase.h * itkFEMFactoryBase.h * itkCurvatureNDAnisotropicDiffusionFunction.h * itkLevelSetFunction.h This list is not exhaustive and more global variables can be found with the following command line in bash: grep -r 'static '|grep m_ |grep -v ThirdParty |grep -v Review | grep -v const
d62c059 to
a66337e
Compare
Fix typos in comments CMakeLists.txt: Export all symbols (InsightSoftwareConsortium#136) test/cctest/CMakeLists.txt: Added /bigobj for MSVC tests (InsightSoftwareConsortium#135) Add DOUBLE_CONVERSION_HAS_ATTRIBUTE to fix warnings on MSVC and enable for GCC. (InsightSoftwareConsortium#131) Fix broken MSVC builds. (InsightSoftwareConsortium#130) Add support for quiet and signaling NaNs to the ieee header. (InsightSoftwareConsortium#128) Move buffer and buffer_pos down (InsightSoftwareConsortium#125) * Move buffer and buffer_pos down Simplifies code by removing two asserts Optimize code with -ftrivial-auto-var-init=pattern by avoiding initialization when buffer is not used * Disable -ftrivial-auto-var-init=pattern for a large buffer Fix strtod.cc undefined constants (InsightSoftwareConsortium#123) When DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS is not defined there is a build error when -Wall -Werror enabled because kMaxExactDoubleIntegerDecimalDigits, exact_powers_of_ten and kExactPowersOfTenSize are used only in else branch of this define (when it's defined). Fixes google/double-conversion#122 Add full license to test .cc files missing it. (InsightSoftwareConsortium#121) Some files in cctest had a 1-line copyright that doesn't list the license. This copies the project license to those files, preserving the date. Add wasm32 as supported platform (InsightSoftwareConsortium#120) Summary: Emscripten is already included, adding wasm32 the same way for when build with "plain" clang wasm32 (without emscripten) Pseiderer/add nios2 and xtensa 001 (InsightSoftwareConsortium#119) * double-conversion: enable for nios2 Nios2 supports double conversion, tested using qemu: Add support for microblaze. Add support for e2k architecture. (InsightSoftwareConsortium#118) Add min exponent width option in double-to-string conversion (InsightSoftwareConsortium#116) Remove reference to `diy-fp.cc` That file was removed in a previous commit. More Bignum fiddling. (InsightSoftwareConsortium#108) * Char has size 1. * More const. * Allow inlining. * Compact Bignum sizes. * Consistent naming. Remove redundant parenthesis. Reported by seanm (github). Optimise Bignum layout. (InsightSoftwareConsortium#107) * Use memset to clear bignum. * Improve data locality. * Reduce size of bignum. Split Strtod() (InsightSoftwareConsortium#106) Add `StrtodTrimmed` method, exposing a later stage of the conversion pipeline. Some tools can do the first stage outside of the double-conversion library and would prefer not to pay the cost of doing it again. Split double-conversion. (InsightSoftwareConsortium#104) Separates the two main classes into separate c and h files. Fix naming. (InsightSoftwareConsortium#103) Fix naming of `case_insensibility` to `case_insensitivity`. Consistent macro prefix. (InsightSoftwareConsortium#101) Use standard min/max. (InsightSoftwareConsortium#102) Fix some issues with invalid hex-float literals. When converting `0x` the converter would assert (or access out of boundary). With `0x1.p1234556666FFFFF` the converter would overflow and not yield the correct exponent. Usefulcat master (InsightSoftwareConsortium#98) * minor bug fix: use free() instead of delete[] to free memory allocated by strdup() * fix for uninitialized variable problem found by valgrind * disable assertions for 'optimize' build * removed -g option that was inadvertently added to CCFLAGS * ignore generated files Fix warning for g++ 4.9.3. CMake: install to correct lib dir (InsightSoftwareConsortium#93) 64-bit libraries should be installed in /usr/lib64, not in /usr/lib/ Make the destination lib dir configurable. Add big endian ARM support (InsightSoftwareConsortium#92) This fixes compilation on such platforms. Switch to relative includes. Fix 16-bit separators. msvc: check if _MSC_VER is defined (InsightSoftwareConsortium#88) Allow for compilation in emscripten (InsightSoftwareConsortium#86) Support emscripten Add test cases. Fixes InsightSoftwareConsortium#62 Add support of ARC architecture (InsightSoftwareConsortium#82) More info about ARC architecture is here: [1] & [2]. We need ARC supported here for many things like: - ICU (see [3]) - Qt5 etc Fix hex literal bug. Large hex literals would lose their minus sign. Support separator characters. Add support for hexadecimal float literals. Fix bug where hex numbers would lose the minus sign. Add comments for achitecture check. This should make it easier to add new architectures. Add support for aarch64_be, or1k and microblazebe. Add support for Windows on ARM and ARM64 (InsightSoftwareConsortium#76) Use `static_assert` with newer compilers. Add Native Client as support architecture. Avoid undefined cast to make ASAN happy. Avoid undefined cast to make ASAN happy. Add `exports_files` Processed length should include no trailing junk (InsightSoftwareConsortium#63) Clarify output charset in DoubleToAscii documentation (InsightSoftwareConsortium#61) * Clarify output charset in DoubleToAscii documentation * Fixing typo in charset docs. Fix warning for code that will never be executed (InsightSoftwareConsortium#59) Rename macros. Renamed DISALLOW_COPY_AND_ASSIGN and DISALLOW_IMPLICIT_CONSTRUCTORS to DC_DISALLOW_COPY_AND_ASSIGN and DC_DISALLOW_IMPLICIT_CONSTRUCTORS. This makes it easier to use this library in projects that have macros with the same name (as is common in Google). Some refactorings: remove unused static, replace deprecated headers, init member in constructor REF: replace deprecated headers REF: meaningless static definition in anonymous namespace REF: init member in constructor Fix typo in variable name. Suppress issue in clang analyzer. CMake fixes. Remove unused CMake file. Implement ALLOW_CASE_INSENSIBILITY mode for StringToDoubleConverter c… Remove unnecessary INSTALL_INTERFACE expression. Use template for CMake installation. Fix mistake for build interface include dir. Improve CMake changes. Update CMake package generation. Implement ALLOW_CASE_INSENSIBILITY mode for StringToDoubleConverter class Add assert and test. Avoid negative shift. When filling in fractional digits in a fixed representation we might use all existing digits. When this happens, we can not look at the next digit to see if we should round up. Before this fix, we tried to shift by a negative amount to see if the (non-existing) next bit was set to 1 (requiring the number to be rounded up).
Fix typos in comments CMakeLists.txt: Export all symbols (InsightSoftwareConsortium#136) test/cctest/CMakeLists.txt: Added /bigobj for MSVC tests (InsightSoftwareConsortium#135) Add DOUBLE_CONVERSION_HAS_ATTRIBUTE to fix warnings on MSVC and enable for GCC. (InsightSoftwareConsortium#131) Fix broken MSVC builds. (InsightSoftwareConsortium#130) Add support for quiet and signaling NaNs to the ieee header. (InsightSoftwareConsortium#128) Move buffer and buffer_pos down (InsightSoftwareConsortium#125) * Move buffer and buffer_pos down Simplifies code by removing two asserts Optimize code with -ftrivial-auto-var-init=pattern by avoiding initialization when buffer is not used * Disable -ftrivial-auto-var-init=pattern for a large buffer Fix strtod.cc undefined constants (InsightSoftwareConsortium#123) When DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS is not defined there is a build error when -Wall -Werror enabled because kMaxExactDoubleIntegerDecimalDigits, exact_powers_of_ten and kExactPowersOfTenSize are used only in else branch of this define (when it's defined). Fixes google/double-conversion#122 Add full license to test .cc files missing it. (InsightSoftwareConsortium#121) Some files in cctest had a 1-line copyright that doesn't list the license. This copies the project license to those files, preserving the date. Add wasm32 as supported platform (InsightSoftwareConsortium#120) Summary: Emscripten is already included, adding wasm32 the same way for when build with "plain" clang wasm32 (without emscripten) Pseiderer/add nios2 and xtensa 001 (InsightSoftwareConsortium#119) * double-conversion: enable for nios2 Nios2 supports double conversion, tested using qemu: Add support for microblaze. Add support for e2k architecture. (InsightSoftwareConsortium#118) Add min exponent width option in double-to-string conversion (InsightSoftwareConsortium#116) Remove reference to `diy-fp.cc` That file was removed in a previous commit. More Bignum fiddling. (InsightSoftwareConsortium#108) * Char has size 1. * More const. * Allow inlining. * Compact Bignum sizes. * Consistent naming. Remove redundant parenthesis. Reported by seanm (github). Optimise Bignum layout. (InsightSoftwareConsortium#107) * Use memset to clear bignum. * Improve data locality. * Reduce size of bignum. Split Strtod() (InsightSoftwareConsortium#106) Add `StrtodTrimmed` method, exposing a later stage of the conversion pipeline. Some tools can do the first stage outside of the double-conversion library and would prefer not to pay the cost of doing it again. Split double-conversion. (InsightSoftwareConsortium#104) Separates the two main classes into separate c and h files. Fix naming. (InsightSoftwareConsortium#103) Fix naming of `case_insensibility` to `case_insensitivity`. Consistent macro prefix. (InsightSoftwareConsortium#101) Use standard min/max. (InsightSoftwareConsortium#102) Fix some issues with invalid hex-float literals. When converting `0x` the converter would assert (or access out of boundary). With `0x1.p1234556666FFFFF` the converter would overflow and not yield the correct exponent. Usefulcat master (InsightSoftwareConsortium#98) * minor bug fix: use free() instead of delete[] to free memory allocated by strdup() * fix for uninitialized variable problem found by valgrind * disable assertions for 'optimize' build * removed -g option that was inadvertently added to CCFLAGS * ignore generated files Fix warning for g++ 4.9.3. CMake: install to correct lib dir (InsightSoftwareConsortium#93) 64-bit libraries should be installed in /usr/lib64, not in /usr/lib/ Make the destination lib dir configurable. Add big endian ARM support (InsightSoftwareConsortium#92) This fixes compilation on such platforms. Switch to relative includes. Fix 16-bit separators. msvc: check if _MSC_VER is defined (InsightSoftwareConsortium#88) Allow for compilation in emscripten (InsightSoftwareConsortium#86) Support emscripten Add test cases. Fixes InsightSoftwareConsortium#62 Add support of ARC architecture (InsightSoftwareConsortium#82) More info about ARC architecture is here: [1] & [2]. We need ARC supported here for many things like: - ICU (see [3]) - Qt5 etc Fix hex literal bug. Large hex literals would lose their minus sign. Support separator characters. Add support for hexadecimal float literals. Fix bug where hex numbers would lose the minus sign. Add comments for achitecture check. This should make it easier to add new architectures. Add support for aarch64_be, or1k and microblazebe. Add support for Windows on ARM and ARM64 (InsightSoftwareConsortium#76) Use `static_assert` with newer compilers. Add Native Client as support architecture. Avoid undefined cast to make ASAN happy. Avoid undefined cast to make ASAN happy. Add `exports_files` Processed length should include no trailing junk (InsightSoftwareConsortium#63) Clarify output charset in DoubleToAscii documentation (InsightSoftwareConsortium#61) * Clarify output charset in DoubleToAscii documentation * Fixing typo in charset docs. Fix warning for code that will never be executed (InsightSoftwareConsortium#59) Rename macros. Renamed DISALLOW_COPY_AND_ASSIGN and DISALLOW_IMPLICIT_CONSTRUCTORS to DC_DISALLOW_COPY_AND_ASSIGN and DC_DISALLOW_IMPLICIT_CONSTRUCTORS. This makes it easier to use this library in projects that have macros with the same name (as is common in Google). Some refactorings: remove unused static, replace deprecated headers, init member in constructor REF: replace deprecated headers REF: meaningless static definition in anonymous namespace REF: init member in constructor Fix typo in variable name. Suppress issue in clang analyzer. CMake fixes. Remove unused CMake file. Implement ALLOW_CASE_INSENSIBILITY mode for StringToDoubleConverter c… Remove unnecessary INSTALL_INTERFACE expression. Use template for CMake installation. Fix mistake for build interface include dir. Improve CMake changes. Update CMake package generation. Implement ALLOW_CASE_INSENSIBILITY mode for StringToDoubleConverter class Add assert and test. Avoid negative shift. When filling in fractional digits in a fixed representation we might use all existing digits. When this happens, we can not look at the next digit to see if we should round up. Before this fix, we tried to shift by a negative amount to see if the (non-existing) next bit was set to 1 (requiring the number to be rounded up).
Fix typos in comments CMakeLists.txt: Export all symbols (#136) test/cctest/CMakeLists.txt: Added /bigobj for MSVC tests (#135) Add DOUBLE_CONVERSION_HAS_ATTRIBUTE to fix warnings on MSVC and enable for GCC. (#131) Fix broken MSVC builds. (#130) Add support for quiet and signaling NaNs to the ieee header. (#128) Move buffer and buffer_pos down (#125) * Move buffer and buffer_pos down Simplifies code by removing two asserts Optimize code with -ftrivial-auto-var-init=pattern by avoiding initialization when buffer is not used * Disable -ftrivial-auto-var-init=pattern for a large buffer Fix strtod.cc undefined constants (#123) When DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS is not defined there is a build error when -Wall -Werror enabled because kMaxExactDoubleIntegerDecimalDigits, exact_powers_of_ten and kExactPowersOfTenSize are used only in else branch of this define (when it's defined). Fixes google/double-conversion#122 Add full license to test .cc files missing it. (#121) Some files in cctest had a 1-line copyright that doesn't list the license. This copies the project license to those files, preserving the date. Add wasm32 as supported platform (#120) Summary: Emscripten is already included, adding wasm32 the same way for when build with "plain" clang wasm32 (without emscripten) Pseiderer/add nios2 and xtensa 001 (#119) * double-conversion: enable for nios2 Nios2 supports double conversion, tested using qemu: Add support for microblaze. Add support for e2k architecture. (#118) Add min exponent width option in double-to-string conversion (#116) Remove reference to `diy-fp.cc` That file was removed in a previous commit. More Bignum fiddling. (#108) * Char has size 1. * More const. * Allow inlining. * Compact Bignum sizes. * Consistent naming. Remove redundant parenthesis. Reported by seanm (github). Optimise Bignum layout. (#107) * Use memset to clear bignum. * Improve data locality. * Reduce size of bignum. Split Strtod() (#106) Add `StrtodTrimmed` method, exposing a later stage of the conversion pipeline. Some tools can do the first stage outside of the double-conversion library and would prefer not to pay the cost of doing it again. Split double-conversion. (#104) Separates the two main classes into separate c and h files. Fix naming. (#103) Fix naming of `case_insensibility` to `case_insensitivity`. Consistent macro prefix. (#101) Use standard min/max. (#102) Fix some issues with invalid hex-float literals. When converting `0x` the converter would assert (or access out of boundary). With `0x1.p1234556666FFFFF` the converter would overflow and not yield the correct exponent. Usefulcat master (#98) * minor bug fix: use free() instead of delete[] to free memory allocated by strdup() * fix for uninitialized variable problem found by valgrind * disable assertions for 'optimize' build * removed -g option that was inadvertently added to CCFLAGS * ignore generated files Fix warning for g++ 4.9.3. CMake: install to correct lib dir (#93) 64-bit libraries should be installed in /usr/lib64, not in /usr/lib/ Make the destination lib dir configurable. Add big endian ARM support (#92) This fixes compilation on such platforms. Switch to relative includes. Fix 16-bit separators. msvc: check if _MSC_VER is defined (#88) Allow for compilation in emscripten (#86) Support emscripten Add test cases. Fixes #62 Add support of ARC architecture (#82) More info about ARC architecture is here: [1] & [2]. We need ARC supported here for many things like: - ICU (see [3]) - Qt5 etc Fix hex literal bug. Large hex literals would lose their minus sign. Support separator characters. Add support for hexadecimal float literals. Fix bug where hex numbers would lose the minus sign. Add comments for achitecture check. This should make it easier to add new architectures. Add support for aarch64_be, or1k and microblazebe. Add support for Windows on ARM and ARM64 (#76) Use `static_assert` with newer compilers. Add Native Client as support architecture. Avoid undefined cast to make ASAN happy. Avoid undefined cast to make ASAN happy. Add `exports_files` Processed length should include no trailing junk (#63) Clarify output charset in DoubleToAscii documentation (#61) * Clarify output charset in DoubleToAscii documentation * Fixing typo in charset docs. Fix warning for code that will never be executed (#59) Rename macros. Renamed DISALLOW_COPY_AND_ASSIGN and DISALLOW_IMPLICIT_CONSTRUCTORS to DC_DISALLOW_COPY_AND_ASSIGN and DC_DISALLOW_IMPLICIT_CONSTRUCTORS. This makes it easier to use this library in projects that have macros with the same name (as is common in Google). Some refactorings: remove unused static, replace deprecated headers, init member in constructor REF: replace deprecated headers REF: meaningless static definition in anonymous namespace REF: init member in constructor Fix typo in variable name. Suppress issue in clang analyzer. CMake fixes. Remove unused CMake file. Implement ALLOW_CASE_INSENSIBILITY mode for StringToDoubleConverter c… Remove unnecessary INSTALL_INTERFACE expression. Use template for CMake installation. Fix mistake for build interface include dir. Improve CMake changes. Update CMake package generation. Implement ALLOW_CASE_INSENSIBILITY mode for StringToDoubleConverter class Add assert and test. Avoid negative shift. When filling in fractional digits in a fixed representation we might use all existing digits. When this happens, we can not look at the next digit to see if we should round up. Before this fix, we tried to shift by a negative amount to see if the (non-existing) next bit was set to 1 (requiring the number to be rounded up).
Replaces individual synchronization mechanisms across modules for each global
variables used in ITK by a central mechanism in which all these variables
are registered and which gives a single entry point to synchronize
all global variables.
Global variables are registered in a map, with a key that is their name and
a value that is a pair of their pointer and a pointer to a synchronization
function. The synchronization function will be called to synchronize
these global variables across the different modules. Different global
variables may have different synchronization functions: Some variables
will just override the previous value in all modules whereas some
others will need to actually synchronize their values.
Change-Id: Ib6ebc9b3f9acd93ce8319f00579f6bf4982ca6b8