Created
December 30, 2011 18:52
-
-
Save earldouglas/1541001 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// -*- mode: Scala;-*- | |
// Filename: k.scala | |
// Authors: lgm | |
// Creation: Wed Dec 28 14:52:27 2011 | |
// Copyright: Not supplied | |
// Description: | |
// ------------------------------------------------------------------------ | |
import scala.collection.mutable.HashMap | |
import scala.util.continuations._ | |
import com.thoughtworks.xstream.XStream | |
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver | |
import biz.source_code.base64Coder.Base64Coder | |
//import java.util._ | |
import java.io.ObjectInputStream | |
import java.io.ByteArrayInputStream | |
import java.io.ObjectOutputStream | |
import java.io.ByteArrayOutputStream | |
/** | |
* Usage sample serializing SomeClass instance | |
*/ | |
object ObjectToString { | |
/** Read the object from Base64 string. */ | |
def fromString( s : String ) : java.lang.Object = { | |
val data : Array[Byte] = Base64Coder.decode( s ) | |
val ois : ObjectInputStream = | |
new ObjectInputStream( new ByteArrayInputStream( data ) ) | |
val o : java.lang.Object = ois.readObject(); | |
ois.close() | |
o | |
} | |
/** Write the object to a Base64 string. */ | |
def toString( o : Serializable ) : String = { | |
val baos : ByteArrayOutputStream = new ByteArrayOutputStream() | |
val oos : ObjectOutputStream = new ObjectOutputStream( baos ) | |
oos.writeObject( o ) | |
oos.close() | |
new String( Base64Coder.encode( baos.toByteArray() ) ) | |
} | |
} | |
object OK { | |
def coral( useXStream : Boolean )( | |
kmap : HashMap[String, (String => Unit)], | |
ksmap : HashMap[String,String], | |
key : String | |
) = { | |
reset { | |
shift { | |
( k : ( String => Unit ) ) => { | |
val ks = | |
if ( useXStream ) { | |
new XStream( new JettisonMappedXmlDriver() ).toXML( k ) | |
} | |
else { | |
ObjectToString.toString( k.asInstanceOf[Serializable] ) | |
} | |
println( "continuation as string: " + ks ) | |
ksmap += ( ( key, ks ) ) | |
kmap += ( ( key, k ) ) | |
k( ks ) | |
} | |
} | |
println( "resuming..." ) | |
println( "searching kmap : " + kmap ) | |
println( "kmap id : " + System.identityHashCode(kmap)) // add this line | |
for( | |
fns <- kmap.get( key ) | |
) { | |
println( "fns is " + fns ); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
scala> :l k.scala | |
Loading k.scala... | |
import scala.collection.mutable.HashMap | |
import scala.util.continuations._ | |
import biz.source_code.base64Coder.Base64Coder | |
import java.io.ObjectInputStream | |
import java.io.ByteArrayInputStream | |
import java.io.ObjectOutputStream | |
import java.io.ByteArrayOutputStream | |
defined module ObjectToString | |
defined module OK | |
scala> val ksmap1 = new HashMap[String,String]( ) | |
ksmap1: scala.collection.mutable.HashMap[String,String] = Map() | |
scala> val kmap1 = new HashMap[String,(String => Unit)]( ) | |
kmap1: scala.collection.mutable.HashMap[String,String => Unit] = Map() | |
scala> OK.coral( false )( kmap1, ksmap1, "Erp" ) | |
continuation as string: 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 | |
resuming... | |
searching kmap : Map(Erp -> <function1>) | |
kmap id : 24530783 | |
fns is <function1> | |
scala> kmap1( "Erp" )( "Erp" ) | |
resuming... | |
searching kmap : Map(Erp -> <function1>) | |
kmap id : 24530783 | |
fns is <function1> | |
scala> val rK1 = ObjectToString.fromString( ksmap1( "Erp" ) | |
| ).asInstanceOf[( String => Unit )] | |
rK1: String => Unit = <function1> | |
scala> rK1( "Erp" ) | |
resuming... | |
searching kmap : Map() | |
kmap id : 4430367 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment