Skip to content

Instantly share code, notes, and snippets.

View xrrocha's full-sized avatar

Ricardo Rocha xrrocha

View GitHub Profile
/* 1) Domain entities: Bank and Account */
typealias Amount = BigDecimal
data class Bank(val accounts: MutableMap<String, Account> = HashMap())
data class Account(val id: String, val name: String) {
var balance: Amount by TxDelegate(initialValue = Amount.ZERO) {
// triggers rollback on validation failure
it >= Amount.ZERO
}
interface Command { fun applyTo(system: Any) }
interface Query { fun extractFrom(system: Any): Any?}
interface EventSourcing {
fun append(event: Any)
fun <E> replay(eventConsumer: (E) -> Unit)
}
interface TxManager {
val bank1 = Bank()
val memimg1 = MemImg(bank1, eventSourcing)
memimg1.execute(CreateAccount("janet", "Janet Doe"))
assertEquals(Amount.ZERO, bank1.accounts["janet"]!!.balance)
memimg1.execute(Deposit("janet", Amount(100)))
assertEquals(Amount(100), bank1.accounts["janet"]!!.balance)
memimg1.execute(Withdrawal("janet", Amount(10)))
// Skeletal Kotlin TL;DR for the truly impatient:
class MemoryImageProcessor(private val system: Any,
private val eventSourcing: EventSourcing) {
init {
synchronized(this) {
eventSourcing.replay<Command> { command -> command.applyTo(system) }
}
}
fun execute(command: Command): Unit = synchronized(this) {
@xrrocha
xrrocha / README-7
Last active December 16, 2020 18:21
code block for README-7
import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.util.stream.*;
@xrrocha
xrrocha / README-2
Last active December 16, 2020 18:21
code block for README-2
val reader = File(filename).reader()
do {
// ... shuffling stuff...
// Ensure shuffling took place!
} while (range.all {
result[it] == text[it] })
@xrrocha
xrrocha / README-19
Last active December 16, 2020 18:15
code block for README-19
// Java
do {
// ... shuffling stuff...
// Ensure shuffling took place!
} while(IntStream.range(start, end)
.allMatch(i ->
result[i] == text.charAt(i)
}));
@xrrocha
xrrocha / README-18
Last active December 16, 2020 18:13
code block for README-18
// Shuffle inner letter array
for (i in range) {
// Choose a random index in region
val rndIdx: Int = range.random()
// Swap current/random chars
result[rndIdx] = result[i].also {
result[i] = result[rndIdx]
}
}
@xrrocha
xrrocha / README-17
Last active December 16, 2020 18:13
code block for README-17
// Shuffle inner letter array
for (var i = start; i < end; i++) {
// Choose a random index in region
final var rndIdx =
start + random.nextInt(length);
// Swap current/random chars
final var save = result[rndIdx];
result[rndIdx] = result[i];
result[i] = save;
}