Adding reference counted version of the module interface.
The reason for this is that we would like to have reference counting on the modules you can register externally with ViE and VoE.
Currently we plan to use this on the ADM, VideoCapture module and VideoRenderModule.
Review URL: http://webrtc-codereview.appspot.com/138010

git-svn-id: http://webrtc.googlecode.com/svn/trunk@517 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/src/modules/interface/module.h b/src/modules/interface/module.h
index f270978..0a74f2a 100644
--- a/src/modules/interface/module.h
+++ b/src/modules/interface/module.h
@@ -1,33 +1,58 @@
-#ifndef MODULE_H
-#define MODULE_H
+/*
+ *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef MODULES_INTERFACE_MODULE_H_
+#define MODULES_INTERFACE_MODULE_H_
 
 #include "typedefs.h"
 
-namespace webrtc
-{
+namespace webrtc {
 
-class Module
-{
-public:
-    // Returns version of the module and its components.
-    virtual int32_t Version(char* version,
-                            uint32_t& remainingBufferInBytes,
-                            uint32_t& position) const = 0;
+class Module {
+ public:
+  // Returns version of the module and its components.
+  virtual int32_t Version(char* version,
+                          uint32_t& remaining_buffer_in_bytes,
+                          uint32_t& position) const = 0;
 
-    // Change the unique identifier of this object.
-    virtual int32_t ChangeUniqueId(const int32_t id) = 0;
+  // Change the unique identifier of this object.
+  virtual int32_t ChangeUniqueId(const int32_t id) = 0;
 
-    // Returns the number of milliseconds until the module want a worker
-    // thread to call Process.
-    virtual int32_t TimeUntilNextProcess() = 0 ;
+  // Returns the number of milliseconds until the module want a worker
+  // thread to call Process.
+  virtual int32_t TimeUntilNextProcess() = 0;
 
-    // Process any pending tasks such as timeouts.
-    virtual int32_t Process() = 0 ;
+  // Process any pending tasks such as timeouts.
+  virtual int32_t Process() = 0;
 
-protected:
-    virtual ~Module() {}
+ protected:
+  virtual ~Module() {}
 };
 
-} // namespace webrtc
+// Reference counted version of the module interface.
+class RefCountedModule : public Module {
+ public:
+  // Increase the reference count by one.
+  // Returns the incremented reference count.
+  virtual int32_t AddRef() = 0;
 
-#endif // MODULE_H
+  // Decrease the reference count by one.
+  // Returns the decreased reference count.
+  // Returns 0 if the last reference was just released.
+  // When the reference count reach 0 the object will self-destruct.
+  virtual int32_t Release() = 0;
+
+ protected:
+  virtual ~RefCountedModule() {}
+};
+
+}  // namespace webrtc
+
+#endif  // MODULES_INTERFACE_MODULE_H_