summaryrefslogtreecommitdiff
path: root/storage/connect/valblk.h
diff options
context:
space:
mode:
authorOlivier Bertrand <bertrandop@gmail.com>2013-03-01 22:23:40 +0100
committerOlivier Bertrand <bertrandop@gmail.com>2013-03-01 22:23:40 +0100
commit63798ef4a51c711cd750674fe853ac2fd51a0e96 (patch)
tree0687184df7edd323e8e99babccf100ddf7f2754b /storage/connect/valblk.h
parentcdf3606b384b434fbadae0751f9b4024de8bf177 (diff)
downloadmariadb-git-63798ef4a51c711cd750674fe853ac2fd51a0e96.tar.gz
- Rewrite some VALBLK classes as templates
- Correct typo initializing datm in DTVAL::MakeDate as {0,0,0,2,0,70,0,0,0} instead of {0,0,0,1,0,70,0,0,0} modified: storage/connect/valblk.cpp storage/connect/valblk.h storage/connect/value.cpp storage/connect/value.h
Diffstat (limited to 'storage/connect/valblk.h')
-rw-r--r--storage/connect/valblk.h112
1 files changed, 70 insertions, 42 deletions
diff --git a/storage/connect/valblk.h b/storage/connect/valblk.h
index adcc7835dee..32bc2135935 100644
--- a/storage/connect/valblk.h
+++ b/storage/connect/valblk.h
@@ -1,5 +1,5 @@
/*************** Valblk H Declares Source Code File (.H) ***************/
-/* Name: VALBLK.H Version 1.7 */
+/* Name: VALBLK.H Version 1.8 */
/* */
/* (C) Copyright to the author Olivier BERTRAND 2005-2013 */
/* */
@@ -19,6 +19,7 @@
/* Utility used to allocate value blocks. */
/***********************************************************************/
DllExport PVBLK AllocValBlock(PGLOBAL, void*, int, int, int, int, bool, bool);
+const char *GetFmt(int type);
/***********************************************************************/
/* Class VALBLK represent a base class for variable blocks. */
@@ -59,6 +60,7 @@ class VALBLK : public BLOCK {
virtual void SetValue(short sval, int n) {assert(false);}
virtual void SetValue(int lval, int n) {assert(false);}
virtual void SetValue(longlong lval, int n) {assert(false);}
+ virtual void SetValue(double fval, int n) {assert(false);}
virtual void SetValue(PSZ sp, int n) {assert(false);}
virtual void SetValue(PVAL valp, int n) = 0;
virtual void SetValue(PVBLK pv, int n1, int n2) = 0;
@@ -78,24 +80,74 @@ class VALBLK : public BLOCK {
bool Locate(PVAL vp, int& i);
protected:
-#if defined(_DEBUG) || defined(DEBTRACE)
void ChkIndx(int n);
- void ChkPrm(PVAL v, int n);
void ChkTyp(PVAL v);
void ChkTyp(PVBLK vb);
-#endif // _DEBUG) || DEBTRACE
// Members
PGLOBAL Global; // Used for messages and allocation
char *To_Nulls; // Null values array
void *Blkp; // To value block
- int Type; // Type of individual values
- int Nval; // Max number of values in block
bool Check; // If true SetValue types must match
bool Nullable; // True if values can be null
+ int Type; // Type of individual values
+ int Nval; // Max number of values in block
+ int Prec; // Precision of float values
}; // end of class VALBLK
/***********************************************************************/
+/* Class TYPBLK: represents a block of typed values. */
+/***********************************************************************/
+template <class TYPE>
+class TYPBLK : public VALBLK {
+ public:
+ // Constructors
+ TYPBLK(void *mp, int size, int type);
+ TYPBLK(void *mp, int size, int prec, int type);
+
+ // Implementation
+ virtual void Init(PGLOBAL g, bool check);
+ virtual int GetVlen(void) {return sizeof(int);}
+//virtual PSZ GetCharValue(int n);
+ virtual short GetShortValue(int n) {return (short)Typp[n];}
+ virtual int GetIntValue(int n) {return (int)Typp[n];}
+ virtual longlong GetBigintValue(int n) {return (longlong)Typp[n];}
+ virtual double GetFloatValue(int n) {return (double)Typp[n];}
+ virtual void Reset(int n) {Typp[n] = 0;}
+
+ // Methods
+ virtual void SetValue(PSZ sp, int n);
+ virtual void SetValue(short sval, int n)
+ {Typp[n] = (TYPE)sval; SetNull(n, false);}
+ virtual void SetValue(int lval, int n)
+ {Typp[n] = (TYPE)lval; SetNull(n, false);}
+ virtual void SetValue(longlong lval, int n)
+ {Typp[n] = (TYPE)lval; SetNull(n, false);}
+ virtual void SetValue(double fval, int n)
+ {Typp[n] = (TYPE)fval; SetNull(n, false);}
+ virtual void SetValue(PVAL valp, int n);
+ virtual void SetValue(PVBLK pv, int n1, int n2);
+//virtual void SetValues(PVBLK pv, int k, int n);
+ virtual void Move(int i, int j);
+ virtual int CompVal(PVAL vp, int n);
+ virtual int CompVal(int i1, int i2);
+ virtual void *GetValPtr(int n);
+ virtual void *GetValPtrEx(int n);
+ virtual int Find(PVAL vp);
+ virtual int GetMaxLength(void);
+
+ protected:
+ // Specialized functions
+ TYPE GetTypedValue(PVAL vp);
+ TYPE GetTypedValue(PVBLK blk, int n);
+ TYPE GetTypedValue(PSZ s);
+
+ // Members
+ TYPE* const &Typp;
+ const char *Fmt;
+ }; // end of class TYPBLK
+
+/***********************************************************************/
/* Class CHRBLK: represent a block of fixed length strings. */
/***********************************************************************/
class CHRBLK : public VALBLK {
@@ -119,11 +171,7 @@ class CHRBLK : public VALBLK {
virtual void SetValue(PSZ sp, int n);
virtual void SetValue(PVAL valp, int n);
virtual void SetValue(PVBLK pv, int n1, int n2);
-#if 0
- virtual void SetMin(PVAL valp, int n);
- virtual void SetMax(PVAL valp, int n);
- virtual void SetValues(PVBLK pv, int k, int n);
-#endif // 0
+//virtual void SetValues(PVBLK pv, int k, int n);
virtual void Move(int i, int j);
virtual int CompVal(PVAL vp, int n);
virtual int CompVal(int i1, int i2);
@@ -168,11 +216,7 @@ class STRBLK : public VALBLK {
virtual void SetValue(PSZ sp, int n);
virtual void SetValue(PVAL valp, int n);
virtual void SetValue(PVBLK pv, int n1, int n2);
-#if 0
- virtual void SetMin(PVAL valp, int n);
- virtual void SetMax(PVAL valp, int n);
- virtual void SetValues(PVBLK pv, int k, int n);
-#endif // 0
+//virtual void SetValues(PVBLK pv, int k, int n);
virtual void Move(int i, int j);
virtual int CompVal(PVAL vp, int n);
virtual int CompVal(int i1, int i2);
@@ -186,8 +230,9 @@ class STRBLK : public VALBLK {
PSZ* const &Strp; // Pointer to PSZ buffer
}; // end of class STRBLK
+#if 0
/***********************************************************************/
-/* Class SHRBLK: represents a block of int integer values. */
+/* Class SHRBLK: represents a block of short integer values. */
/***********************************************************************/
class SHRBLK : public VALBLK {
public:
@@ -214,12 +259,7 @@ class SHRBLK : public VALBLK {
{Shrp[n] = (short)lval; SetNull(n, false);}
virtual void SetValue(PVAL valp, int n);
virtual void SetValue(PVBLK pv, int n1, int n2);
-#if 0
- virtual void SetMin(PVAL valp, int n);
- virtual void SetMax(PVAL valp, int n);
- virtual void SetValues(PVBLK pv, int k, int n);
- virtual void AddMinus1(PVBLK pv, int n1, int n2);
-#endif // 0
+//virtual void SetValues(PVBLK pv, int k, int n);
virtual void Move(int i, int j);
virtual int CompVal(PVAL vp, int n);
virtual int CompVal(int i1, int i2);
@@ -261,12 +301,7 @@ class LNGBLK : public VALBLK {
{Lngp[n] = (int)lval; SetNull(n, false);}
virtual void SetValue(PVAL valp, int n);
virtual void SetValue(PVBLK pv, int n1, int n2);
-#if 0
- virtual void SetMin(PVAL valp, int n);
- virtual void SetMax(PVAL valp, int n);
- virtual void SetValues(PVBLK pv, int k, int n);
- virtual void AddMinus1(PVBLK pv, int n1, int n2);
-#endif // 0
+//virtual void SetValues(PVBLK pv, int k, int n);
virtual void Move(int i, int j);
virtual int CompVal(PVAL vp, int n);
virtual int CompVal(int i1, int i2);
@@ -279,11 +314,12 @@ class LNGBLK : public VALBLK {
// Members
int* const &Lngp;
}; // end of class LNGBLK
+#endif // 0
/***********************************************************************/
/* Class DATBLK: represents a block of time stamp values. */
/***********************************************************************/
-class DATBLK : public LNGBLK {
+class DATBLK : public TYPBLK<int> {
public:
// Constructor
DATBLK(void *mp, int size);
@@ -299,6 +335,7 @@ class DATBLK : public LNGBLK {
PVAL Dvalp; // Date value used to convert string
}; // end of class DATBLK
+#if 0
/***********************************************************************/
/* Class BIGBLK: represents a block of big integer values. */
/***********************************************************************/
@@ -327,12 +364,7 @@ class BIGBLK : public VALBLK {
{Lngp[n] = lval; SetNull(n, false);}
virtual void SetValue(PVAL valp, int n);
virtual void SetValue(PVBLK pv, int n1, int n2);
-#if 0
- virtual void SetMin(PVAL valp, int n);
- virtual void SetMax(PVAL valp, int n);
- virtual void SetValues(PVBLK pv, int k, int n);
- virtual void AddMinus1(PVBLK pv, int n1, int n2);
-#endif // 0
+//virtual void SetValues(PVBLK pv, int k, int n);
virtual void Move(int i, int j);
virtual int CompVal(PVAL vp, int n);
virtual int CompVal(int i1, int i2);
@@ -369,11 +401,7 @@ class DBLBLK : public VALBLK {
virtual void SetValue(PSZ sp, int n);
virtual void SetValue(PVAL valp, int n);
virtual void SetValue(PVBLK pv, int n1, int n2);
-#if 0
- virtual void SetMin(PVAL valp, int n);
- virtual void SetMax(PVAL valp, int n);
- virtual void SetValues(PVBLK pv, int k, int n);
-#endif // 0
+//virtual void SetValues(PVBLK pv, int k, int n);
virtual void Move(int i, int j);
virtual int CompVal(PVAL vp, int n);
virtual int CompVal(int i1, int i2);
@@ -385,8 +413,8 @@ class DBLBLK : public VALBLK {
protected:
// Members
double* const &Dblp;
- int Prec;
}; // end of class DBLBLK
+#endif // 0
#endif // __VALBLK__H__