go-hep.org/x/hep@v0.38.1/fwk/internal/fwktest/task2.go (about)

     1  // Copyright ©2017 The go-hep Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package fwktest
     6  
     7  import (
     8  	"reflect"
     9  
    10  	"go-hep.org/x/hep/fwk"
    11  )
    12  
    13  type task2 struct {
    14  	fwk.TaskBase
    15  
    16  	input  string
    17  	output string
    18  	fct    func(f int64) int64
    19  }
    20  
    21  func (tsk *task2) Configure(ctx fwk.Context) error {
    22  	var err error
    23  	msg := ctx.Msg()
    24  	msg.Infof("configure...\n")
    25  
    26  	err = tsk.DeclInPort(tsk.input, reflect.TypeOf(int64(1)))
    27  	if err != nil {
    28  		return err
    29  	}
    30  
    31  	err = tsk.DeclOutPort(tsk.output, reflect.TypeOf(int64(1)))
    32  	if err != nil {
    33  		return err
    34  	}
    35  
    36  	msg.Infof("configure... [done]\n")
    37  	return err
    38  }
    39  
    40  func (tsk *task2) StartTask(ctx fwk.Context) error {
    41  	msg := ctx.Msg()
    42  	msg.Infof("start...\n")
    43  	return nil
    44  }
    45  
    46  func (tsk *task2) StopTask(ctx fwk.Context) error {
    47  	msg := ctx.Msg()
    48  	msg.Infof("stop...\n")
    49  	return nil
    50  }
    51  
    52  func (tsk *task2) Process(ctx fwk.Context) error {
    53  	store := ctx.Store()
    54  	msg := ctx.Msg()
    55  	v, err := store.Get(tsk.input)
    56  	if err != nil {
    57  		return err
    58  	}
    59  	i := v.(int64)
    60  	o := tsk.fct(i)
    61  	err = store.Put(tsk.output, o)
    62  	if err != nil {
    63  		return err
    64  	}
    65  
    66  	msg.Infof("proc... (id=%d|%d) => [%d -> %d]\n", ctx.ID(), ctx.Slot(), i, o)
    67  	return nil
    68  }
    69  
    70  func init() {
    71  	fwk.Register(reflect.TypeOf(task2{}),
    72  		func(typ, name string, mgr fwk.App) (fwk.Component, error) {
    73  			var err error
    74  			tsk := &task2{
    75  				TaskBase: fwk.NewTask(typ, name, mgr),
    76  				input:    "ints1",
    77  				output:   "massaged_ints1",
    78  			}
    79  			tsk.fct = func(f int64) int64 {
    80  				return f * f
    81  			}
    82  
    83  			err = tsk.DeclProp("Input", &tsk.input)
    84  			if err != nil {
    85  				return nil, err
    86  			}
    87  
    88  			err = tsk.DeclProp("Output", &tsk.output)
    89  			if err != nil {
    90  				return nil, err
    91  			}
    92  
    93  			err = tsk.DeclProp("Fct", &tsk.fct)
    94  			if err != nil {
    95  				return nil, err
    96  			}
    97  
    98  			return tsk, err
    99  		},
   100  	)
   101  }