factory methods avoid creating unnecessary temporaries

Avoid some ref. counter activity (still have global mutex...)
This commit is contained in:
Michael Davidsaver
2017-09-30 11:09:52 -05:00
parent 6f2cae95e1
commit 406b163bcc
6 changed files with 15 additions and 23 deletions
+1 -5
View File
@@ -1418,7 +1418,7 @@ FieldConstPtr FieldCreate::deserialize(ByteBuffer* buffer, DeserializableControl
}
// TODO replace with non-locking singleton pattern
FieldCreatePtr FieldCreate::getFieldCreate()
const FieldCreatePtr& FieldCreate::getFieldCreate()
{
LOCAL_STATIC_LOCK;
static FieldCreatePtr fieldCreate;
@@ -1456,10 +1456,6 @@ FieldCreate::FieldCreate()
variantUnionArray = sua;
}
FieldCreatePtr getFieldCreate() {
return FieldCreate::getFieldCreate();
}
}}
namespace std{
+1 -5
View File
@@ -602,7 +602,7 @@ PVUnionPtr PVDataCreate::createPVUnion(PVUnionPtr const & unionToClone)
// TODO not thread-safe (local static initializers)
// TODO replace with non-locking singleton pattern
PVDataCreatePtr PVDataCreate::getPVDataCreate()
const PVDataCreatePtr& PVDataCreate::getPVDataCreate()
{
static PVDataCreatePtr pvDataCreate;
static Mutex mutex;
@@ -615,10 +615,6 @@ PVDataCreatePtr PVDataCreate::getPVDataCreate()
return pvDataCreate;
}
PVDataCreatePtr getPVDataCreate() {
return PVDataCreate::getPVDataCreate();
}
}}
namespace std{
+1 -7
View File
@@ -644,7 +644,7 @@ StructureConstPtr StandardField::enumeratedAlarm()
return enumeratedAlarmField;
}
StandardFieldPtr StandardField::getStandardField()
const StandardFieldPtr &StandardField::getStandardField()
{
static StandardFieldPtr standardFieldCreate;
static Mutex mutex;
@@ -658,10 +658,4 @@ StandardFieldPtr StandardField::getStandardField()
return standardFieldCreate;
}
StandardFieldPtr getStandardField() {
return StandardField::getStandardField();
}
}}
+4 -2
View File
@@ -1484,7 +1484,7 @@ public:
* get the singleton
* @return The PVDataCreate implementation
*/
static PVDataCreatePtr getPVDataCreate();
static const PVDataCreatePtr &getPVDataCreate();
/**
* Create a PVField using given Field introspection data.
@@ -1650,7 +1650,9 @@ private:
*
* @ingroup pvcontainer
*/
epicsShareExtern PVDataCreatePtr getPVDataCreate();
FORCE_INLINE const PVDataCreatePtr& getPVDataCreate() {
return PVDataCreate::getPVDataCreate();
}
bool epicsShareExtern operator==(const PVField&, const PVField&);
+4 -2
View File
@@ -1060,7 +1060,7 @@ private:
*/
class epicsShareClass FieldCreate {
public:
static FieldCreatePtr getFieldCreate();
static const FieldCreatePtr &getFieldCreate();
/**
* Create a new instance of in-line @c Field builder.
* @return a new instance of a @c FieldBuilder.
@@ -1214,7 +1214,9 @@ private:
* Get the single class that implements FieldCreate,
* @return The fieldCreate factory.
*/
epicsShareExtern FieldCreatePtr getFieldCreate();
FORCE_INLINE const FieldCreatePtr& getFieldCreate() {
return FieldCreate::getFieldCreate();
}
/** Define a compile time mapping from
* type to enum value.
+4 -2
View File
@@ -66,7 +66,7 @@ public:
* getStandardField returns the singleton.
* @return Shared pointer to StandardField.
*/
static StandardFieldPtr getStandardField();
static const StandardFieldPtr& getStandardField();
~StandardField();
/** Create a structure that has a scalar value field.
* @param type The type.
@@ -250,7 +250,9 @@ private:
//friend StandardFieldPtr getStandardField();
};
epicsShareExtern StandardFieldPtr getStandardField();
FORCE_INLINE const StandardFieldPtr& getStandardField() {
return StandardField::getStandardField();
}
}}
#endif /* STANDARDFIELD_H */