coherence/lang/interface_spec.hpp

00001 /*
00002 * interface_spec.hpp
00003 *
00004 * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
00005 *
00006 * Oracle is a registered trademarks of Oracle Corporation and/or its
00007 * affiliates.
00008 *
00009 * This software is the confidential and proprietary information of Oracle
00010 * Corporation. You shall not disclose such confidential and proprietary
00011 * information and shall use it only in accordance with the terms of the
00012 * license agreement you entered into with Oracle.
00013 *
00014 * This notice may not be removed or altered.
00015 */
00016 #ifndef COH_INTERFACE_SPEC_HPP
00017 #define COH_INTERFACE_SPEC_HPP
00018 
00019 #include "coherence/lang/compatibility.hpp"
00020 
00021 #include "coherence/lang/lang_spec.hpp"
00022 #include "coherence/lang/Object.hpp"
00023 #include "coherence/lang/TypedHandle.hpp"
00024 #include "coherence/lang/TypedHolder.hpp"
00025 
00026 COH_OPEN_NAMESPACE2(coherence,lang)
00027 
00028 /**
00029 * Helper for defining a managed interface.
00030 *
00031 * Managed interfaces virtually derive from coherence::lang::Object, and
00032 * include a set of well known features, which are auto-generated by this
00033 * helper class:
00034 *
00035 * - Handle/View/Holder definitions
00036 * - virtual interface inheritance of up to 16 interfaces
00037 *
00038 * The template takes two parameters:
00039 *
00040 * - The name of the interface being defined
00041 * - An optional list of interfaces to extend, indicated as
00042 *   implements<i1, i2, ...>
00043 *
00044 * A normal interface definition would be:
00045 * @code
00046 * class MyInterface
00047 *   : public interface_spec<MyInterface,
00048 *       implements<SomeInterface, SomeOtherInterface> >
00049 *   {
00050 *   public:
00051 *       // pure virtual method definitions....
00052 *   };
00053 * @endcode
00054 *
00055 * @see implements
00056 *
00057 * @author mf 2008.07.14
00058 */
00059 template<class T, class I = implements<> >
00060 class interface_spec
00061     : public virtual Object, public virtual I::implements_chain
00062     {
00063     public:
00064         /**
00065         * Specification definition
00066         */
00067         typedef interface_spec this_spec;
00068 
00069         /**
00070         * Standard Handle definition
00071         */
00072         typedef TypedHandle<T> Handle;
00073 
00074         /**
00075         * Standard View definition
00076         */
00077         typedef TypedHandle<const T> View;
00078 
00079         /**
00080         * Standard Holder definition
00081         */
00082         typedef TypedHolder<T> Holder;
00083 
00084     private:
00085         /**
00086         * Blocked Object::create()
00087         *
00088         * @internal
00089         */
00090         static void create()
00091             {
00092             }
00093     };
00094 
00095 COH_CLOSE_NAMESPACE2
00096 
00097 #endif // COH_INTERFACE_SPEC_HPP
Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.