Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : AppUtil.hpp
3 : : //
4 : : // Purpose : This file represents the Cubit application itself.
5 : : //
6 : : // Special Notes :
7 : : //
8 : : // Creator : Darryl Melander
9 : : //
10 : : // Date : 06/08/98
11 : : //
12 : : // Owner : Darryl Melander
13 : : //-------------------------------------------------------------------------
14 : :
15 : : #ifndef APP_UTIL_HPP
16 : : #define APP_UTIL_HPP
17 : :
18 : : #include "CubitDefines.h"
19 : : #include "CubitString.hpp"
20 : : #include "CGMUtilConfigure.h"
21 : : #include "CubitEventDispatcher.hpp"
22 : : #ifdef BUILD_WITH_CONCURRENT_SUPPORT
23 : : #include "CubitConcurrentApi.h"
24 : : #endif
25 : : #include <time.h>
26 : :
27 : : #ifndef _WIN32
28 : : #include <sys/resource.h>
29 : : #endif
30 : :
31 : : class ProgressTool;
32 : : class CubitString;
33 : : class CubitThreadPool;
34 : :
35 : : class CUBIT_UTIL_EXPORT AppUtil
36 : : {
37 : : public:
38 : : static AppUtil* instance_no_create();
39 : :
40 : : static AppUtil* instance();
41 : : //- Access to the application object
42 : :
43 : : static void delete_instance();
44 : :
45 : : void report_resource_usage() const;
46 : : //- Prints out information about the session
47 : :
48 : : bool get_terminal_size( int& rows, int& cols );
49 : : //- Get the size of the terminal, if known.
50 : :
51 : : #ifdef CAT
52 : : int days_to_expire(int year, int month, int day) const;
53 : : //- Returns number of days until the app expires
54 : : #endif
55 : : ~AppUtil();
56 : :
57 : :
58 : : // Signal handing code. The signal handler provided by
59 : : // AppUtil sets the flag cubit_intr to CUBIT_TRUE when
60 : : // an interrupt (SIGINT) is detected. See the comments
61 : : // with the declaration of cubit_intr in AppUtil.cpp
62 : : // for more information.
63 : :
64 : : // returns whether the interupt flag has been set
65 : : CubitBoolean interrupt();
66 : : void set_interrupt(CubitBoolean);
67 : :
68 : : // clears the interrupt flag
69 : : void clear_interrupt();
70 : :
71 : : static CubitBoolean catch_interrupt() { return catching_sigint_; }
72 : : //- Check if the signal handler provided in AppUtil
73 : : //- is being used.
74 : :
75 : : static void catch_interrupt( CubitBoolean yesno );
76 : : //- yesno:
77 : : //- CUBIT_TRUE: Set signal handler for SIGINT to the
78 : : //- handler provided by AppUtil.
79 : : //- CUBIT_FALSE: Set the signal hander for SIGINT to
80 : : //- the system default.
81 : :
82 : : void startup();
83 : : //- Contains startup code for cubit
84 : :
85 : : int shutdown();
86 : : //- Contains shutdown code for cubit
87 : :
88 : : void apputil_getrusage(struct rusage &r_usage) const;
89 : : //- fill the r_usage with data from getrusage; implements special code to
90 : : //- find memory usage when you don't get that from the system call getrusage
91 : :
92 : : void set_terminal_size( int rows, int cols );
93 : : //- This function sets the values returned from
94 : : //- get_terminal_size(). It has no effect on
95 : : //- the actual terminal size.
96 : :
97 : : ProgressTool *progress_tool();
98 : : void progress_tool(ProgressTool* pTool);
99 : : // pass in a pointer to a progress tool - the lifetime of the tool will be
100 : : // controlled by AppUtil
101 : :
102 : : //! Get the location of the shared library or executable
103 : : //! Returns the location of the cubit_util shared library if it is a shared library
104 : : //! or if a static library compiled into an executable, gives the location of the
105 : : //! executable.
106 : : CubitString get_app_dir();
107 : : // get the cubit dir variable
108 : :
109 : : static void initialize_settings();
110 : : // initialize settings
111 : :
112 : 8044 : CubitEventDispatcher& event_dispatcher() { return mEventDispatcher; }
113 : :
114 : : //! send an event
115 : : template <class T>
116 : 241275 : void send_event(const T& event)
117 : : {
118 [ + + ][ + - ]: 241275 : CubitObservable* obs = dynamic_cast<CubitObservable*>(event.get_entity());
[ # # ][ # # ]
[ - ]
119 : 241275 : this->send_event(obs, event);
120 : 241275 : }
121 : :
122 : : bool concurrent_enabled()
123 : : {
124 : : return concurrentSupport;
125 : : }
126 : :
127 : : CubitThreadPool* thread_pool();
128 : :
129 : : private:
130 : :
131 : : void send_event(CubitObservable* obs, const CubitEvent& event);
132 : :
133 : : static CubitBoolean catching_sigint_;
134 : : //- Signal handler registered for SIGINT?
135 : :
136 : : int term_width, term_height;
137 : :
138 : : static AppUtil* instance_;
139 : : CubitBoolean mAppStarted;
140 : :
141 : : CubitString cubitDir;
142 : : //- directory of the cubit executable
143 : :
144 : : ProgressTool *mProgressTool;
145 : :
146 : : CubitEventDispatcher mEventDispatcher;
147 : :
148 : : clock_t mInterruptThrottle;
149 : :
150 : : CubitBoolean concurrentSupport;
151 : : #ifdef BUILD_WITH_CONCURRENT_SUPPORT
152 : : CubitConcurrent *mConcurrentInstance;
153 : : #endif
154 : :
155 : : CubitThreadPool* mThreadPool;
156 : :
157 : : AppUtil();
158 : : };
159 : :
160 : : // returns the directory where cubit binaries reside,
161 : : // or more correctly, the path of the library/executable that contains this AppUtil code.
162 : : inline CubitString AppUtil::get_app_dir()
163 : : {
164 : : return cubitDir;
165 : : }
166 : :
167 : : #endif
168 : :
|