87 inline Group::Group(
r_code::Mem *m) : LObject(m), CriticalSection() {
94 inline Group::Group(
r_code::SysObject *source) : LObject(source), CriticalSection() {
101 inline Group::~Group() {
106 inline bool Group::invalidate() {
108 if (LObject::invalidate())
112 std::unordered_map<uint32, P<View> >::const_iterator gv;
113 for (gv = group_views_.begin(); gv != group_views_.end(); ++gv) {
115 ((Group *)gv->second->object_)->enter();
116 ((Group *)gv->second->object_)->viewing_groups_.erase(
this);
117 ((Group *)gv->second->object_)->leave();
139 inline uint32 Group::get_upr()
const {
141 return (uint32)code(GRP_UPR).asFloat();
144 inline float32 Group::get_sln_thr()
const {
146 return code(GRP_SLN_THR).asFloat();
149 inline float32 Group::get_act_thr()
const {
151 return code(GRP_ACT_THR).asFloat();
154 inline float32 Group::get_vis_thr()
const {
156 return code(GRP_VIS_THR).asFloat();
159 inline float32 Group::get_c_sln_thr()
const {
161 return code(GRP_C_SLN_THR).asFloat();
164 inline float32 Group::get_c_act_thr()
const {
166 return code(GRP_C_ACT_THR).asFloat();
169 inline float32 Group::get_c_sln()
const {
171 return code(GRP_C_SLN).asFloat();
174 inline float32 Group::get_c_act()
const {
176 return code(GRP_C_ACT).asFloat();
179 inline void Group::mod_sln_thr(float32 value) {
182 acc_sln_thr_ += value;
185 inline void Group::set_sln_thr(float32 value) {
188 acc_sln_thr_ += value - get_sln_thr();
191 inline void Group::mod_act_thr(float32 value) {
194 acc_act_thr_ += value;
197 inline void Group::set_act_thr(float32 value) {
200 acc_act_thr_ += value - get_act_thr();
203 inline void Group::mod_vis_thr(float32 value) {
206 acc_vis_thr_ += value;
209 inline void Group::set_vis_thr(float32 value) {
212 acc_vis_thr_ += value - get_vis_thr();
215 inline void Group::mod_c_sln(float32 value) {
221 inline void Group::set_c_sln(float32 value) {
224 acc_c_sln_ += value - get_c_sln();
227 inline void Group::mod_c_act(float32 value) {
233 inline void Group::set_c_act(float32 value) {
236 acc_c_act_ += value - get_c_act();
239 inline void Group::mod_c_sln_thr(float32 value) {
241 ++c_sln_thr_changes_;
242 acc_c_sln_thr_ += value;
245 inline void Group::set_c_sln_thr(float32 value) {
247 ++c_sln_thr_changes_;
248 acc_c_sln_thr_ += value - get_c_sln_thr();
251 inline void Group::mod_c_act_thr(float32 value) {
253 ++c_act_thr_changes_;
254 acc_c_act_thr_ += value;
257 inline void Group::set_c_act_thr(float32 value) {
259 ++c_act_thr_changes_;
260 acc_c_act_thr_ += value - get_c_act_thr();
263 inline float32 Group::get_sln_chg_thr() {
265 return code(GRP_SLN_CHG_THR).asFloat();
268 inline float32 Group::get_sln_chg_prd() {
270 return code(GRP_SLN_CHG_PRD).asFloat();
273 inline float32 Group::get_act_chg_thr() {
275 return code(GRP_ACT_CHG_THR).asFloat();
278 inline float32 Group::get_act_chg_prd() {
280 return code(GRP_ACT_CHG_PRD).asFloat();
283 inline float32 Group::get_avg_sln() {
285 return code(GRP_AVG_SLN).asFloat();
288 inline float32 Group::get_high_sln() {
290 return code(GRP_HIGH_SLN).asFloat();
293 inline float32 Group::get_low_sln() {
295 return code(GRP_LOW_SLN).asFloat();
298 inline float32 Group::get_avg_act() {
300 return code(GRP_AVG_ACT).asFloat();
303 inline float32 Group::get_high_act() {
305 return code(GRP_HIGH_ACT).asFloat();
308 inline float32 Group::get_low_act() {
310 return code(GRP_LOW_ACT).asFloat();
313 inline float32 Group::get_high_sln_thr() {
315 return code(GRP_HIGH_SLN_THR).asFloat();
318 inline float32 Group::get_low_sln_thr() {
320 return code(GRP_LOW_SLN_THR).asFloat();
323 inline float32 Group::get_sln_ntf_prd() {
325 return code(GRP_SLN_NTF_PRD).asFloat();
328 inline float32 Group::get_high_act_thr() {
330 return code(GRP_HIGH_ACT_THR).asFloat();
333 inline float32 Group::get_low_act_thr() {
335 return code(GRP_LOW_ACT_THR).asFloat();
338 inline float32 Group::get_act_ntf_prd() {
340 return code(GRP_ACT_NTF_PRD).asFloat();
343 inline float32 Group::get_low_res_thr() {
345 return code(GRP_LOW_RES_THR).asFloat();
348 inline float32 Group::get_ntf_new() {
350 return code(GRP_NTF_NEW).asFloat();
353 inline uint16 Group::get_ntf_grp_count() {
355 return code(code(GRP_NTF_GRPS).asIndex()).getAtomCount();
358 inline Group *Group::get_ntf_grp(uint16 i) {
360 if (code(code(GRP_NTF_GRPS).asIndex() + i).readsAsNil())
363 uint16 index = code(code(GRP_NTF_GRPS).asIndex() + i).asIndex();
364 return (Group *)get_reference(index);
367 inline void Group::_mod_0_positive(uint16 member_index, float32 value) {
369 float32 v = code(member_index).asFloat() + value;
372 code(member_index) = Atom::Float(v);
375 inline void Group::_mod_0_plus1(uint16 member_index, float32 value) {
377 float32 v = code(member_index).asFloat() + value;
382 code(member_index) = Atom::Float(v);
385 inline void Group::_mod_minus1_plus1(uint16 member_index, float32 value) {
387 float32 v = code(member_index).asFloat() + value;
392 code(member_index) = Atom::Float(v);
395 inline void Group::_set_0_positive(uint16 member_index, float32 value) {
398 code(member_index) = Atom::Float(0);
400 code(member_index) = Atom::Float(value);
403 inline void Group::_set_0_plus1(uint16 member_index, float32 value) {
406 code(member_index) = Atom::Float(0);
408 code(member_index) = Atom::Float(1);
410 code(member_index) = Atom::Float(value);
413 inline void Group::_set_minus1_plus1(uint16 member_index, float32 value) {
416 code(member_index) = Atom::Float(-1);
418 code(member_index) = Atom::Float(1);
420 code(member_index) = Atom::Float(value);
423 inline void Group::_set_0_1(uint16 member_index, float32 value) {
425 if (value == 0 || value == 1)
426 code(member_index) = Atom::Float(value);
429 inline void Group::mod(uint16 member_index, float32 value) {
431 switch (member_index) {
434 case GRP_SLN_CHG_PRD:
435 case GRP_ACT_CHG_PRD:
436 case GRP_SLN_NTF_PRD:
437 case GRP_ACT_NTF_PRD:
438 _mod_0_positive(member_index, value);
453 mod_c_sln_thr(value);
459 mod_c_act_thr(value);
462 _mod_minus1_plus1(member_index, value);
464 case GRP_SLN_CHG_THR:
465 case GRP_ACT_CHG_THR:
466 case GRP_HIGH_SLN_THR:
467 case GRP_LOW_SLN_THR:
468 case GRP_HIGH_ACT_THR:
469 case GRP_LOW_ACT_THR:
470 case GRP_LOW_RES_THR:
471 _mod_0_plus1(member_index, value);
476 inline void Group::set(uint16 member_index, float32 value) {
478 switch (member_index) {
481 case GRP_SLN_CHG_PRD:
482 case GRP_ACT_CHG_PRD:
483 case GRP_SLN_NTF_PRD:
484 case GRP_ACT_NTF_PRD:
485 _set_0_positive(member_index, value);
500 set_c_sln_thr(value);
506 set_c_act_thr(value);
509 _set_minus1_plus1(member_index, value);
511 case GRP_SLN_CHG_THR:
512 case GRP_ACT_CHG_THR:
513 case GRP_HIGH_SLN_THR:
514 case GRP_LOW_SLN_THR:
515 case GRP_HIGH_ACT_THR:
516 case GRP_LOW_ACT_THR:
517 case GRP_LOW_RES_THR:
518 _set_0_plus1(member_index, value);
523 _set_0_1(member_index, value);