Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

237 lines
5.9 KiB

/*
*
* NOTES:
*
* REVISIONS:
* sja05Nov92: Call FlushALL method of list object to destroy event attributes
* sja05Nov92: Added new constructor which allows #define'ed values to
* be used as values
* ker19Nov92: Added GetAttributeValue function and made attribute list
* work correctly, changed GetNextAttribute to return a pointer
* rather than a reference.
* pcy02Dec92: include err.h
* jod01Feb93: Changed Do - While to While loops.
* ane08Feb93: Added Copy constructor
* pcy16Jan93: Have set attribute add the attribute if its not there
* cad07Oct93: Plugging Memory Leaks
* cad27Dec93: include file madness
* pcy08Apr94: Trim size, use static iterators, dead code removal
* jps15Jul94: Changed some INTs to LONG (os2 1.x)
*
* v-stebe 29Jul2000 Changed allocation from dyn. to heap (bug #46335)
*/
#define INCL_BASE
#define INCL_DOS
#define INCL_NOPM
#include "cdefine.h"
#include "apc.h"
#include "event.h"
#if (C_OS & C_UNIX)
#include "isa.h"
#endif
#ifdef APCDEBUG
#include <iostream.h>
#endif
extern "C" {
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
}
// Initialize static variable to count events...
INT Event::EventCount = 0;
//-------------------------------------------------------------------
Event::Event(INT aCode, PCHAR aValue)
: theEvent(aCode, aValue)
{
// Check against MAX?
theId = ++EventCount;
// theTime = new TimeStamp();
theExtendedList = new List();
}
//-------------------------------------------------------------------
Event :: Event(INT anEventCode, LONG aValue)
: theEvent(anEventCode, aValue)
{
theId = ++EventCount;
// theTime = new TimeStamp();
theExtendedList = new List();
}
//-------------------------------------------------------------------
Event :: Event (const Event &anEvent)
: theEvent (anEvent.theEvent)
{
// Generate a new Id or copy the one from anEvent?
// theId = ++EventCount;
theId = anEvent.theId;
// Generate a new timestamp or use the one from anEvent?
// theTime = new TimeStamp();
theExtendedList = new List();
// Copy theExtendedList from anEvent
if (anEvent.theExtendedList &&
anEvent.theExtendedList->GetItemsInContainer())
{
PAttribute tempAttr = (PAttribute)anEvent.theExtendedList->GetHead();
ListIterator tempIter(*(anEvent.theExtendedList));
while(tempAttr)
{
PAttribute to_append =
new Attribute(tempAttr->GetCode(),tempAttr->GetValue());
theExtendedList->Append(to_append);
tempAttr = (PAttribute)tempIter.Next();
}
}
}
//-------------------------------------------------------------------
Event::~Event()
{
if (theExtendedList != (PList) NULL) {
theExtendedList->FlushAll();
delete theExtendedList;
theExtendedList = NULL;
}
}
const PCHAR Event::GetAttributeValue(INT aCode)
{
if (theExtendedList && theExtendedList->GetItemsInContainer()) {
PAttribute the_test_attribute= (PAttribute)theExtendedList->GetHead();
ListIterator the_temp_iter(*theExtendedList);
while(the_test_attribute) {
if( (the_test_attribute->GetCode()) == (aCode)) {
return the_test_attribute->GetValue();
}
the_test_attribute=(PAttribute)the_temp_iter.Next();
}
}
return (PCHAR)NULL;
}
INT Event::SetValue(LONG aValue)
{
return theEvent.SetValue(aValue);
}
INT Event::SetValue(const PCHAR aValue)
{
return theEvent.SetValue(aValue);
}
const PCHAR Event::GetValue()
{
return theEvent.GetValue();
}
INT Event::SetAttributeValue(INT aCode, LONG aValue)
{
CHAR the_temp_string[32];
sprintf(the_temp_string, "%ld", aValue);
INT the_return_value=SetAttributeValue(aCode, the_temp_string);
return the_return_value;
}
INT Event::SetAttributeValue(INT aCode, const PCHAR aValue)
{
if(!aValue)
return ErrNO_VALUE;
PAttribute the_test_attribute= (PAttribute)theExtendedList->GetHead();
ListIterator the_temp_iter(*theExtendedList);
while(the_test_attribute)
{
if( (the_test_attribute->GetCode()) == (aCode))
{
return the_test_attribute->SetValue(aValue);
}
the_test_attribute=(PAttribute)the_temp_iter.Next();
}
//
// If the attribute isn't there, add it
//
AppendAttribute(aCode, aValue);
return ErrNO_ERROR;
}
//-------------------------------------------------------------------
void Event::AppendAttribute(INT aCode, PCHAR aValue)
{
if(aValue) {
PAttribute to_append = new Attribute(aCode, aValue);
theExtendedList->Append(to_append);
}
}
void Event::AppendAttribute(INT aCode, FLOAT aValue)
{
CHAR str_value[32];
sprintf(str_value, "%.2f", aValue);
AppendAttribute(aCode, str_value);
}
//-------------------------------------------------------------------
void Event::AppendAttribute(RAttribute anAttribute)
{
theExtendedList->Append((PObj)(&anAttribute));
}
//-------------------------------------------------------------------
INT Event::Equal( RObj anObject ) const
{
if (anObject.IsA() != IsA())
return FALSE;
return theEvent.Equal( *((REvent) anObject).GetEvent());
}
#ifdef APCDEBUG
ostream& Event::printMeOut(ostream& os)
{
os << "Event: " << theEvent << endl;
if (theExtendedList && theExtendedList->GetItemsInContainer()) {
PAttribute the_test_attribute= (PAttribute)theExtendedList->GetHead();
ListIterator the_temp_iter(*theExtendedList);
while(the_test_attribute) {
os << "\t" << *the_test_attribute << endl;
the_test_attribute=(PAttribute)the_temp_iter.Next();
}
}
return os;
}
#endif