Singletons エクステンション

../../_images/FE_logo_345_60.png
Fabric Engine version 2.4.0
Copyright (c) 2010-2017 Fabric Software Inc. All rights reserved.

Singletons エクステンション は、1つの演算子や別のスコープからKLオブジェクトを永続化する方法を提供します。オブジェクトは、ユーザーには理解できない静的C++マップ内に格納されます。これの使用例として、 InlineDrawing エクステンションInlineDrawing シングルトンを格納します。

注釈

グローバルマップにKLオブジェクトの保存ができます。KL構造体ではありません。

Singleton_setSingleton_hasSingleton_get

注釈

Fabric Engine のバージョン1.12.0から実装のシングルトンは、コアクライアントを閉じるときに自動的に破棄されます。
require Singletons;

object MySettings {

  /// \internal
  String values[String];

};

function MySettings.set!(String key, String value) {
  this.values[key] = value;
}

function String MySettings.get!(String key) {
  return this.values.get(key, '');
}

function setupSettings() {

  MySettings settings = MySettings();
  settings.set('language', 'english');
  settings.set('localization', 'us');

  // in this function's scope we create an object and
  // store it in the singletons extension's memory.
  // note that it otherwise would run out of scope and
  // get destroyed.
  Singleton_set('settings', settings);
}

operator entry() {

  setupSettings();

  // check if we have the singleton in this scope.
  if(Singleton_has('settings')) {

    MySettings settings = Singleton_get('settings');
    if(!settings) {
      setError('Singleton settings is set, but not of KL type MySettings!');
    } else {
      report('Language setting: '+settings.get('language'));
      report('Localization setting: '+settings.get('localization'));
    }
  }

}

/*
** Output:

Language setting: english
Localization setting: us

*/

シングルトン単体テストの一例

/*
** Example: Singletons_Test1.kl
*/

require Singletons;

object MySingleton {
  String name;
};

operator entry() {
  MySingleton someSingleton = MySingleton();
  someSingleton.name = 'test';
  report(someSingleton);

  Singleton_set('someSingleton', someSingleton);
  someSingleton = null;
  report(someSingleton);

  someSingleton = Singleton_get('someSingleton');
  report(someSingleton);  
}

/*
** Output:

{name:"test"}
null
{name:"test"}

*/

索引と検索