FPEnvironment_WIN32.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //
  2. // FPEnvironment_WIN32.cpp
  3. //
  4. // $Id: //poco/1.4/Foundation/src/FPEnvironment_WIN32.cpp#1 $
  5. //
  6. // Library: Foundation
  7. // Package: Core
  8. // Module: FPEnvironment
  9. //
  10. // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
  11. // and Contributors.
  12. //
  13. // SPDX-License-Identifier: BSL-1.0
  14. //
  15. #include "Poco/FPEnvironment_WIN32.h"
  16. namespace Poco {
  17. FPEnvironmentImpl::FPEnvironmentImpl()
  18. {
  19. _env = _controlfp(0, 0);
  20. }
  21. FPEnvironmentImpl::FPEnvironmentImpl(const FPEnvironmentImpl& env)
  22. {
  23. _env = env._env;
  24. }
  25. FPEnvironmentImpl::~FPEnvironmentImpl()
  26. {
  27. _controlfp(_env, MCW_RC);
  28. }
  29. FPEnvironmentImpl& FPEnvironmentImpl::operator = (const FPEnvironmentImpl& env)
  30. {
  31. _env = env._env;
  32. return *this;
  33. }
  34. void FPEnvironmentImpl::keepCurrentImpl()
  35. {
  36. _env = _controlfp(0, 0);
  37. }
  38. void FPEnvironmentImpl::clearFlagsImpl()
  39. {
  40. _clearfp();
  41. }
  42. bool FPEnvironmentImpl::isFlagImpl(FlagImpl flag)
  43. {
  44. return (_statusfp() & flag) != 0;
  45. }
  46. void FPEnvironmentImpl::setRoundingModeImpl(RoundingModeImpl mode)
  47. {
  48. _controlfp(mode, MCW_RC);
  49. }
  50. FPEnvironmentImpl::RoundingModeImpl FPEnvironmentImpl::getRoundingModeImpl()
  51. {
  52. return RoundingModeImpl(_controlfp(0, 0) & MCW_RC);
  53. }
  54. } // namespace Poco