Verified Commit 8530abb1 authored by Malachy's avatar Malachy

Various fixes and tweaks.

parent 6fdfff6a
################################################################################################################################################################
# CMakeLists.txt
# Robert M. Baker | Created : 08MAR16 | Last Modified : 02FEB18 by Robert M. Baker
# Robert M. Baker | Created : 08MAR16 | Last Modified : 03FEB18 by Robert M. Baker
# Version : 1.0.0
# This is a CMake script for building 'QMXSAF'.
################################################################################################################################################################
......@@ -26,7 +26,7 @@
# General
cmake_minimum_required( VERSION 3.10 )
cmake_minimum_required( VERSION 3.0 )
if( NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}/build" )
message( FATAL_ERROR "You must build the project from '${CMAKE_SOURCE_DIR}/build'! See 'README.md' for build instructions." )
......@@ -34,8 +34,8 @@ endif()
project( PROJECT VERSION 1.0.0 LANGUAGES C CXX )
find_package( Boost 1.66 REQUIRED COMPONENTS chrono filesystem locale system thread timer )
find_package( GTest 1.8 )
find_package( Boost 1.50 REQUIRED COMPONENTS chrono filesystem locale system thread timer )
find_package( GTest 1.6 )
find_package( QMXStdLib 2.0 REQUIRED )
find_package( Doxygen )
......
......@@ -11,35 +11,37 @@
## Dependencies
> ### Linux and Mac OS X
> ### GNU Linux and Apple macOS
>
>> #### Compiler
>> * Clang >= 3.7 or GCC >= 5.3
>> * Clang >= 3.0 or GCC >= 4.6
>>
>> #### Documentation
>> * Doxygen >= 1.8
>> * Doxygen >= 1.6
>>
>> #### Libraries
>> * GTest >= 1.7 (optional)
>> * Boost >= 1.50
>> * GTest >= 1.6 (optional)
>> * QMXStdLib >= 2.0
>>
>> #### Tools
>> * CMake >= 3.5
>> * CMake >= 3.0
>
> ### Windows
> ### Microsoft Windows
>
>> #### Compiler
>> * TDM-GCC >= 5.1
>> * MSYS2 + Clang >= 3.0 or MSYS2 + MinGW >= 4.6
>>
>> #### Documentation
>> * Doxygen >= 1.8
>> * Doxygen >= 1.6
>>
>> #### Libraries
>> * GTest >= 1.7 (optional)
>> * Boost >= 1.50
>> * GTest >= 1.6 (optional)
>> * QMXStdLib >= 2.0
>>
>> #### Tools
>> * CMake >= 3.5
>> * CMake >= 3.0
## Building
......@@ -91,20 +93,23 @@
## Event Messages
> | Event Index | Event Message |
> |-------------|-------------------------------------------------------------------------------------------|
> | 00000000 | The specified module could not be registered because it already exists! |
> | 00000000 | The specified module could not be unregistered because it did not exist! |
> | 00000000 | No plugins could be loaded because the specified path was not a directory! |
> | 00000000 | No plugins were found at the specified path! |
> | 00000000 | The specified plugin was already loaded! |
> | 00000000 | The specified plugin did not have a 'PluginGetModule' function! |
> | 00000000 | The specified plugin did not have a 'PluginStart' function! |
> | 00000000 | The specified plugin did not have a 'PluginStop' function! |
> | 00000000 | The specified plugin could not be loaded because its module was not registered! |
> | 00000000 | The specified plugin could not be unloaded because its module did not exist! |
> | 00000000 | The specified plugin could not be unloaded because it was not loaded! |
> | 00000000 | A plugin list could not be constructed because the specified module did not exist! |
> | 00000000 | The specified plugin's meta data could not be retrieved because its module did not exist! |
> | 00000000 | The specified plugin's meta data could not be retrieved because it did not exist! |
> | 00000000 | Attempted to initialize plugin manager, but it was already initialized! |
> | Event Index | Event Message |
> |-------------|------------------------------------------------------------------------------------|
> | 00000000 | The specified value already exists! |
> | 00000001 | The specified value did not exist! |
> | 00000002 | An error occurred retrieving the value as the specified type! |
> | 00000003 | The specified plugin group already exists! |
> | 00000004 | The specified plugin group did not exist! |
> | 00000005 | The specified plugin group was not empty and 'DoUnloadPlugins' was set to 'false'! |
> | 00000006 | The specified plugin was already loaded! |
> | 00000007 | The specified plugin did not have a 'GetFrameworkVersion' function! |
> | 00000008 | The specified plugin did not have a 'RegisterPlugin' function! |
> | 00000009 | The specified plugin did not have an 'UnregisterPlugin' function! |
> | 0000000A | The specified plugin is not compatible with the current framework! |
> | 0000000B | The specified path was not a directory! |
> | 0000000C | No plugins were found at the specified path! |
> | 0000000D | The specified plugin was not loaded! |
> | 0000000E | The specified facility was a reserved ID! |
> | 0000000F | The specified facility was already registered! |
> | 00000010 | The specified facility was currently active! |
> | 00000011 | The specified facility was not registered! |
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GlobalManager.hpp
// Robert M. Baker | Created : 08MAR16 | Last Modified : 23JAN18 by Robert M. Baker
// Robert M. Baker | Created : 08MAR16 | Last Modified : 03FEB18 by Robert M. Baker
// Version : 1.0.0
// This is a header file for 'QMXSAF'; it defines the interface for a global manager class.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2011-2016 QuantuMatriX Software, a QuantuMatriX Technologies Cooperative Partnership
// Copyright (C) 2011-2018 QuantuMatriX Software, a QuantuMatriX Technologies Cooperative Partnership
//
// This file is part of 'QMXSAF'.
//
......@@ -21,7 +21,7 @@
* @file
* @author Robert M. Baker
* @date Created : 08MAR16
* @date Last Modified : 23JAN18 by Robert M. Baker
* @date Last Modified : 03FEB18 by Robert M. Baker
* @version 1.0.0
*
* @brief This is a header file for 'QMXSAF'; it defines the interface for a global manager class.
......@@ -155,7 +155,7 @@ public:
// Get specified value, if it exists.
QMX_ASSERT( ( Result != Values.end() ), "QMXSAF", "GlobalManager::GetValue", "00000000", ValueID );
QMX_ASSERT( ( Result != Values.end() ), "QMXSAF", "GlobalManager::GetValue", "00000001", ValueID );
try
{
......@@ -163,7 +163,7 @@ public:
}
catch( const BadAnyCast& Source )
{
QMX_THROW( "QMXSAF", "GlobalManager::GetValue", "00000000", ValueID );
QMX_THROW( "QMXSAF", "GlobalManager::GetValue", "00000002", ValueID );
}
// Return result to calling routine.
......
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Kernel.hpp
// Robert M. Baker | Created : 08MAR16 | Last Modified : 30JAN18 by Robert M. Baker
// Robert M. Baker | Created : 08MAR16 | Last Modified : 12MAR18 by Robert M. Baker
// Version : 1.0.0
// This is a header file for 'QMXSAF'; it defines the interface for an application kernel class.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -21,7 +21,7 @@
* @file
* @author Robert M. Baker
* @date Created : 08MAR16
* @date Last Modified : 30JAN18 by Robert M. Baker
* @date Last Modified : 12MAR18 by Robert M. Baker
* @version 1.0.0
*
* @brief This is a header file for 'QMXSAF'; it defines the interface for an application kernel class.
......@@ -79,6 +79,33 @@
namespace QMXSAF
{
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// The 'KernelProperties' Structure
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* @brief This structure holds the public properties for the 'Kernel' class.
*/
struct KernelProperties
{
public:
// Public Fields
/**
* @brief This is the quantity of arguments passed to the application.
*/
int ArgumentCount;
/**
* @brief These are the argument values passed to the application.
*/
char** ArgumentValues;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// The 'Kernel' Class
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -95,11 +122,11 @@ namespace QMXSAF
* Thread-Safe : Yes
*/
class Kernel : public QMXStdLib::Object< Kernel >, public QMXStdLib::Singleton< Kernel >, public Server
class Kernel : public QMXStdLib::Object< Kernel, KernelProperties >, public QMXStdLib::Singleton< Kernel >, public Server
{
// Friend Classes
friend class QMXStdLib::Object< Kernel >;
friend class QMXStdLib::Object< Kernel, KernelProperties >;
public:
......
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Server.hpp
// Robert M. Baker | Created : 08MAR16 | Last Modified : 26JAN18 by Robert M. Baker
// Robert M. Baker | Created : 08MAR16 | Last Modified : 03FEB18 by Robert M. Baker
// Version : 1.0.0
// This is a header file for 'QMXSAF'; it defines the interface for a mixin class to a message queue.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -21,7 +21,7 @@
* @file
* @author Robert M. Baker
* @date Created : 08MAR16
* @date Last Modified : 26JAN18 by Robert M. Baker
* @date Last Modified : 03FEB18 by Robert M. Baker
* @version 1.0.0
*
* @brief This is a header file for 'QMXSAF'; it defines the interface for a mixin class to a message queue.
......@@ -190,11 +190,11 @@ public:
if( FacilityID == "NONE" )
IsReserved = true;
QMX_ASSERT( !IsReserved, "QMXSAF", "Server::RegisterFacility", "00000000", FacilityID );
QMX_ASSERT( !IsReserved, "QMXSAF", "Server::RegisterFacility", "0000000E", FacilityID );
QMX_ASSERT( Facilities.insert( ServerFacility::Factory::PointerMap::value_type( FacilityID, FactoryInstance ) ).second,
"QMXSAF",
"Server::RegisterFacility",
"00000000",
"0000000F",
FacilityID );
}
......@@ -224,9 +224,9 @@ public:
// Unregister specified facility, if it has been registered.
if( ActiveFacility )
QMX_ASSERT( ( FacilityID != ActiveFacility->GetID() ), "QMXSAF", "Server::UnregisterFacility", "00000000", FacilityID );
QMX_ASSERT( ( FacilityID != ActiveFacility->GetID() ), "QMXSAF", "Server::UnregisterFacility", "00000010", FacilityID );
QMX_ASSERT( Facilities.erase( FacilityID ), "QMXSAF", "Server::UnregisterFacility", "00000000", FacilityID );
QMX_ASSERT( Facilities.erase( FacilityID ), "QMXSAF", "Server::UnregisterFacility", "00000011", FacilityID );
}
/**
......@@ -415,7 +415,7 @@ protected:
if( FacilityID != "NONE" )
{
FacilityMapIterator = Facilities.find( FacilityID );
QMX_ASSERT( ( FacilityMapIterator != Facilities.end() ), "QMXSAF", "Server::SetActiveFacilityImp", "00000000", FacilityID );
QMX_ASSERT( ( FacilityMapIterator != Facilities.end() ), "QMXSAF", "Server::SetActiveFacilityImp", "00000011", FacilityID );
ActiveFacility = FacilityMapIterator->second->Create();
}
else
......
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GlobalManager.cpp
// Robert M. Baker | Created : 08MAR16 | Last Modified : 23JAN18 by Robert M. Baker
// Robert M. Baker | Created : 08MAR16 | Last Modified : 03FEB18 by Robert M. Baker
// Version : 1.0.0
// This is a source file for 'QMXSAF'; it defines the implementation for a global manager class.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -21,7 +21,7 @@
* @file
* @author Robert M. Baker
* @date Created : 08MAR16
* @date Last Modified : 23JAN18 by Robert M. Baker
* @date Last Modified : 03FEB18 by Robert M. Baker
* @version 1.0.0
*
* @brief This is a source file for 'QMXSAF'; it defines the implementation for a global manager class.
......@@ -109,7 +109,7 @@ void GlobalManager::RemoveValue( const string& ValueID )
// Remove specified value, if it exists.
QMX_ASSERT( Values.erase( ValueID ), "QMXSAF", "GlobalManager::RemoveValue", "00000000", ValueID );
QMX_ASSERT( Values.erase( ValueID ), "QMXSAF", "GlobalManager::RemoveValue", "00000001", ValueID );
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Kernel.cpp
// Robert M. Baker | Created : 08MAR16 | Last Modified : 30JAN18 by Robert M. Baker
// Robert M. Baker | Created : 08MAR16 | Last Modified : 12MAR18 by Robert M. Baker
// Version : 1.0.0
// This is a source file for 'QMXSAF'; it defines the implementation for an application kernel class.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -21,7 +21,7 @@
* @file
* @author Robert M. Baker
* @date Created : 08MAR16
* @date Last Modified : 30JAN18 by Robert M. Baker
* @date Last Modified : 12MAR18 by Robert M. Baker
* @version 1.0.0
*
* @brief This is a source file for 'QMXSAF'; it defines the implementation for an application kernel class.
......@@ -159,10 +159,9 @@ void Kernel::DeallocateImp()
void Kernel::ThreadMainImp()
{
// Setup stack tracer for this thread.
// Create scoped stack traces.
StackTracer::SetThreadID( "Main" );
StackTracer::AddThread( "main->Server::ThreadMain->Kernel::ThreadMainImp" );
SCOPED_STACK_TRACE( "Server::ThreadMain->Kernel::ThreadMainImp", 0000 );
// Create local variables.
......
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PluginManager.cpp
// Robert M. Baker | Created : 08MAR16 | Last Modified : 23JAN18 by Robert M. Baker
// Robert M. Baker | Created : 08MAR16 | Last Modified : 03FEB18 by Robert M. Baker
// Version : 1.0.0
// This is a source file for 'QMXSAF'; it defines the implementation for a plugin manager class.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -21,7 +21,7 @@
* @file
* @author Robert M. Baker
* @date Created : 08MAR16
* @date Last Modified : 23JAN18 by Robert M. Baker
* @date Last Modified : 03FEB18 by Robert M. Baker
* @version 1.0.0
*
* @brief This source file defines the implementation for a plugin manager class.
......@@ -101,7 +101,7 @@ void PluginManager::CreateGroup( const string& GroupID )
QMX_ASSERT( Groups.insert( GroupMap::value_type( GroupID, PluginHandleVector() ) ).second,
"QMXSAF",
"PluginManager::CreateGroup",
"00000000",
"00000003",
GroupID );
}
......@@ -125,7 +125,7 @@ void PluginManager::DestroyGroup( const string& GroupID, const bool DoUnloadPlug
QMX_ASSERT( ( GroupMapIterator != Groups.end() ),
"QMXSAF",
"PluginManager::DestroyGroup",
"00000000",
"00000004",
GroupID << ", " << boolalpha << DoUnloadPlugins );
if( DoUnloadPlugins )
......@@ -137,7 +137,7 @@ void PluginManager::DestroyGroup( const string& GroupID, const bool DoUnloadPlug
QMX_ASSERT( GroupMapIterator->second.empty(),
"QMXSAF",
"PluginManager::DestroyGroup",
"00000000",
"00000005",
GroupID << ", " << boolalpha << DoUnloadPlugins );
Groups.erase( GroupMapIterator );
......@@ -171,13 +171,13 @@ void PluginManager::Load( const string& GroupID, const Path& Source )
// Load specified plugin for specified group, if both group and plugin are valid.
QMX_ASSERT( ( GroupMapIterator != Groups.end() ), "QMXSAF", "PluginManager::Load", "00000000", GroupID << ", " << Source );
QMX_ASSERT( ( GroupMapIterator != Groups.end() ), "QMXSAF", "PluginManager::Load", "00000004", GroupID << ", " << Source );
for( const auto& Index : GroupMapIterator->second )
QMX_ASSERT( !boost::filesystem::equivalent( Index.DynLibInstance->GetPath(), Source ),
"QMXSAF",
"PluginManager::Load",
"00000000",
"00000006",
GroupID << ", " << Source );
LoadImp( GroupMapIterator->second, Source );
......@@ -202,8 +202,8 @@ void PluginManager::LoadAll( const string& GroupID, const Path& Source )
// Load all plugins at specified path for specified group, if both group and path are valid.
QMX_ASSERT( ( GroupMapIterator != Groups.end() ), "QMXSAF", "PluginManager::LoadAll", "00000000", GroupID << ", " << Source );
QMX_ASSERT( boost::filesystem::is_directory( Source ), "QMXSAF", "PluginManager::LoadAll", "00000000", GroupID << ", " << Source );
QMX_ASSERT( ( GroupMapIterator != Groups.end() ), "QMXSAF", "PluginManager::LoadAll", "00000004", GroupID << ", " << Source );
QMX_ASSERT( boost::filesystem::is_directory( Source ), "QMXSAF", "PluginManager::LoadAll", "0000000B", GroupID << ", " << Source );
for( DirectoryIterator Index( Source ); Index != DIRECTORY_END; Index++ )
{
......@@ -222,14 +222,14 @@ void PluginManager::LoadAll( const string& GroupID, const Path& Source )
QMX_ASSERT( !boost::filesystem::equivalent( Index.DynLibInstance->GetPath(), IndexTarget ),
"QMXSAF",
"PluginManager::LoadAll",
"00000000",
"00000006",
GroupID << ", " << IndexTarget );
LoadImp( GroupMapIterator->second, IndexTarget );
}
}
QMX_ASSERT( FoundPlugins, "QMXSAF", "PluginManager::LoadAll", "00000000", GroupID << ", " << Source );
QMX_ASSERT( FoundPlugins, "QMXSAF", "PluginManager::LoadAll", "0000000C", GroupID << ", " << Source );
}
void PluginManager::Unload( const string& GroupID, const Path& Source )
......@@ -250,7 +250,7 @@ void PluginManager::Unload( const string& GroupID, const Path& Source )
// Unload specified plugin for specified group, if both group and plugin are valid.
QMX_ASSERT( ( GroupMapIterator != Groups.end() ), "QMXSAF", "PluginManager::Unload", "00000000", GroupID << ", " << Source );
QMX_ASSERT( ( GroupMapIterator != Groups.end() ), "QMXSAF", "PluginManager::Unload", "00000004", GroupID << ", " << Source );
Index = GroupMapIterator->second.begin();
while( !IsDone && ( Index != GroupMapIterator->second.end() ) )
......@@ -261,7 +261,7 @@ void PluginManager::Unload( const string& GroupID, const Path& Source )
Index++;
}
QMX_ASSERT( IsDone, "QMXSAF", "PluginManager::Unload", "00000000", GroupID << ", " << Source );
QMX_ASSERT( IsDone, "QMXSAF", "PluginManager::Unload", "0000000D", GroupID << ", " << Source );
UnloadImp( *Index );
GroupMapIterator->second.erase( Index );
}
......@@ -282,7 +282,7 @@ void PluginManager::GetPaths( PathVector& Target, const string& GroupID ) const
// Retrieve all currently loaded plugin paths for specified group, if it exists.
QMX_ASSERT( ( GroupMapIterator != Groups.end() ), "QMXSAF", "PluginManager::GetPaths", "00000000", GroupID );
QMX_ASSERT( ( GroupMapIterator != Groups.end() ), "QMXSAF", "PluginManager::GetPaths", "00000004", GroupID );
for( const auto& Index : GroupMapIterator->second )
Target.push_back( Index.DynLibInstance->GetPath() );
......@@ -336,15 +336,15 @@ void PluginManager::LoadImp( PluginHandleVector& Handles, const Path& Source )
Handle.DynLibInstance = DynamicLibrary::Create();
Handle.DynLibInstance->Load( Source );
Handle.GetFrameworkVersionPtr = reinterpret_cast< PluginHandle::GetFrameworkVersionFunc* >( Handle.DynLibInstance->GetSymbol( "GetFrameworkVersion" ) );
QMX_ASSERT( Handle.GetFrameworkVersionPtr, "QMXSAF", "PluginManager::LoadImp", "00000000", Source );
QMX_ASSERT( Handle.GetFrameworkVersionPtr, "QMXSAF", "PluginManager::LoadImp", "00000007", Source );
Handle.RegisterPluginPtr = reinterpret_cast< PluginHandle::RegisterPluginFunc* >( Handle.DynLibInstance->GetSymbol( "RegisterPlugin" ) );
QMX_ASSERT( Handle.RegisterPluginPtr, "QMXSAF", "PluginManager::LoadImp", "00000000", Source );
QMX_ASSERT( Handle.RegisterPluginPtr, "QMXSAF", "PluginManager::LoadImp", "00000008", Source );
Handle.UnregisterPluginPtr = reinterpret_cast< PluginHandle::UnregisterPluginFunc* >( Handle.DynLibInstance->GetSymbol( "UnregisterPlugin" ) );
QMX_ASSERT( Handle.RegisterPluginPtr, "QMXSAF", "PluginManager::LoadImp", "00000000", Source );
QMX_ASSERT( Handle.RegisterPluginPtr, "QMXSAF", "PluginManager::LoadImp", "00000009", Source );
QMX_ASSERT( ( Handle.GetFrameworkVersionPtr() == QMXSAF::Utility::GetVersionNumber().Major ),
"QMXSAF",
"PluginManager::LoadImp",
"00000000",
"0000000A",
Source );
Handle.RegisterPluginPtr();
Handles.push_back( Handle );
......
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// KernelFacilty1.cpp
// Robert M. Baker | Created : 22MAR16 | Last Modified : 30JAN18 by Robert M. Baker
// Robert M. Baker | Created : 22MAR16 | Last Modified : 12MAR18 by Robert M. Baker
// Version : 1.0.0
// This is a source file for 'QMXSAFTest'; it defines the implementation for a test kernel facility.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -28,7 +28,7 @@ using namespace QMXStdLib;
using namespace QMXSAF;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Public Methods for the 'KernelFacility' Class
// Public Methods for the 'KernelFacility1' Class
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
KernelFacility1::~KernelFacility1()
......
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// KernelFacilty2.cpp
// Robert M. Baker | Created : 22MAR16 | Last Modified : 01FEB18 by Robert M. Baker
// Robert M. Baker | Created : 22MAR16 | Last Modified : 12MAR18 by Robert M. Baker
// Version : 1.0.0
// This is a source file for 'QMXSAFTest'; it defines the implementation for a test kernel facility.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -28,7 +28,7 @@ using namespace QMXStdLib;
using namespace QMXSAF;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Public Methods for the 'KernelFacility' Class
// Public Methods for the 'KernelFacility2' Class
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
KernelFacility2::~KernelFacility2()
......
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// KernelFacilty3.cpp
// Robert M. Baker | Created : 02FEB18 | Last Modified : 02FEB18 by Robert M. Baker
// Robert M. Baker | Created : 02FEB18 | Last Modified : 12MAR18 by Robert M. Baker
// Version : 1.0.0
// This is a source file for 'QMXSAFTest'; it defines the implementation for a test kernel facility.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -28,7 +28,7 @@ using namespace QMXStdLib;
using namespace QMXSAF;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Public Methods for the 'KernelFacility' Class
// Public Methods for the 'KernelFacility3' Class
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
KernelFacility3::~KernelFacility3()
......
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// KernelFacilty4.cpp
// Robert M. Baker | Created : 02FEB18 | Last Modified : 02FEB18 by Robert M. Baker
// Robert M. Baker | Created : 02FEB18 | Last Modified : 12MAR18 by Robert M. Baker
// Version : 1.0.0
// This is a source file for 'QMXSAFTest'; it defines the implementation for a test kernel facility.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -28,7 +28,7 @@ using namespace QMXStdLib;
using namespace QMXSAF;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Public Methods for the 'KernelFacility' Class
// Public Methods for the 'KernelFacility4' Class
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
KernelFacility4::~KernelFacility4()
......
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// KernelFacilty5.cpp
// Robert M. Baker | Created : 02FEB18 | Last Modified : 02FEB18 by Robert M. Baker
// Robert M. Baker | Created : 02FEB18 | Last Modified : 12MAR18 by Robert M. Baker
// Version : 1.0.0
// This is a source file for 'QMXSAFTest'; it defines the implementation for a test kernel facility.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
......@@ -28,7 +28,7 @@ using namespace QMXStdLib;
using namespace QMXSAF;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Public Methods for the 'KernelFacility' Class
// Public Methods for the 'KernelFacility5' Class
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
KernelFacility5::~KernelFacility5()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment