openfl
Version:
A fast, productive library for 2D cross-platform development.
105 lines (89 loc) • 3.31 kB
JavaScript
// Class: openfl.text._internal.ShapeCache
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../../hxClasses_stub").default;
var $hxEnums = require("./../../../hxEnums_stub").default;
var $import = require("./../../../import_stub").default;
function haxe_ds_StringMap() {return require("./../../../haxe/ds/StringMap");}
function openfl_text__$internal_CacheMeasurement() {return require("./../../../openfl/text/_internal/CacheMeasurement");}
function haxe_ds_IntMap() {return require("./../../../haxe/ds/IntMap");}
function HxOverrides() {return require("./../../../HxOverrides");}
// Constructor
var ShapeCache = function() {
this.__shortWordMap = new (haxe_ds_StringMap().default)();
this.__longWordMap = new (haxe_ds_StringMap().default)();
}
// Meta
ShapeCache.__name__ = "openfl.text._internal.ShapeCache";
ShapeCache.__isInterface__ = false;
ShapeCache.prototype = {
cache: function(formatRange,getPositions,wordKey) {
var formatKey = formatRange.format.__cacheKey;
if(wordKey.length > 15) {
return this.__cacheLongWord(wordKey,formatKey,getPositions);
} else {
return this.__cacheShortWord(wordKey,formatKey,getPositions);
}
},
__cacheShortWord: function(wordKey,formatKey,getPositions) {
if(this.__shortWordMap.exists(formatKey)) {
var formatMap = this.__shortWordMap.get(formatKey);
if(formatMap.exists(wordKey)) {
return formatMap.get(wordKey);
} else {
formatMap.set(wordKey,getPositions());
}
} else {
var formatMap1 = new (haxe_ds_StringMap().default)();
formatMap1.set(wordKey,getPositions());
this.__shortWordMap.set(formatKey,formatMap1);
}
return getPositions();
},
__cacheLongWord: function(wordKey,formatKey,getPositions) {
var hash = ShapeCache.hashFunction(wordKey);
if(this.__longWordMap.exists(formatKey)) {
var formatMap = this.__longWordMap.get(formatKey);
if(formatMap.exists(hash)) {
var measurement = formatMap.get(hash);
if(measurement.exists(wordKey)) {
return measurement.get(wordKey);
} else {
measurement.set(wordKey,getPositions());
}
} else {
var measurement1 = new (openfl_text__$internal_CacheMeasurement().default)(wordKey,getPositions());
formatMap.set(hash,measurement1);
}
} else {
var formatMap1 = new (haxe_ds_IntMap().default)();
var measurement2 = new (openfl_text__$internal_CacheMeasurement().default)(wordKey,getPositions());
measurement2.hash = hash;
formatMap1.set(hash,measurement2);
this.__longWordMap.set(formatKey,formatMap1);
}
return getPositions();
}
};
ShapeCache.prototype.__class__ = ShapeCache.prototype.constructor = $hxClasses["openfl.text._internal.ShapeCache"] = ShapeCache;
// Init
// Statics
ShapeCache.hashFunction = function(key) {
var hash = 0;
var i;
var chr;
var _g = 0;
var _g1 = key.length;
while(_g < _g1) {
var i1 = _g++;
chr = (HxOverrides().default).cca(key,i1);
hash = (hash << 5) - hash + chr;
hash |= 0;
}
return hash;
}
ShapeCache.__meta__ = { obj : { SuppressWarnings : ["checkstyle:FieldDocComment"]}}
// Export
exports.default = ShapeCache;