function SyncApi(schema, sh, logger){
	_.assertObject(schema);
	_.assertFunction(logger)
	
	this.log = logger;
	
	this.temporaryIdCounter = -1;

	this.sh = sh;
	//_.assertFunction(sh.makeFork)
	this.schema = schema;

	this.snap = {latestVersionId: -1, objects: {}, historicalViewObjects: {}};

	this.cachedProperties = {};
	
	this.changeListener = SyncApi.prototype.changeListener.bind(this);
	_.assertFunction(this.changeListener);

	this.objectApiCache = {};
	this.historicalObjectCache = {}
	
	this.uid = Math.random()
	
	this.latestVersionId = -1
	//this.log('made SyncApi ' + this.uid)
}
function SyncApi(schema, sh, logger){
	_.assertObject(schema);
	_.assertFunction(logger)
	
	this.log = logger;
	
	this.temporaryIdCounter = -1;

	this.sh = sh;
	
	this.schema = schema;

	this.snap = {latestVersionId: -1, objects: {}, historicalViewObjects: {}};

	this.cachedProperties = {};
	
	this.changeListener = SyncApi.prototype.changeListener.bind(this);
	_.assertFunction(this.changeListener);

	this.objectApiCache = {};
	this.historicalObjectCache = {}
	
	this.uid = Math.random()
	
	this.latestVersionId = -1
	
}
function SyncApi ( schema , sh , logger ) { _ . assertObject ( schema ) ; _ . assertFunction ( logger ) this . log = logger ; this . temporaryIdCounter = - 1 ; this . sh = sh ; //_.assertFunction(sh.makeFork) this . schema = schema ; this . snap = { latestVersionId : - 1 , objects : { } , historicalViewObjects : { } } ; this . cachedProperties = { } ; this . changeListener = SyncApi . prototype . changeListener . bind ( this ) ; _ . assertFunction ( this . changeListener ) ; this . objectApiCache = { } ; this . historicalObjectCache = { } this . uid = Math . random ( ) this . latestVersionId = - 1 //this.log('made SyncApi ' + this.uid) }
/*
function getPath(){
return this.parent.getPath().concat(this.part);
}
/ * function getPath () { return this . parent . getPath () . concat ( this . part ) ; }