本文整理汇总了C#中SizeOfExpression.IsMatch方法的典型用法代码示例。如果您正苦于以下问题:C# SizeOfExpression.IsMatch方法的具体用法?C# SizeOfExpression.IsMatch怎么用?C# SizeOfExpression.IsMatch使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SizeOfExpression
的用法示例。
在下文中一共展示了SizeOfExpression.IsMatch方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DivideBySize
/// <summary>
/// Divides expr by the size of 'type'.
/// </summary>
Expression DivideBySize(Expression expr, TypeReference type)
{
CastExpression cast = expr as CastExpression;
if (cast != null && cast.Type is PrimitiveType && ((PrimitiveType)cast.Type).Keyword == "int")
expr = cast.Expression.Detach();
Expression sizeOfExpression;
switch (TypeAnalysis.GetInformationAmount(type)) {
case 1:
case 8:
sizeOfExpression = new PrimitiveExpression(1);
break;
case 16:
sizeOfExpression = new PrimitiveExpression(2);
break;
case 32:
sizeOfExpression = new PrimitiveExpression(4);
break;
case 64:
sizeOfExpression = new PrimitiveExpression(8);
break;
default:
sizeOfExpression = new SizeOfExpression { Type = AstBuilder.ConvertType(type) };
break;
}
BinaryOperatorExpression boe = expr as BinaryOperatorExpression;
if (boe != null && boe.Operator == BinaryOperatorType.Multiply && sizeOfExpression.IsMatch(boe.Right))
return boe.Left.Detach();
if (sizeOfExpression.IsMatch(expr))
return new PrimitiveExpression(1);
return new BinaryOperatorExpression(expr, BinaryOperatorType.Divide, sizeOfExpression);
}
示例2: DivideBySize
/// <summary>
/// Divides expr by the size of 'type'.
/// </summary>
Expression DivideBySize(Expression expr, TypeReference type)
{
CastExpression cast = expr as CastExpression;
if (cast != null && cast.Type is PrimitiveType && ((PrimitiveType)cast.Type).Keyword == "int")
expr = cast.Expression.Detach();
Expression sizeOfExpression;
int size = TypeAnalysis.GetInformationAmount(type);
switch (size) {
case 1:
case 8:
case 16:
case 32:
case 64:
sizeOfExpression = new PrimitiveExpression(size = (size + 7) / 8);
break;
default:
size = 0;
sizeOfExpression = new SizeOfExpression { Type = AstBuilder.ConvertType(type) };
break;
}
BinaryOperatorExpression boe = expr as BinaryOperatorExpression;
if (boe != null && boe.Operator == BinaryOperatorType.Multiply && sizeOfExpression.IsMatch(boe.Right))
return boe.Left.Detach();
if (size == 1) return expr;
if (sizeOfExpression.IsMatch(expr))
return new PrimitiveExpression(1);
if (size != 0) {
var primitive = expr as PrimitiveExpression;
if (primitive != null && primitive.Value is int)
return new PrimitiveExpression((int)primitive.Value / size);
}
return new BinaryOperatorExpression(expr, BinaryOperatorType.Divide, sizeOfExpression);
}