00001 00002 // 00003 // Copyright (C) 2006 James M. Lawrence. All rights reserved. 00004 // 00005 // software: esve-1.0.3 00006 // file: esve/kernel/Wake_State_Server.hxx 00007 // 00008 // Redistribution and use in source and binary forms, with or without 00009 // modification, are permitted provided that the following conditions 00010 // are met: 00011 // 00012 // 1. Redistributions of source code must retain the above copyright 00013 // notice, this list of conditions and the following disclaimer. 00014 // 00015 // 2. The origin of this software must not be misrepresented; you must 00016 // not claim that you wrote the original software. If you use this 00017 // software in a product, an acknowledgment in the product 00018 // documentation would be appreciated but is not required. 00019 // 00020 // 3. Altered source versions must be plainly marked as such, and must 00021 // not be misrepresented as being the original software. 00022 // 00023 // 4. The name of the author may not be used to endorse or promote 00024 // products derived from this software without specific prior written 00025 // permission. 00026 // 00027 // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY, 00028 // AND WITH NO CLAIM AS TO ITS SUITABILITY FOR ANY PURPOSE. IN NO EVENT 00029 // SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM WHATSOEVER MADE IN CONNECTION 00030 // TO THIS SOFTWARE. 00031 // 00033 00034 #ifndef esve_kernel_Wake_State_Server_hxx 00035 #define esve_kernel_Wake_State_Server_hxx 00036 00037 #include <esve/kernel/impl/Kernel_Node.hxx> 00038 #include <esve/kernel/Wake_State_Handler.hxx> 00039 #include <esve/kernel/Wake_State_Emitter.hxx> 00040 #include <memory> 00041 00042 namespace esve { namespace kernel { 00043 00058 00059 // 00060 // The three derivations result in this internal state: 00061 // 00062 // 00063 // Handler::to_decoders (shared virtual base) 00064 // |\ . 00065 // | \ . 00066 // | +----------+ . 00067 // | \ . 00068 // | \ . 00069 // | | 00070 // | \|/ 00071 // | * 00072 // | Wake_State_Handler's decoder 00073 // | 00074 // \|/ 00075 // * 00076 // Kernel_Node's decoder/encoder pass-through 00077 // | 00078 // | 00079 // | 00080 // | Wake_State_Emitter's encoder 00081 // | / 00082 // | / 00083 // | +----------+ 00084 // | / 00085 // | / 00086 // | | 00087 // \|/ \|/ 00088 // * * 00089 // Emitter::from_encoders (shared virtual base) 00090 // 00091 // 00092 // 00093 00094 class Wake_State_Server 00095 : public impl::Kernel_Node, 00096 public Wake_State_Handler, 00097 public Wake_State_Emitter 00098 { 00099 public: 00100 Wake_State_Server() ; 00101 ~Wake_State_Server() ; 00102 00103 protected: 00104 bool handle_check_awake( bool currently_awake ) ; 00105 bool handle_wake() ; 00106 bool handle_sleep() ; 00107 00108 private: 00109 Wake_State_Server( const Wake_State_Server & ) ; 00110 Wake_State_Server & operator=( const Wake_State_Server & ) ; 00111 00112 class Private ; 00113 const std::auto_ptr<Private> m ; 00114 } ; 00115 00116 }} // namespace esve::kernel 00117 00118 #endif 00119
1.3.4