Reference for Simple Datatype Classes
Caché uses a set of special classes for literal datatypes (containing simple data such as strings or numbers). See Data Types in Using Caché Objects for information about how datatype classes differ from standard object classes.
Every Caché data type is mapped to an appropriate C++ object, such as d_int or d_string. If a literal type instance is not null, it is possible to convert it to a standard C++ type: d_int can be converted to int, d_string to std::string or std::wstring, d_time, d_date, and d_timestamp to tm. The C++ object that represents a Caché datatype is determined via the CLIENTDATATYPE keyword value of the datatype class.
All simple types have:
-
Conversion operators that makes it possible to use them as C++ types. For example, d_int can be converted to int and d_double to double.
-
A value() method (for use in templates).
-
make_null() and is_null() methods.
-
An overloaded "<<" operator for output streams.
-
An overloaded "=" operator.
The following datatypes are supported:
-
Numeric — d_bool, d_int, d_double, d_numeric, d_decimal, and d_currency.
-
Binary — d_binary, d_longbinary, d_oid, d_status, d_string, and d_list.
-
Wide Strings — d_wstring, d_id, d_longwstring, and d_longstring.
-
Date and Time — d_date, d_timestamp, and d_timestamp.
Numeric Classes
These are simple numbers.
-
d_bool — %Library.BooleanOpens in a new tab corresponds to CLIENTDATATYPE keyword INTEGER.
-
d_int — %Library.IntegerOpens in a new tab corresponds to keyword INT or LONG.
-
d_double — %Library.DoubleOpens in a new tab corresponds to keyword DOUBLE.
-
d_numeric — %Library.NumericOpens in a new tab corresponds to keyword NUMERIC. d_numeric is a typedef of d_double.
-
d_decimal — %Library.DecimalOpens in a new tab corresponds to keyword DECIMAL.
-
d_currency — %Library.CurrencyOpens in a new tab corresponds to keyword CURRENCY.
Class InterSystems::d_int
A d_int can be converted to int and be assigned an int. It doesn't have other overloaded operators. The intended usage is to get the int value and assign a changed value back to the object if the object should be changed. For example,
d_int t = 2;
d_int q = int(t) + 2;
in many cases like this one the conversion is implicit, so the second line can be just
d_int q = t + 2;
but there are cases where it is necessary.
Binary Classes
These are classes containing variable-length binary data.
-
d_binary — %Library.BinaryOpens in a new tab corresponds to CLIENTDATATYPE keyword BINARY.
-
d_longbinary —
-
d_oid — A complete Object ID. corresponds to keyword OID. d_oid is a typedef of d_binary.
-
d_status — %Library.StatusOpens in a new tab corresponds to keyword STATUS.
-
d_string — %Library.StringOpens in a new tab corresponds to keyword VARCHAR or LONG VARCHAR.
-
d_list — %Library.ListOpens in a new tab corresponds to Caché $list structure.
Class InterSystems::d_binary
A d_binary holds binary data. d_oid is a typedef of d_binary that represents a complete Object ID.
-
d_binary constructors
-
No parameters.
d_binary();
-
From null terminated string
d_binary(const char* cstr);
-
From std::string
d_binary(const std::string& s);
-
From string of size sz, starting at cstr
d_binary(const char* cstr, int sz);
-
-
std::string() operator — Return the data as std::string
operator std::string() const;
-
Comparison operators — Compare to another d_binary
bool operator==(const d_binary& t); bool operator!=(const d_binary& t);
-
append_bin() — Append binary data
void append_bin(const char* buf, byte_size_t size);
-
assign() — Assign binary data
void assign(const char* buf, byte_size_t size);
-
get_buf() — Get the address of the binary buffer
const char* get_buf() const;
-
get_size() — Get the size of the binary buffer
long get_size() const;
Class InterSystems::d_status
A d_status encapsulates %Library.StatusOpens in a new tab. It should be used only for interpreting a status from the server.
-
operator int() — Convert to int with the value of the error code
operator int() const;
-
get_code() — Get the error code (returns 0 if no error)
int get_code() const;
-
get_msg() — Get the error message
const d_string& get_msg() const;
-
get_from_srv() — Analyze the status on the server with potential translation of the message to language lang (if it's a system error)
void get_from_srv(Database* db, const char* lang = "", Db_err* err = 0);
-
throw_err() — Throw a Db_err with the code and the message of the error
void throw_err() const;
Class InterSystems::d_string
A d_string holds string data. It differs from d_binary in that it automatically converts data when necessary and also provides conversion methods.
-
d_string constructors
-
No parameters.
d_string();
-
From null terminated string or wide null terminated string
d_string(const char* cstr); d_string(const wchar_t* cstr);
-
From std::string or std::wstring
d_string(const std::string& s); d_string(const std::wstring& s);
-
From string or wide string of size sz, starting at cstr
d_string(const char* cstr, int sz); d_string(const wchar_t* cstr, int sz);
-
-
is_unicode() — Test whether the string is in unicode format
bool is_unicode() const;
-
to_mb() — Convert to multibyte.
-
in buffer buf of capacity cap, return the number of bytes put in buf.
byte_size_t to_mb(char* buf, char_size_t cap) const;
-
Convert to multibyte in place
void to_mb();
-
-
to_uni() — Convert to unicode.
-
Store the result in buffer buf of capacity cap, return the number of characters put in buf
char_size_t to_uni(wchar_t* buf, char_size_t cap) const;
-
Convert to unicode in place
void to_uni();
-
-
std::string() operator — Convert to std::string or std::wstring.
operator std::string() const; operator std::wstring() const;
-
Comparison operators — Compare to another d_string
bool operator==(const d_string& val) const; bool operator!=(const d_string& val) const; bool operator<(const d_string& val) const;
-
assign()
-
From null terminated string or wide null terminated string.
void assign(const char* buf); void assign(const wchar_t* buf);
-
From string or wide string of size sz, starting at cstr
void assign(const char* buf, char_size_t size); void assign(const wchar_t* buf, char_size_t size);
-
Class InterSystems::d_list
A d_list object is a C++ implementation of the $list structure in Caché. In addition to its standard methods, the d_list class has a set of static methods that allow you to extract data from a buffer containing a $list without copying it into a d_list object.
d_list methods
A d_list object is essentially a forward iterator, but it also provides methods for inserting, deleting and replacing an element at the current position, as well as other methods that work with $list as a whole. A d_list position is 0 based. Since $list is stored in contiguous memory, any operation that changes a $list element may cause a dynamic memory reallocation or copying, which may be expensive.
-
d_list()
d_list(const char* buf, byte_size_t size)
-
append_elem()
void append_elem(__int64 val); void append_elem(double val); void append_elem(const d_string& val); void append_elem(const d_binary& val); void append_elem(const wchar_t* p, char_size_t size); void append_elem(const char* p, char_size_t size);
-
append_elem_null()
void append_elem_null();
-
at_end()
bool at_end() const;
-
clear() — Delete all elements
void clear();
-
count() — Count the number of elements
int count();
-
del_elem() — Delete the current element
void del_elem();
-
elem_null()
void ins_elem_null();
-
get_elem()
void get_elem(__int64* val) const; void get_elem(double* val) const; void get_elem(d_string& val) const; void get_elem(d_binary& val) const; void get_elem(bool* is_uni, const char** p_buf, byte_size_t* p_size) const;
-
get_elem_idx() — Get the index of the current element
int get_elem_idx() const;
-
get_elem_type()
char get_elem_type() const;
-
ins_elem()
void ins_elem(__int64 val); void ins_elem(double val); void ins_elem(const d_string& val); void ins_elem(const d_binary& val); void ins_elem(const wchar_t* p, char_size_t size); void ins_elem(const char* p, char_size_t size);
-
is_elem_double()
bool is_elem_double() const;
-
is_elem_int()
bool is_elem_int() const;
-
is_elem_null()
bool is_elem_null() const;
-
is_elem_str()
bool is_elem_str() const;
-
move_to() — Change the current position to idx (0 based)
void move_to(int idx) const;
-
move_to_front() — Same as move_to(0) but optimized
void move_to_front() const;
-
next() — Similar to move_to(), but optimized for moving to the next element
void next() const;
-
reset() — Reset the buffer
void reset(const char* buf, byte_size_t size);
-
set_elem()
void set_elem(__int64 val); void set_elem(double val); void set_elem(const d_string& val); void set_elem(const d_binary& val); void set_elem(const wchar_t* p, char_size_t size); void set_elem(const char* p, char_size_t size);
-
set_elem_null()
void set_elem_null();
d_list static member functions
The static member functions allow you to extract data from a buffer that is a $list without copying it into a d_list object. The interface deals with the $list element specified by the buffer. The next element starts at buffer + d_list::get_elem_size(buffer).
-
get_elem() — Get an element
-
Get an element as _int64, double, d_string, or d_binary.
static void get_elem(const char* buf, __int64* val); static void get_elem(const char* buf, double* val); static void get_elem(const char* buf, d_string& val); static void get_elem(const char* buf, d_binary& val);
-
Get an element as a pointer to the string, the string size, and find whether it's unicode or narrow
static void get_elem(const char* buf, bool* is_uni, const char** p_buf, byte_size_t* p_size);
-
-
get_elem_size() — Get element size
static byte_size_t get_elem_size(const char* buf);
-
is_elem_double() — Test whether an element is stored as double
static bool is_elem_double(const char* buf);
-
is_elem_int() — Test whether an element is stored as int
static bool is_elem_int(const char* buf);
-
is_elem_null() — Test whether an element is null
static bool is_elem_null(const char* buf);
-
is_elem_str() — Test whether an element is stored as string
static bool is_elem_str(const char* buf);
Time and Date Classes
Objects of these types can be converted to a tm structure object with all irrelevant values set to -1. They can also be assigned a tm object. The irrelevant values from the tm structure will be ignored. Interfaces of these classes differ only in constructors and assignment operators.
-
d_date — %Library.DateOpens in a new tab corresponds to CLIENTDATATYPE keyword DATE.
-
d_time — %Library.TimeOpens in a new tab corresponds to keyword TIME.
-
d_timestamp — %Library.TimeStampOpens in a new tab corresponds to keyword TIMESTAMP.
Class InterSystems::d_time
-
d_time
-
From tm
d_time(const tm& ts);
-
From ODBC structure for time
d_time(const TIME_STRUCT& t);
-
From hour, minute, second
d_time(int h, int m, int s);
-
From ODBC structure for time
d_time& operator=(const TIME_STRUCT& t);
-
Class InterSystems::d_date
-
d_date
-
From tm
d_date(const tm& ts);
-
From ODBC structure for date
d_date(const DATE_STRUCT& d);
-
From year, month, day
d_date(int y, int m, int d);
-
From ODBC structure for date
d_date& operator=(const DATE_STRUCT& d);
-
Class InterSystems::d_timestamp
-
d_timestamp
-
From tm
d_timestamp(const tm& ts);
-
From ODBC structure for timestamp
d_timestamp(const TIMESTAMP_STRUCT& ts);
-