Skip to content

ianharrigan/hpel

Repository files navigation

Haxe Process Expression Language (HPEL)

Create cross-platform, multi-threaded, software process quickly via XML and/or DSL.

Note: very much a work in progress

TODO:

Some examples

Sequences

DSL XML
.beginSequence()
	.beginSequence()
		.log("start sequence 1")
		.delay(.5)
		.log("end sequence 1")
	.endSequence()
	.beginSequence()
		.log("start sequence 2")
		.delay(.5)
		.log("end sequence 2")
	.endSequence()
	.beginSequence()
		.log("start sequence 3")
		.delay(.5)
		.log("end sequence 3")
	.endSequence()
.endSequence()
<sequence>
	<sequence>
		<log message="start sequence 1" />
		<delay seconds=".5" />
		<log message="end sequence 1" />
	</sequence>
	<sequence>
		<log message="start sequence 2" />
		<delay seconds=".5" />
		<log message="end sequence 2" />
	</sequence>
	<sequence>
		<log message="start sequence 3" />
		<delay seconds=".5" />
		<log message="end sequence 3" />
	</sequence>
</sequence>

Parallel (Threads)

DSL XML
.beginParallel()
	.beginSequence()
		.log("start thread 1")
		.delay(15)
		.log("end thread 1")
	.endSequence()
	.beginSequence()
		.log("start thread 2")
		.delay(10)
		.log("end thread 2")
	.endSequence()
	.beginSequence()
		.log("start thread 3")
		.delay(5)
		.log("end thread 3")
	.endSequence()
.endParallel()
<parallel>
	<sequence>
		<log message="start thread 1" />
		<delay seconds="15" />
		<log message="end thread 1" />
	</sequence>
	<sequence>
		<log message="start thread 2" />
		<delay seconds="10" />
		<log message="end thread 2" />
	</sequence>
	<sequence>
		<log message="start thread 3" />
		<delay seconds="5" />
		<log message="end thread 3" />
	</sequence>
</parallel>

Variables

DSL XML
.beginSequence()
	.set("var1", 100)
	.beginSequence()
		.set("scopedVar", 200)
		.set("result", "${var1 + scopedVar}")
		.log("result = ${result}")
	.endSequence()
	.beginSequence()
		.set("scopedVar", 300)
		.set("result", "${var1 + scopedVar}")
		.log("result = ${result}")
	.endSequence()
.endSequence()
<sequence>
	<set var="var1" value="100" />
	<sequence>
		<set var="scopedVar" value="200" />
		<set var="result" value="${var1 + scopedVar}" />
		<log message="result = ${result}" />
	</sequence>
	<sequence>
		<set var="scopedVar" value="300" />
		<set var="result" value="${var1 + scopedVar}" />
		<log message="result = ${result}" />
	</sequence>
</sequence>

Loops

DSL XML
.beginSequence()
		.beginLoop([15, 10, 5], "delay")
			.log("delaying for ${delay} seconds")
			.delay("${delay}")
			.log("${delay} second delay complete")
		.endLoop()
.endSequence()
<sequence>
	<loop items="[15, 10, 5]" var="delay">
		<log message="delaying for ${delay} seconds" />
		<delay seconds="${delay}" />
		<log message="${delay} second delay complete" />
	</loop>
</sequence>

Loops (Threaded)

DSL XML
.beginParallel()
		.beginLoop([15, 10, 5], "delay")
			.log("delaying for ${delay} seconds")
			.delay("${delay}")
			.log("${delay} second delay complete")
		.endLoop()
.endParallel()
<parallel>
	<loop items="[15, 10, 5]" var="delay">
		<log message="delaying for ${delay} seconds" />
		<delay seconds="${delay}" />
		<log message="${delay} second delay complete" />
	</loop>
</parallel>

Conditionals

DSL XML
.beginSequence()
	.set("testVar", 0)
	.beginChoose()
		.when("${testVar >= 1}")
			.log("1 or greater! (value=${testVar})")
		.when("${testVar < 0}")
			.log("less than 0! (value=${testVar})")
		.otherwise()
			.log("Guess it must be zero! (value=${testVar})")
	.endChoose()
.endSequence()
<sequence>
	<set var="testVar" value="0" />
	<choose>
		<when condition="${testVar >= 1}">
			<log message="1 or greater! (value=${testVar})" />
		</when>
		<when condition="${testVar < 0}">
			<log message="less than 0! (value=${testVar})" />
		</when>
		<otherwise>
			<log message="Guess it must be zero! (value=${testVar})" />
		</otherwise>
	</choose>
</sequence>

About

Haxe Process Expression Language - Work In Progress

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published