オブジェクトルーチン:
その他

object_classname_compare

     
  特定のオブジェクトが、与えられたクラスのインスタンスかどうかを判定するために 、object_classname_compare 関数を使います。
   
  long object_classname_compare(void *x, t_symbol *name);
     
  x テストを行なうオブジェクト
  name オブジェクトに対してテストするクラス名
     
 

このルーチンは、オブジェクトがその名前のクラスのインスタンスである場合には1を、そうでない場合は0を返します。

例えば、未知のオブジェクトポインタが print オブジェクトを指しているかどうかを判断する場合には、次のような呼び出しを行います。

long isprint = object_classname_compare(x, gensym("print"));


object_class

     
  与えられたオブジェクトのクラスを判定するために、object_class 関数を使います。
   
  t_class *object_class(void *x);
     
  x テストを行なうオブジェクト
     
 

このルーチンは、成功した場合オブジェクトのクラス t_class * を返し、失敗した場合は NULL を返します。


object_getvalueof

     
  getvalueof / setvalueof インターフェイスをサポートするオブジェクトの値を取り出すために、object_getvalueof 関数を使います。このインターフェイスに関するより詳しい情報は、pattr SDK の part 2 を参照して下さい。
   
  t_max_err object_getvalueof(void *x, long *ac, t_atom **av);
     
  x 値を取り出す対象となるオブジェクト
  ac av の中のアーギュメントの数を受け取る long 変数へのポインタ。このルーチンを呼び出す前に、long 変数自身を 0 にセットしておく必要があります。
  av オブジェクトのデータを受け取るための、t_atom * へのポインタ。このルーチンを呼び出す前に、t_atom * 自身を NULLにセットしておく必要があります。
     
 

このルーチンは、成功するとエラーコード MAX_ERR_NONEを返し、失敗した場合には“ext_obex.h”で定義される他のエラーコードの1つを返します。

object_getvalueof ルーチンの呼び出しによって返されるデータがどのようなものであっても、メモリの割り当てが行なわれます。freebytes 関数を使ってこれを開放することが、開発者に義務づけられます。

オブジェクト上で呼び出されるこの関数をサポートするようなオブジェクトを設計しようと思う開発者は、次のように、特別なメソッド getvalueof を定義し、実装しなければなりません。

class_addmethod(c, (method)myobject_getvalueof, "getvalueof", A_CANT, 0);

getvalueofメソッドのプロトタイプ宣言は、次のように行なわなければなりません。

t_max_err myobject_getvalueof(t_myobject *x, long *ac, t_atom **av);

そして、通常、次のように実装されます。

t_max_err myobj_getvalueof(t_myobj *x, long *ac,t_atom **av) { if (ac && av) { if (*ac && *av) { // 渡されているメモリ:これを使います。 } else { // あなたのデータに適したメモリを割り当てます。 *av = (t_atom *)getbytes(sizeof(t_atom)); } *ac = 1; // 私たちのデータは1つの浮動小数点の値です。 atom_setfloat(*av, x->objvalue); } return MAX_ERR_NONE; }

obex API を使ったオブジェクトの相互接続性を可能にするために、開発者は getvalueof メソッドの中で、getbytes 関数を使ってメモリを割り当てなければならない仕様になっています。


object_setvalueof

     
  getvalueof / setvalueof インターフェイスをサポートするオブジェクトに値をセットするために、object_setvalueof 関数を使います。このインターフェイスに関するより詳しい情報は、pattr SDK の part 2 を参照して下さい。
   
  t_max_err object_setvalueof(void *x, long ac, t_atom *av);
     
  x 値をセットする対象となるオブジェクト。
  ac av の中のアーギュメントの数
  av t_atom の配列:オブジェクトのために必要とされる新しいデータ
     
 

このルーチンは、成功するとエラーコード MAX_ERR_NONEを返し、失敗した場合には“ext_obex.h”で定義される他のエラーコードの1つを返します。

オブジェクト上で呼び出されるこの関数をサポートするようなオブジェクトを設計しようと思う開発者は、次のように、特別なメソッド setvalueof を定義し、実装しなければなりません。

class_addmethod(c, (method)myobject_setvalueof, "setvalueof", A_CANT, 0);

setvalueof メソッドのプロトタイプ宣言は、次のように行なわなければなりません。

t_max_err myobject_setvalueof(t_myobject *x, long *ac, t_atom **av);

そして、通常、次のように実装されます。

t_max_err myobject_setvalueof(t_myobject *x, long ac, t_atom *av) { if (ac && av) { // float の値の受け取りをシミュレートします myobject_float(x, atom_getfloat(av)); } return MAX_ERR_NONE; }