1) implemented noDefaultMethods. See effective C++ Item 6. There it is called Uncopyable

2) implemented Lock. See effective C++ item 14.
     This is as easy to use as Java synchronize.
3) wrapper on top of std::string. All usage of string in pvData is one of:
      String - Just a std::string
     StringBuilder - Used where StringBuilder is used in Java
     StringConst - Just a "std::string const". This is used wherever String is used in Java
     StringConstArray - Just like a String[] in Java.
4) The reference counting (incReferenceCount and decReferenceCount) are now private. It is completely handled by the implenentaion.
    NO code that uses pvData needs even know about reference counting.
This commit is contained in:
Marty Kraimer
2010-09-27 08:33:10 -04:00
parent dd6ecf9bec
commit f6c9b0eea3
26 changed files with 377 additions and 522 deletions

View File

@@ -18,45 +18,45 @@ int main(int argc,char *argv[])
bool value = ScalarTypeFunc::isNumeric(scalarType);
printf("isNumeric %s\n",(value ? "true" : "false"));
std::string* myString= new std::string("type ");
TypeFunc::toString(myString,type);
*myString += " scalarType ";
ScalarTypeFunc::toString(myString,scalarType);
printf("%s\n",myString->c_str());
String myString("type ");
TypeFunc::toString(&myString,type);
myString += " scalarType ";
ScalarTypeFunc::toString(&myString,scalarType);
printf("%s\n",myString.c_str());
FieldCreate * pfieldCreate = getFieldCreate();
std::string valueName("value");
ScalarConstPtr pscalar = pfieldCreate->createScalar(&valueName,scalarType);
StringConst valueName("value");
ScalarConstPtr pscalar = pfieldCreate->createScalar(valueName,scalarType);
type = pscalar->getType();
myString->clear();
*myString += "type ";
TypeFunc::toString(myString,type);
printf("%s\n",myString->c_str());
myString->clear();
*myString += "fieldName ";
StringConstPtr pfieldName = pscalar->getFieldName();
*myString += *pfieldName;
printf("%s\n",myString->c_str());
myString->clear();
pscalar->toString(myString);
printf("%s\n",myString->c_str());
ScalarArrayConstPtr pscalarArray = pfieldCreate->createScalarArray(&valueName,pvString);
myString->clear();
pscalarArray->toString(myString);
printf("%s\n",myString->c_str());
myString.clear();
myString += "type ";
TypeFunc::toString(&myString,type);
printf("%s\n",myString.c_str());
myString.clear();
myString += "fieldName ";
StringConst fieldName = pscalar->getFieldName();
myString += fieldName;
printf("%s\n",myString.c_str());
myString.clear();
pscalar->toString(&myString);
printf("%s\n",myString.c_str());
ScalarArrayConstPtr pscalarArray = pfieldCreate->createScalarArray(valueName,pvString);
myString.clear();
pscalarArray->toString(&myString);
printf("%s\n",myString.c_str());
int numberFields = 2;
FieldConstPtr fields[numberFields];
std::string name0("high");
std::string name1("low");
fields[0] = pfieldCreate->createScalar(&name0,pvDouble);
fields[1] = pfieldCreate->createScalar(&name1,pvDouble);
StringConst name0("high");
StringConst name1("low");
fields[0] = pfieldCreate->createScalar(name0,pvDouble);
fields[1] = pfieldCreate->createScalar(name1,pvDouble);
StructureConstPtr pstructure = pfieldCreate->createStructure(
&valueName,numberFields,fields);
myString->clear();
pstructure->toString(myString);
printf("%s\n",myString->c_str());
valueName,numberFields,fields);
myString.clear();
pstructure->toString(&myString);
printf("%s\n",myString.c_str());
FieldConstPtr pfield = pstructure;
myString->clear();
pfield->toString(myString);
printf("as Field\n%s/n",myString->c_str());
myString.clear();
pfield->toString(&myString);
printf("as Field\n%s/n",myString.c_str());
return(0);
}