/thirdparty/breakpad/third_party/protobuf/protobuf/python/google/protobuf/internal/message_listener.py

http://github.com/tomahawk-player/tomahawk · Python · 78 lines · 25 code · 8 blank · 45 comment · 3 complexity · e390820c1fa93b817eafc22327b68e4b MD5 · raw file

  1. # Protocol Buffers - Google's data interchange format
  2. # Copyright 2008 Google Inc. All rights reserved.
  3. # http://code.google.com/p/protobuf/
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions are
  7. # met:
  8. #
  9. # * Redistributions of source code must retain the above copyright
  10. # notice, this list of conditions and the following disclaimer.
  11. # * Redistributions in binary form must reproduce the above
  12. # copyright notice, this list of conditions and the following disclaimer
  13. # in the documentation and/or other materials provided with the
  14. # distribution.
  15. # * Neither the name of Google Inc. nor the names of its
  16. # contributors may be used to endorse or promote products derived from
  17. # this software without specific prior written permission.
  18. #
  19. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  22. # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  23. # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  24. # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  25. # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  26. # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  27. # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  28. # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  29. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30. """Defines a listener interface for observing certain
  31. state transitions on Message objects.
  32. Also defines a null implementation of this interface.
  33. """
  34. __author__ = 'robinson@google.com (Will Robinson)'
  35. class MessageListener(object):
  36. """Listens for modifications made to a message. Meant to be registered via
  37. Message._SetListener().
  38. Attributes:
  39. dirty: If True, then calling Modified() would be a no-op. This can be
  40. used to avoid these calls entirely in the common case.
  41. """
  42. def Modified(self):
  43. """Called every time the message is modified in such a way that the parent
  44. message may need to be updated. This currently means either:
  45. (a) The message was modified for the first time, so the parent message
  46. should henceforth mark the message as present.
  47. (b) The message's cached byte size became dirty -- i.e. the message was
  48. modified for the first time after a previous call to ByteSize().
  49. Therefore the parent should also mark its byte size as dirty.
  50. Note that (a) implies (b), since new objects start out with a client cached
  51. size (zero). However, we document (a) explicitly because it is important.
  52. Modified() will *only* be called in response to one of these two events --
  53. not every time the sub-message is modified.
  54. Note that if the listener's |dirty| attribute is true, then calling
  55. Modified at the moment would be a no-op, so it can be skipped. Performance-
  56. sensitive callers should check this attribute directly before calling since
  57. it will be true most of the time.
  58. """
  59. raise NotImplementedError
  60. class NullMessageListener(object):
  61. """No-op MessageListener implementation."""
  62. def Modified(self):
  63. pass