You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
2.0 KiB
Python

import options
from socket import getprotobyname
if options.import_ops:
external_import = __import__(options.import_ops)
def NOT(op):
def not_op(*args):
op_result = op(*args)
return not op_result
return not_op
def and_op(*args, **kwargs):
res = True
for arg in args:
res = res and arg
for arg in kwargs.values():
res = res and arg
return res
def bitAND(*args):
res = args[0]
for arg in args[1:]:
res &= arg
return res
def bitOR(*args):
res = args[0]
for arg in args[1:]:
res |= arg
return res
def or_op(*args, **kwargs):
res = False
for arg in args:
res = res or arg
for arg in kwargs.values():
res = res or arg
return res
def protocol(name):
return getprotobyname(name)
def SUM(*args):
sum = 0
for arg in args:
sum += arg
return sum
def EQ(*args):
prev_arg = args[0]
result = True
for arg in args[1:]:
result = result and prev_arg == arg
prev_arg = arg
return result
def LT(*args):
prev_arg = args[0]
result = True
for arg in args[1:]:
result = result and prev_arg < arg
prev_arg = arg
return result
def GT(*args):
prev_arg = args[0]
result = True
for arg in args[1:]:
result = result and prev_arg > arg
prev_arg = arg
return result
def GTEQ(*args):
prev_arg = args[0]
result = True
for arg in args[1:]:
result = result and prev_arg >= arg
prev_arg = arg
return result
def LTEQ(*args):
prev_arg = args[0]
result = True
for arg in args[1:]:
result = result and prev_arg <= arg
prev_arg = arg
return result
def IN(*args):
last_arg = args[-1] # probably subnet mask
result = True
for arg in args[:-1]:
result = result and arg & last_arg
return result
def true(*args):
return True