mrfioc2  2.3.0
devObjString.cpp
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2011 Brookhaven Science Associates, as Operator of
3 * Brookhaven National Laboratory.
4 * mrfioc2 is distributed subject to a Software License Agreement found
5 * in file LICENSE that is included with this distribution.
6 \*************************************************************************/
7 /*
8  * Author: Michael Davidsaver <mdavidsaver@gmail.com>
9  */
10 #ifdef _WIN32
11  #define NOMINMAX
12  #include <algorithm>
13 #endif
14 
15 
16 #include <stringoutRecord.h>
17 #include <stringinRecord.h>
18 
19 #include "devObj.h"
20 
21 using namespace mrf;
22 
23 /************** stringin *************/
24 
25 static long read_string(stringinRecord* prec)
26 {
27 if (!prec->dpvt) {(void)recGblSetSevr(prec, COMM_ALARM, INVALID_ALARM); return -1; }
28 CurrentRecord cur(prec);
29 try {
31 
32  std::string s;
33  {
34  scopedLock<mrf::Object> g(*priv->O);
35  s = priv->P->get();
36  }
37 
38  size_t len = std::min(NELEMENTS(prec->val)-1, s.size());
39 
40  memcpy(prec->val, s.c_str(), len);
41  prec->val[len]=0;
42 
43  return 0;
44 }CATCH(S_dev_badArgument)
45 }
46 
47 OBJECT_DSET(SIFromString,
48  (&add_record_inp<stringinRecord,std::string>),
49  &del_record_property,
50  &init_record_empty,
51  &read_string,
52  NULL);
53 
54 /************ stringout *********/
55 
56 static long write_string(stringoutRecord* prec)
57 {
58 if (!prec->dpvt) {(void)recGblSetSevr(prec, COMM_ALARM, INVALID_ALARM); return -1; }
59 CurrentRecord cur(prec);
60 try {
61  addr<std::string> *priv=(addr<std::string>*)prec->dpvt;
62 
63  {
64  scopedLock<mrf::Object> g(*priv->O);
65  priv->P->set(prec->val);
66  }
67 
68  return 0;
69 }CATCH(S_dev_badArgument)
70 }
71 
72 OBJECT_DSET(SOFromString,
73  (&add_record_out<stringoutRecord,std::string>),
74  &del_record_property,
75  &init_record_empty,
76  &write_string,
77  NULL);
78 
79 #include <epicsExport.h>
80 extern "C" {
81  OBJECT_DSET_EXPORT(SIFromString);
82  OBJECT_DSET_EXPORT(SOFromString);
83 }
OBJECT_DSET_EXPORT(SIFromString)
Definition: devObj.h:97
mrf::Object * O
Definition: devObj.h:90
OBJECT_DSET(SIFromString,(&add_record_inp< stringinRecord, std::string >), &del_record_property, &init_record_empty, &read_string, NULL)
mrf::auto_ptr< mrf::property< T > > P
Definition: devObj.h:98
#define CATCH(RET)
Definition: devObj.h:31
Definition: flash.cpp:23