
SimpleCache Ant.Karlov'а на HaXe
Кэш объектов всегда достаточно полезная штука. В одной из своих поделок я использовал реализацию, подсмотренную у Ant.Karlov'а в его Tower Defense туториале.
Но в свете того, что я в последнее время перешел на haxe реализацию SimpleCache пришлось тоже перенести на этот язык.
Вот в принципе сам код класса:
Использование класса осталось почти без изменений:
Но в свете того, что я в последнее время перешел на haxe реализацию SimpleCache пришлось тоже перенести на этот язык.
Вот в принципе сам код класса:
package mmg;
class SimpleCache<T>
{
public var instance(get, never):T;
private var _targetClass:Class<T>;
private var _currentIndex:Int;
private var _instances:Array<T>;
public function new(targetClass:Class<T>, initialCapacity:Int)
{
_targetClass = targetClass; // Базовый класс всех объектов
_currentIndex = initialCapacity - 1; // Индекс текущего свободного объекта
_instances = []; // Список всех объектов
// Заполняем обойму
for (i in 0...initialCapacity)
{
_instances[i] = getNewInstance();
}
}
private function getNewInstance():T
{
return Type.createEmptyInstance(_targetClass);
}
private function get_instance():T
{
if (_currentIndex >= 0)
{
// Возвращаем свободный объект из кэша
_currentIndex--;
return _instances[_currentIndex + 1];
}
else
{
// Если обойма пуста, то экстренно создаем новый объект
return getNewInstance();
}
}
public function put(instance:T):Void
{
_currentIndex++;
// Если обойма переполнена
if (_currentIndex == _instances.length)
{
// То помещаем в конец массива, как новый элемент
_instances[_instances.length] = instance;
}
else
{
// Помещаем в свободную ячеку массива
_instances[_currentIndex] = instance;
}
}
}
Использование класса осталось почти без изменений:
// инициализируем кэш
var cache:SimpleCache<OurObjectClass> = new SimpleCache(OurObjectClass, 50);
// берем один из экземпляров
var tmp:OurObjectClass = cache.instance;
tmp.doSomething();
// возвращаем объект обратно в кэш
cache.put(tmp);
- +6
- zaynyatyi
Комментарии (7)
тоже было бы интересно почитать, в чем основные различия плюсы-минусы и тд =)
Статью напишу обязательно.
Специально сесть изучить времени не хватает,
но статейку обязательно почитаю, вдруг язык окажется удобным и стоящим изучения
Сравнение кода на haxe и as3, также на блоге есть еще исходники для ознакомления.