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
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
|