00001
00006
00007
00008 #ifndef IbMStringFieldH
00009 #define IbMStringFieldH
00010 namespace fbwrap
00011 {
00012
00013
00014 using std::string;
00015
00017 class FBwStringField : public FBwField
00018 {
00019 char *svalue;
00020 string value;
00021 short pLen;
00022 bool Varying;
00023 bool SpaceFill;
00024 bool ValueTrim;
00025 protected:
00026 void *GetPtr()
00027 {
00028 if( svalue == NULL )
00029 svalue = new char[256];
00030 return svalue;
00031 }
00032 virtual void bCopy(const FBwField *fld)
00033 {
00034 value = fld->AsString();
00035 }
00037 virtual int ByteSize()
00038 {
00039 return pLen+3;
00040 }
00041 public:
00042
00044
00049 FBwStringField(string pName, short MxLen=127, bool pVarying=false);
00051 FBwStringField(const FBwStringField &f);
00053 virtual std::ostream &DisplayText(std::ostream &o) const;
00055 virtual string AsString() const;
00057 virtual long AsInteger() const;
00059 virtual void SetAsString(const string &pvalue)
00060 {
00061 ClearNull();
00062 value = pvalue;
00063 }
00064 virtual void ConvertStoV();
00065 virtual void ConvertVtoS();
00066 virtual void BindPtr(char **p)
00067 {
00068 *p=svalue;
00069 }
00070 string &Value()
00071 {
00072 return value;
00073 }
00075 virtual ~FBwStringField()
00076 {
00077 delete[] svalue;
00078 }
00080 bool IsVarying()
00081 {
00082 return Varying;
00083 }
00085 short MaxLen()
00086 {
00087 return pLen;
00088 }
00090 void SetMaxLen(short mxLen)
00091 {
00092 if( pLen < mxLen )
00093 {
00094 delete[] svalue;
00095 svalue = new char[mxLen];
00096 }
00097 pLen=mxLen;
00098 }
00100
00103 void SetFill(bool v=true)
00104 {
00105 SpaceFill=v;
00106 }
00108 void SetValueTrim(bool how=true)
00109 {
00110 ValueTrim=how;
00111 }
00113 FBwField *Clone() const
00114 {
00115 return new FBwStringField(*this);
00116 }
00118 virtual short GetLen()
00119 {
00120 return pLen-1;
00121 }
00122 };
00123
00124
00125 }
00126 #endif