[Insight-developers] Filter execution dispatch based on dimension.

Brad King brad.king@kitware.com
Fri, 26 Jan 2001 17:39:34 -0500 (EST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---1463811583-366643265-980548774=:20114
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hello, all:

A general problem we've been having with this toolkit is how to setup
multiple implementations of each filter, each optimized for a particular
dimension.  The attached file presents a clean solution to this problem
which has been tested on Visual C++, GCC, MIPSpro, and the Intel
compiler.  See the file for a more detailed description of the problem.

After reading the solution, you will see that we can provide several
filter dispatch classes, each defining a different combination of rules
for dimension-based filter execute calls.  Each filter will be able to
select which dispatch class to use, or define its own.

The use of these dispach classes is completely transparent to the user of
the filter, and requires little work by the implementer.  If everyone
likes this approach, I will add the dispatch classes to Insight and check
them in.

Thoughts?
-Brad

---1463811583-366643265-980548774=:20114
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="filterDispatch.cxx"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.21.0101261739340.20114@darkstar.kitware.com>
Content-Description: 
Content-Disposition: attachment; filename="filterDispatch.cxx"

LyoqDQogKiBEZW1vbnN0cmF0aW9uIG9mIGZpbHRlciBkaXNwYXRjaGluZy4g
IFRoZSBnZW5lcmFsIHByb2JsZW0gaXMgdG8gcHJvdmlkZQ0KICogZmlsdGVy
cyB3aXRoIHNwZWNpYWxpemVkIGltcGxlbWVudGF0aW9ucyBmb3IgZWFjaCBk
aW1lbnNpb24sIGJ1dCBpbg0KICogb25seSBvbmUgY2xhc3MsIGFuZCB3aXRo
b3V0IHBhcnRpYWwgc3BlY2lhbGl6YXRpb24uICBDb25zaWRlciBhIGZpbHRl
cg0KICogd2l0aCBtZXRob2RzIEV4ZWN1dGVOZCgpLCBFeGVjdXRlM2QoKSwg
YW5kIEV4ZWN1dGUyZCgpIHdoaWNoIHdlIHdvdWxkDQogKiBsaWtlIHRvIGRp
c3BhdGNoIGZyb20gYSBzaW5nbGUgRXhlY3V0ZSgpIGNhbGwuDQogKg0KICog
VGhlIGJhc2ljIGNoYWxsZW5nZSBoZXJlIGlzIHRoYXQgYSBmaWx0ZXIgdGhh
dCBoYXMgYmVlbiBpbnN0YW50aWF0ZWQgYXMNCiAqIGRpbWVuc2lvbiAzLCBm
b3IgZXhhbXBsZSwgc3RpbGwgaGFzIGV4ZWN1dGUgbWV0aG9kcyBmb3IgMiwg
MywgYW5kIE4NCiAqIGRpbWVuc2lvbnMuICBJZiBFeGVjdXRlMmQoKSBpcyBp
bnN0YW50aWF0ZWQsIGl0IG1heSBoYXZlIGNvbXBpbGVyIGVycm9ycw0KICog
YmVjYXVzZSBpdCBhc3N1bWVzIHRoYXQgdGhlIGNsYXNzIGlzIGluc3RhbnRp
YXRlZCBmb3IgMiBkaW1lbnNpb25zLg0KICogVGhpcyBtZWFucyB3ZSBjYW4n
dCBoYXZlIGFuIEV4ZWN1dGUoKSBtZXRob2Qgd2hpY2ggdGVzdHMgdGhlIGRp
bWVuc2lvbg0KICogYXQgcnVuLXRpbWUgYW5kIGNhbGxzIHRoZSBhcHByb3By
aWF0ZSBFeGVjdXRlKipkKCkgbWV0aG9kIGJlY2F1c2UgaXQgd2lsbA0KICog
aW5zdGFudGlhdGUgYWxsIHRoZSBFeGVjdXRlKipkKCkgbWV0aG9kcywgd2hl
biBvbmx5IG9uZSB3aWxsIGNvbXBpbGUNCiAqIHByb3Blcmx5Lg0KICoNCiAq
IFRoZSBzb2x1dGlvbiBwcmVzZW50ZWQgYmVsb3cgd2lsbCBhbGxvdyBhIHNp
bmdsZSBFeGVjdXRlKCkgY2FsbCB0bw0KICogaW5zdGFudGlhdGUgYW5kIGNh
bGwgb25seSB0aGUgY29ycmVjdCBFeGVjdXRlKipkKCkgbWV0aG9kIGZvciBh
IHBhcnRpY3VsYXINCiAqIGZpbHRlciBpbnN0YW50aWF0aW9uLg0KICoNCiAq
IFRoaXMgaGFzIGJlZW4gdGVzdGVkIHN1Y2Nlc3NmdWxseSBvbg0KICogIC0g
VkMrKyBTZXJ2aWNlIFBhY2sgNA0KICogIC0gR0NDDQogKiAgLSBUaGUgSW50
ZWwgQ29tcGlsZXINCiAqICAtIE1JUFNwcm8NCiAqLw0KDQojaW5jbHVkZSA8
aW9zdHJlYW0+DQoNCi8qKg0KICogTWFpbiBkaXNwYXRjaCBjbGFzcyBmb3Ig
ZmlsdGVycy4gIFVubGVzcyBhIHNwZWNpYWwgcnVsZSBhcHBsaWVzLA0KICog
dGhpcyBpcyB1c2VkIHRvIGV4ZWN1dGUgdGhlIGZpbHRlcidzIGdlbmVyYWwg
Ti1kaW1lbnNpb25hbCBpbXBsZW1lbnRhdGlvbi4NCiAqIFNwZWNpYWxpemF0
aW9ucyBvZiB0aGlzIGNsYXNzIGFyZSB1c2VkIHRvIGNyZWF0ZSBzcGVjaWFs
IHJ1bGVzIGZvcg0KICogYSBwYXJ0aWN1bGFyIGRpbWVuc2lvbi4NCiAqLw0K
dGVtcGxhdGUgPHVuc2lnbmVkIGxvbmc+DQpzdHJ1Y3QgRmlsdGVyRGlzcGF0
Y2gNCnsNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFRGaWx0ZXI+DQogIHN0YXRp
YyB2b2lkIEV4ZWN1dGUoVEZpbHRlciogZmlsdGVyKQ0KICAgIHsNCiAgICBm
aWx0ZXItPkV4ZWN1dGVOZCgpOw0KICAgIH0NCn07DQoNCg0KLyoqDQogKiBD
cmVhdGUgYSBzcGVjaWFsIGRpc3BhdGNoIHJ1bGUgZm9yIGZpbHRlcnMgaW5z
dGFudGlhdGVkIGFzDQogKiAyLWRpbWVuc2lvbmFsLg0KICovDQp0ZW1wbGF0
ZSA8Pg0Kc3RydWN0IEZpbHRlckRpc3BhdGNoPDI+DQp7DQogIHRlbXBsYXRl
IDx0eXBlbmFtZSBURmlsdGVyPg0KICBzdGF0aWMgdm9pZCBFeGVjdXRlKFRG
aWx0ZXIqIGZpbHRlcikNCiAgICB7DQogICAgZmlsdGVyLT5FeGVjdXRlMmQo
KTsNCiAgICB9DQp9Ow0KDQoNCi8qKg0KICogQ3JlYXRlIGEgc3BlY2lhbCBk
aXNwYXRjaCBydWxlIGZvciBmaWx0ZXJzIGluc3RhbnRpYXRlZCBhcw0KICog
My1kaW1lbnNpb25hbC4NCiAqLw0KdGVtcGxhdGUgPD4NCnN0cnVjdCBGaWx0
ZXJEaXNwYXRjaDwzPg0Kew0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVEZpbHRl
cj4NCiAgc3RhdGljIHZvaWQgRXhlY3V0ZShURmlsdGVyKiBmaWx0ZXIpDQog
ICAgew0KICAgIGZpbHRlci0+RXhlY3V0ZTNkKCk7DQogICAgfQ0KfTsNCg0K
DQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQovKioNCiAqIEFuIGV4YW1w
bGUgZmlsdGVyLg0KICovDQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVElucHV0LCB0
eXBlbmFtZSBUT3V0cHV0LCB1bnNpZ25lZCBsb25nIFZEaW1lbnNpb24+DQpj
bGFzcyBFeGFtcGxlRmlsdGVyDQp7DQpwdWJsaWM6DQogIHR5cGVkZWYgRXhh
bXBsZUZpbHRlcjxUSW5wdXQsIFRPdXRwdXQsIFZEaW1lbnNpb24+IFNlbGY7
DQogIC8vIC4uLi4NCiAgdm9pZCBFeGVjdXRlKHZvaWQpOw0KDQpwcml2YXRl
Og0KICAvLyBNYWtlIHN1cmUgdGhlIGZpbHRlciBkaXNwYXRjaCBjbGFzcyBj
YW4gY2FsbCB0aGUgZXhlY3V0ZSBtZXRob2RzLg0KICBmcmllbmQgRmlsdGVy
RGlzcGF0Y2g8VkRpbWVuc2lvbj47DQogIHZvaWQgRXhlY3V0ZU5kKHZvaWQp
Ow0KICB2b2lkIEV4ZWN1dGUzZCh2b2lkKTsNCiAgdm9pZCBFeGVjdXRlMmQo
dm9pZCk7DQogIC8vIC4uLi4NCn07DQoNCg0KLyoqDQogKiBOLWRpbWVuc2lv
bmFsIGltcGxlbWVudGF0aW9uIG9mIGV4YW1wbGUgZmlsdGVyLg0KICovDQp0
ZW1wbGF0ZSA8dHlwZW5hbWUgVElucHV0LCB0eXBlbmFtZSBUT3V0cHV0LCB1
bnNpZ25lZCBsb25nIFZEaW1lbnNpb24+DQp2b2lkIEV4YW1wbGVGaWx0ZXI8
VElucHV0LCBUT3V0cHV0LCBWRGltZW5zaW9uPg0KOjpFeGVjdXRlTmQodm9p
ZCkNCnsNCiAgc3RkOjpjb3V0IDw8ICJOLWQgdmVyc2lvbiIgPDwgc3RkOjpl
bmRsOw0KfQkgDQoNCg0KLyoqDQogKiAyLWRpbWVuc2lvbmFsIGltcGxlbWVu
dGF0aW9uIG9mIGV4YW1wbGUgZmlsdGVyLg0KICovDQp0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVElucHV0LCB0eXBlbmFtZSBUT3V0cHV0LCB1bnNpZ25lZCBsb25n
IFZEaW1lbnNpb24+DQp2b2lkIEV4YW1wbGVGaWx0ZXI8VElucHV0LCBUT3V0
cHV0LCBWRGltZW5zaW9uPg0KOjpFeGVjdXRlMmQodm9pZCkNCnsNCiAgc3Rk
Ojpjb3V0IDw8ICIyLWQgdmVyc2lvbiIgPDwgc3RkOjplbmRsOw0KfQ0KDQoN
Ci8qKg0KICogMy1kaW1lbnNpb25hbCBpbXBsZW1lbnRhdGlvbiBvZiBleGFt
cGxlIGZpbHRlci4NCiAqLw0KdGVtcGxhdGUgPHR5cGVuYW1lIFRJbnB1dCwg
dHlwZW5hbWUgVE91dHB1dCwgdW5zaWduZWQgbG9uZyBWRGltZW5zaW9uPg0K
dm9pZCBFeGFtcGxlRmlsdGVyPFRJbnB1dCwgVE91dHB1dCwgVkRpbWVuc2lv
bj4NCjo6RXhlY3V0ZTNkKHZvaWQpDQp7DQogIHN0ZDo6Y291dCA8PCAiMy1k
IHZlcnNpb24iIDw8IHN0ZDo6ZW5kbDsNCn0NCg0KDQovKioNCiAqIE1haW4g
ZXhlY3V0ZSBtZXRob2QgY2FsbGVkIGJ5IHRoZSB1c2VyIG9mIHRoZSBmaWx0
ZXIuICBJbiBJbnNpZ2h0LCB0aGlzDQogKiB3aWxsIGFjdHVhbGx5IGJlIGNh
bGxlZCBieSB0aGUgZmlsdGVyJ3MgVXBkYXRlKCkgbWV0aG9kLg0KICogVGhp
cyBqdXN0IGRlbGVnYXRlcyB0aGUgY2FsbCB0byB0aGUgZGlzcGF0Y2ggY2xh
c3MuDQogKi8NCnRlbXBsYXRlIDx0eXBlbmFtZSBUSW5wdXQsIHR5cGVuYW1l
IFRPdXRwdXQsIHVuc2lnbmVkIGxvbmcgVkRpbWVuc2lvbj4NCnZvaWQgRXhh
bXBsZUZpbHRlcjxUSW5wdXQsIFRPdXRwdXQsIFZEaW1lbnNpb24+DQo6OkV4
ZWN1dGUodm9pZCkNCnsNCiAgRmlsdGVyRGlzcGF0Y2g8VkRpbWVuc2lvbj46
OkV4ZWN1dGUodGhpcyk7DQp9DQoNCg0KDQppbnQgbWFpbih2b2lkKQ0Kew0K
ICAvLyBDcmVhdGUgYSB0ZXN0IGZpbHRlciBmb3IgZWFjaCBkaW1lbnNpb25h
bGl0eS4NCiAgRXhhbXBsZUZpbHRlcjxpbnQsIGNoYXIsIDQ+IGZpbHRlcjRk
Ow0KICBFeGFtcGxlRmlsdGVyPGludCwgY2hhciwgMz4gZmlsdGVyM2Q7DQog
IEV4YW1wbGVGaWx0ZXI8aW50LCBjaGFyLCAyPiBmaWx0ZXIyZDsNCg0KICAv
LyBTZWUgaWYgdGhleSBlYWNoIGV4ZWN1dGUgY29ycmVjdGx5Lg0KICBmaWx0
ZXI0ZC5FeGVjdXRlKCk7ICAvLyBPbmx5IGluc3RhbnRpYXRlcyBFeGFtcGxl
RmlsdGVyOjpFeGVjdXRlTmQoKQ0KICBmaWx0ZXIzZC5FeGVjdXRlKCk7ICAv
LyBPbmx5IGluc3RhbnRpYXRlcyBFeGFtcGxlRmlsdGVyOjpFeGVjdXRlM2Qo
KQ0KICBmaWx0ZXIyZC5FeGVjdXRlKCk7ICAvLyBPbmx5IGluc3RhbnRpYXRl
cyBFeGFtcGxlRmlsdGVyOjpFeGVjdXRlMmQoKQ0KICANCiAgcmV0dXJuIDA7
DQp9DQoNCg==
---1463811583-366643265-980548774=:20114--