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.
 
 
 
 
 
 

276 lines
5.2 KiB

//
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
//
#ifndef SIMC_VALUE
#define SIMC_VALUE
/*
* This file contains classes that model the various kinds of values that
* can occur in a MIB module
*/
/*
* The base class for all the values. Just stores the line and column number
*/
class SIMCValue
{
long _line, _column;
// Used in mostly in the destructors of the derived classes
BOOL _useReferenceCount;
protected:
SIMCValue( long line = 0, long column = 0)
: _line(line), _column(column), _useReferenceCount(FALSE)
{}
public:
virtual ~SIMCValue() {}
friend ostream& operator<< ( ostream& outStream, const SIMCValue& obj)
{
obj.WriteValue(outStream);
return outStream;
}
long GetLine() const
{
return _line;
}
void SetLine( long x)
{
_line = x;
}
long GetColumn() const
{
return _column;
}
void SetColumn( long x)
{
_column = x;
}
void SetUseReferenceCount(BOOL val)
{
_useReferenceCount = val;
}
BOOL UseReferenceCount() const
{
return _useReferenceCount;
}
virtual void WriteValue(ostream& outStream) const
{
outStream << "line(" << _line << "), column(" << _column << ")";
}
};
/*
* Value for the INTEGER type
*/
class SIMCIntegerValue : public SIMCValue
{
long _val;
/* A long value is used to store 32 bit unsigned, as well as signed
* values. Hence this flag is required to indicate whether a minus sign
* was present in front of this number in a MIB file. If this is false,
* then the above long value should be treated as an unsigned value
*/
BOOL _isUnsigned;
public:
SIMCIntegerValue ( long x, BOOL isUnsigned, long line = 0, long column = 0)
: _val(x), _isUnsigned(isUnsigned), SIMCValue(line, column)
{}
long GetIntegerValue() const { return _val; }
void SetIntegerValue(long x) { _val = x; }
BOOL IsUnsigned() const
{
return _isUnsigned;
}
virtual void WriteValue( ostream& outStream) const
{
outStream << "Integer (" << _val << "), ";
SIMCValue::WriteValue(outStream);
outStream << endl;
}
virtual BOOL operator == (const SIMCIntegerValue& rhs) const
{
return _val == rhs._val;
}
};
BOOL IsLessThan(long a, BOOL aUnsigned, long b, BOOL bUnsigned);
/*
* Value for the NULL type
*/
class SIMCNullValue : public SIMCValue
{
public:
SIMCNullValue ( long line = 0, long column = 0)
: SIMCValue(line, column)
{}
virtual void WriteValue( ostream& outStream) const
{
outStream << "NULL value ";
SIMCValue::WriteValue(outStream);
outStream << endl;
}
virtual BOOL operator == (const SIMCIntegerValue& rhs) const
{
return TRUE;
}
};
/*
* Value for the BOOL type
*/
class SIMCBooleanValue : public SIMCValue
{
BOOL _val;
public:
SIMCBooleanValue ( BOOL val, long line = 0, long column = 0 )
: _val(val), SIMCValue(line, column)
{}
BOOL GetBooleanValue() const
{
return _val;
}
void SetBooleanValue(BOOL x)
{
_val = x;
}
virtual void WriteValue( ostream& outStream) const
{
outStream << "BOOLEAN VALUE (" << ((_val)? "TRUE" : "FALSE") <<
") ";
SIMCValue::WriteValue(outStream);
outStream << endl;
}
virtual BOOL operator == (const SIMCBooleanValue& rhs) const
{
if (_val)
return rhs._val;
else
return !rhs._val;
}
};
/*
* value for the OCTET STRING type
*/
class SIMCOctetStringValue : public SIMCValue
{
char * _val;
BOOL _binary;
public:
SIMCOctetStringValue ( BOOL binary, char * x, long line = 0, long column = 0)
: _binary(binary), SIMCValue(line, column)
{
_val = NewString(x);
}
virtual ~SIMCOctetStringValue()
{
if(_val)
delete []_val;
}
BOOL IsBinary() const
{
return _binary;
}
const char *GetOctetStringValue() const { return _val; }
void SetOctetStringValue(BOOL binary, char * x)
{
if(_val)
delete _val;
_val = NewString(x);
_binary = binary;
}
virtual void WriteValue( ostream& outStream) const
{
outStream << "Octet String (" << _val << "), ";
SIMCValue::WriteValue(outStream);
outStream << endl;
}
virtual BOOL operator == (const SIMCOctetStringValue& rhs) const
{
return (_binary == rhs._binary) &&(strcmp(_val, rhs._val) == 0);
}
int GetNumberOfOctets() const
{
if(_val)
{
int l = strlen(_val);
if(!_binary)
return l/2 + ((l%2)?1:0);
return l/4 + ((l%4)?1:0);
}
else
return 0;
}
};
class SIMCBitValue
{
public:
CString _name;
long _line, _column;
SIMCBitValue(const CString& name, long line, long column)
: _name(name), _line(line), _column(column)
{}
};
typedef CList<SIMCBitValue *, SIMCBitValue*> SIMCBitValueList;
class SIMCBitsValue : public SIMCValue
{
SIMCBitValueList *_valueList;
public:
SIMCBitsValue(SIMCBitValueList *valueList)
{
_valueList = valueList;
}
void AddValue( SIMCBitValue *value)
{
_valueList->AddTail(value);
}
const SIMCBitValueList * GetValueList() const
{
return _valueList;
}
};
#endif // SIMC_VALUE