Skip to content

Instantly share code, notes, and snippets.

@arturaz
arturaz / ADT.cs
Created September 22, 2013 09:55
Defining same ADT in C# and Scala
public abstract class Kind {
public class Global : Kind {}
public class World : Kind {
public readonly int world;
public World(int world) {
this.world = world;
}
}
@arturaz
arturaz / Matching.scala
Created September 22, 2013 09:59
Matching ADT with Scala
private def getLeaderboardName(kind: Kind, lbKind: LeaderboardKind) = kind match {
case kg @ Kind.Global =>
LeaderboardName(s"lb_${leaderboardKindToString(lbKind)}", lbKind)
case Kind.World(w) =>
LeaderboardName(s"lb_w${w}_${leaderboardKindToString(lbKind)}", lbKind)
case Kind.Level(w, l, b) =>
LeaderboardName(
s"lb_w${w}_l$l${if (b) "b" else "")}_${leaderboardKindToString(lbKind)}",
lbKind
)
@arturaz
arturaz / Match.cs
Created September 22, 2013 10:01
Simple ADT matcher in C#
using System;
namespace Utils.Match {
public interface IMatcher<in Base, Return> where Base : class {
IMatcher<Base, Return> when<T>(Func<T, Return> onMatch)
where T : class, Base;
Return get();
Return getOrElse(Func<Return> elseFunc);
}
@arturaz
arturaz / ADTMatch.cs
Created September 22, 2013 10:04
Matching ADT with C# using https://gist.github.com/arturaz/6658547 helper.
private static LeaderboardName getLeaderboardName(
Kind kind, LeaderboardKind lbKind
) {
return new LeaderboardName(
kind.match().returning<string>
.when<Kind.Global>(_ => string.Format(
"lb_{0}", leaderboardKindToString(lbKind)
))
.when<Kind.World>(kw => string.Format(
"lb_w{0}_{1}", kw.world, leaderboardKindToString(lbKind)
def extractEither[
Key, TLeft, TRight, M[_] <: TraversableOnce[_]
]
(monad: M[(Key, Either[TLeft, TRight])])
(implicit cbf: CanBuildFrom[
M[(Key, Either[TLeft, TRight])],
(Key, TRight),
M[(Key, TRight)]
]): Either[TLeft, M[(Key, TRight)]] = {
val builder = cbf(monad)
object ChiShapeGenerator extends ChiShapeGenerator {
trait JavaConvertible[From, To] { def asJava(obj: From): To }
object JavaConvertible {
def apply[A, B](obj: A) = implicitly[JavaConvertible[A, B]].asJava(obj)
implicit object HoleParamsJC extends JavaConvertible[HoleParams, HP] {
def asJava(obj: HoleParams) = new HP(obj.holeEdgeLengthThreshold)
}
implicit object SmoothHoleParamsJC
@arturaz
arturaz / gist:7037599
Created October 18, 2013 07:08
Akka IO TCP connection handler using pipelines
package com.tinylabproductions.quazibuild.server.actor.connection
import akka.actor.{Props, ActorRef, Actor}
import akka.io.Tcp._
import java.net.InetSocketAddress
import akka.util.ByteString
import com.tinylabproductions.quazibuild.server.messaging._
import com.tinylabproductions.quazibuild.server.actor.Logging
import com.tinylabproductions.quazibuild.messaging.Messages.{S2C, C2S}
import akka.io._
@arturaz
arturaz / enumerator.cs
Created October 24, 2013 05:44
Custom iteration in C# and Scala
public IEnumerator<Tuple2<T, Direction>> GetEnumerator() {
if (top != null)
yield return new Tuple2<T, Direction>(top, Direction.Top);
if (right != null)
yield return new Tuple2<T, Direction>(right, Direction.Right);
if (down != null)
yield return new Tuple2<T, Direction>(down, Direction.Down);
if (left != null)
yield return new Tuple2<T, Direction>(left, Direction.Left);
}
package com.tinylabproductions.quazibuild.server.messaging
import com.tinylabproductions.quazibuild.{messaging => m}
import com.tinylabproductions.quazibuild.messaging.Messages.S2C
import com.google.protobuf.GeneratedMessage
import com.tinylabproductions.quazibuild.messaging.LiveGame._
import com.tinylabproductions.quazibuild.server.model.{StoredResource, Resource}
import com.tinylabproductions.quazibuild.messaging.Base.User
import com.tinylabproductions.quazibuild.server.actor.live_game.model.Ship
import implicits._
packageConfiguration in packageBin in Compile <<= (
packageConfiguration in packageBin in Compile, baseDirectory
) map { (c, b) =>
val jar = b / "Plugins" / "Android" / "xclient.jar"
new Package.Configuration(c.sources, jar, c.options)
}