1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-24 14:48:09 +03:00
Files
mariadb/ndb/include/util/SimpleProperties.hpp
unknown 03e4b98c7b Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  mysql.com:/home/my/mysql-5.0


BitKeeper/etc/ignore:
  added mysql-test/mysql-test-run-shell
client/mysql.cc:
  Auto merged
client/mysql_upgrade.c:
  Auto merged
client/mysqlbinlog.cc:
  Auto merged
client/mysqldump.c:
  Auto merged
client/mysqltest.c:
  Auto merged
client/sql_string.cc:
  Auto merged
client/sql_string.h:
  Auto merged
extra/my_print_defaults.c:
  Auto merged
include/m_ctype.h:
  Auto merged
include/my_pthread.h:
  Auto merged
include/my_sys.h:
  Auto merged
include/my_time.h:
  Auto merged
include/mysql.h:
  Auto merged
libmysql/libmysql.c:
  Auto merged
libmysqld/lib_sql.cc:
  Auto merged
myisam/ft_boolean_search.c:
  Auto merged
myisam/mi_open.c:
  Auto merged
myisam/mi_search.c:
  Auto merged
myisam/mi_unique.c:
  Auto merged
myisam/myisampack.c:
  Auto merged
myisam/rt_index.c:
  Auto merged
myisam/sort.c:
  Auto merged
mysql-test/t/mysql.test:
  Auto merged
mysql-test/t/mysqltest.test:
  Auto merged
mysys/default.c:
  Auto merged
mysys/mf_iocache2.c:
  Auto merged
mysys/mf_keycache.c:
  Auto merged
mysys/my_bitmap.c:
  Auto merged
mysys/sha1.c:
  Auto merged
ndb/include/kernel/signaldata/ArbitSignalData.hpp:
  Auto merged
ndb/include/kernel/signaldata/DictTabInfo.hpp:
  Auto merged
ndb/include/ndbapi/NdbReceiver.hpp:
  Auto merged
ndb/include/transporter/TransporterDefinitions.hpp:
  Auto merged
ndb/include/util/InputStream.hpp:
  Auto merged
ndb/include/util/OutputStream.hpp:
  Auto merged
ndb/include/util/SimpleProperties.hpp:
  Auto merged
ndb/include/util/SocketAuthenticator.hpp:
  Auto merged
ndb/include/util/SocketServer.hpp:
  Auto merged
ndb/src/common/mgmcommon/ConfigRetriever.cpp:
  Auto merged
ndb/src/common/portlib/NdbTick.c:
  Auto merged
ndb/src/common/transporter/SHM_Transporter.cpp:
  Auto merged
ndb/src/common/transporter/TCP_Transporter.cpp:
  Auto merged
ndb/src/common/transporter/TCP_Transporter.hpp:
  Auto merged
ndb/src/common/transporter/Transporter.cpp:
  Auto merged
ndb/src/common/transporter/TransporterRegistry.cpp:
  Auto merged
ndb/src/common/util/Bitmask.cpp:
  Auto merged
ndb/src/common/util/ConfigValues.cpp:
  Auto merged
ndb/src/common/util/File.cpp:
  Auto merged
ndb/src/common/util/Properties.cpp:
  Auto merged
ndb/src/common/util/SocketClient.cpp:
  Auto merged
ndb/src/common/util/random.c:
  Auto merged
ndb/src/common/util/socket_io.cpp:
  Auto merged
ndb/src/cw/cpcd/APIService.cpp:
  Auto merged
ndb/src/cw/cpcd/main.cpp:
  Auto merged
ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp:
  Auto merged
ndb/src/kernel/blocks/dbdict/Dbdict.cpp:
  Auto merged
ndb/src/kernel/blocks/dbdict/Dbdict.hpp:
  Auto merged
ndb/src/kernel/blocks/dbdih/Dbdih.hpp:
  Auto merged
ndb/src/kernel/blocks/dblqh/Dblqh.hpp:
  Auto merged
ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
  Auto merged
ndb/src/kernel/blocks/dbtc/Dbtc.hpp:
  Auto merged
ndb/src/kernel/blocks/dbtup/Dbtup.hpp:
  Auto merged
ndb/src/kernel/blocks/dbtup/DbtupScan.cpp:
  Auto merged
ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp:
  Auto merged
ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp:
  Auto merged
ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp:
  Auto merged
ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp:
  Auto merged
ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp:
  Auto merged
ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp:
  Auto merged
ndb/src/kernel/blocks/qmgr/Qmgr.hpp:
  Auto merged
ndb/src/kernel/blocks/qmgr/QmgrMain.cpp:
  Auto merged
ndb/src/kernel/blocks/suma/Suma.cpp:
  Auto merged
ndb/src/kernel/blocks/suma/Suma.hpp:
  Auto merged
ndb/src/kernel/vm/MetaData.hpp:
  Auto merged
ndb/src/mgmapi/LocalConfig.cpp:
  Auto merged
ndb/src/mgmapi/mgmapi.cpp:
  Auto merged
ndb/src/mgmclient/CommandInterpreter.cpp:
  Auto merged
ndb/src/mgmsrv/ConfigInfo.cpp:
  Auto merged
ndb/src/mgmsrv/ConfigInfo.hpp:
  Auto merged
ndb/src/mgmsrv/InitConfigFileParser.cpp:
  Auto merged
ndb/src/mgmsrv/MgmtSrvr.cpp:
  Auto merged
ndb/src/mgmsrv/MgmtSrvr.hpp:
  Auto merged
ndb/src/mgmsrv/Services.cpp:
  Auto merged
ndb/src/mgmsrv/main.cpp:
  Auto merged
ndb/src/ndbapi/ClusterMgr.hpp:
  Auto merged
ndb/src/ndbapi/Ndb.cpp:
  Auto merged
ndb/src/ndbapi/NdbBlob.cpp:
  Auto merged
ndb/src/ndbapi/NdbDictionaryImpl.cpp:
  Auto merged
ndb/src/ndbapi/NdbIndexOperation.cpp:
  Auto merged
ndb/src/ndbapi/NdbOperationDefine.cpp:
  Auto merged
ndb/src/ndbapi/NdbOperationExec.cpp:
  Auto merged
ndb/src/ndbapi/NdbOperationSearch.cpp:
  Auto merged
ndb/src/ndbapi/NdbScanFilter.cpp:
  Auto merged
ndb/src/ndbapi/NdbScanOperation.cpp:
  Auto merged
ndb/src/ndbapi/SignalSender.cpp:
  Auto merged
ndb/src/ndbapi/ndb_cluster_connection.cpp:
  Auto merged
ndb/tools/delete_all.cpp:
  Auto merged
ndb/tools/desc.cpp:
  Auto merged
ndb/tools/drop_index.cpp:
  Auto merged
ndb/tools/drop_tab.cpp:
  Auto merged
ndb/tools/listTables.cpp:
  Auto merged
ndb/tools/ndb_config.cpp:
  Auto merged
ndb/tools/restore/Restore.hpp:
  Auto merged
ndb/tools/restore/consumer.hpp:
  Auto merged
ndb/tools/restore/restore_main.cpp:
  Auto merged
ndb/tools/select_all.cpp:
  Auto merged
ndb/tools/select_count.cpp:
  Auto merged
server-tools/instance-manager/commands.h:
  Auto merged
server-tools/instance-manager/guardian.cc:
  Auto merged
server-tools/instance-manager/instance_options.cc:
  Auto merged
server-tools/instance-manager/mysql_connection.cc:
  Auto merged
server-tools/instance-manager/options.cc:
  Auto merged
server-tools/instance-manager/options.h:
  Auto merged
server-tools/instance-manager/parse.cc:
  Auto merged
server-tools/instance-manager/user_map.cc:
  Auto merged
server-tools/instance-manager/user_map.h:
  Auto merged
sql/field.cc:
  Auto merged
sql/field.h:
  Auto merged
sql/filesort.cc:
  Auto merged
sql/ha_archive.cc:
  Auto merged
sql/ha_archive.h:
  Auto merged
sql/ha_federated.cc:
  Auto merged
sql/ha_heap.cc:
  Auto merged
sql/ha_myisam.cc:
  Auto merged
sql/ha_myisammrg.cc:
  Auto merged
sql/ha_ndbcluster.cc:
  Auto merged
sql/handler.cc:
  Auto merged
sql/item.cc:
  Auto merged
sql/item.h:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
sql/item_cmpfunc.h:
  Auto merged
sql/item_func.cc:
  Auto merged
sql/item_geofunc.cc:
  Auto merged
sql/item_row.h:
  Auto merged
sql/item_strfunc.cc:
  Auto merged
sql/item_subselect.cc:
  Auto merged
sql/item_subselect.h:
  Auto merged
sql/item_sum.cc:
  Auto merged
sql/item_timefunc.cc:
  Auto merged
sql/log.cc:
  Auto merged
sql/log_event.cc:
  Auto merged
sql/log_event.h:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/net_serv.cc:
  Auto merged
sql/opt_range.cc:
  Auto merged
sql/opt_range.h:
  Auto merged
sql/password.c:
  Auto merged
sql/protocol.cc:
  Auto merged
sql/repl_failsafe.cc:
  Auto merged
sql/set_var.cc:
  Auto merged
sql/set_var.h:
  Auto merged
sql/slave.cc:
  Auto merged
sql/sp.cc:
  Auto merged
sql/sp_head.cc:
  Auto merged
sql/sp_head.h:
  Auto merged
sql/spatial.cc:
  Auto merged
sql/spatial.h:
  Auto merged
sql/sql_cache.h:
  Auto merged
sql/sql_class.cc:
  Auto merged
sql/sql_derived.cc:
  Auto merged
sql/sql_insert.cc:
  Auto merged
sql/sql_lex.cc:
  Auto merged
sql/sql_lex.h:
  Auto merged
sql/sql_load.cc:
  Auto merged
sql/sql_prepare.cc:
  Auto merged
sql-common/client.c:
  Auto merged
sql-common/my_time.c:
  Auto merged
sql/sql_select.cc:
  Auto merged
sql/sql_show.cc:
  Auto merged
sql/sql_string.cc:
  Auto merged
sql/sql_string.h:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_trigger.cc:
  Auto merged
sql/sql_trigger.h:
  Auto merged
sql/sql_union.cc:
  Auto merged
sql/sql_update.cc:
  Auto merged
sql/sql_view.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
sql/table.cc:
  Auto merged
sql/tztime.cc:
  Auto merged
sql/unireg.cc:
  Auto merged
strings/ctype-bin.c:
  Auto merged
strings/ctype-cp932.c:
  Auto merged
strings/ctype-eucjpms.c:
  Auto merged
strings/ctype-mb.c:
  Auto merged
strings/ctype-simple.c:
  Auto merged
strings/ctype-sjis.c:
  Auto merged
strings/ctype-uca.c:
  Auto merged
strings/ctype-ujis.c:
  Auto merged
strings/ctype-utf8.c:
  Auto merged
strings/decimal.c:
  Auto merged
strings/my_vsnprintf.c:
  Auto merged
tests/mysql_client_test.c:
  Auto merged
mysql-test/t/mysqlbinlog.test:
  Manual merge
sql/sql_class.h:
  Manual merge
sql/sql_parse.cc:
  Manual merge
2007-01-22 14:04:40 +02:00

299 lines
7.0 KiB
C++

/* Copyright (C) 2003 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#ifndef SIMPLE_PROPERTIES_HPP
#define SIMPLE_PROPERTIES_HPP
#include <ndb_global.h>
#include <NdbOut.hpp>
/**
* @class SimpleProperties
* @brief Key-value-pair container. Actully a list of named elements.
*
* SimpleProperties:
* - The keys are Uint16
* - The values are either Uint32 or null terminated c-strings
*
* @note Keys may be repeated.
*
* Examples of things that can be stored in a SimpleProperties object:
* - Lists like: ((1, "foo"), (2, "bar"), (3, 32), (2, "baz"))
*/
class SimpleProperties {
public:
/**
* Value types
*/
enum ValueType {
Uint32Value = 0,
StringValue = 1,
BinaryValue = 2,
InvalidValue = 3
};
/**
* Struct for defining mapping to be used with unpack
*/
struct SP2StructMapping {
Uint16 Key;
Uint32 Offset;
ValueType Type;
Uint32 minValue;
Uint32 maxValue;
Uint32 Length_Offset; // Offset used for looking up length of
// data if Type = BinaryValue
};
/**
* UnpackStatus - Value returned from unpack
*/
enum UnpackStatus {
Eof = 0, // Success, end of SimpleProperties object reached
Break = 1, // Success
TypeMismatch = 2,
ValueTooLow = 3,
ValueTooHigh = 4,
UnknownKey = 5,
OutOfMemory = 6 // Only used when packing
};
/**
* Unpack
*/
class Reader;
static UnpackStatus unpack(class Reader & it,
void * dst,
const SP2StructMapping[], Uint32 mapSz,
bool ignoreMinMax,
bool ignoreUnknownKeys);
class Writer;
static UnpackStatus pack(class Writer &,
const void * src,
const SP2StructMapping[], Uint32 mapSz,
bool ignoreMinMax);
/**
* Reader class
*/
class Reader {
public:
/**
* Move to first element
* Return true if element exist
*/
bool first();
/**
* Move to next element
* Return true if element exist
*/
bool next();
/**
* Is this valid
*/
bool valid() const;
/**
* Get key
* Note only valid is valid() == true
*/
Uint16 getKey() const;
/**
* Get value length in bytes - (including terminating 0 for strings)
* Note only valid is valid() == true
*/
Uint16 getValueLen() const;
/**
* Get value type
* Note only valid is valid() == true
*/
ValueType getValueType() const;
/**
* Get value
* Note only valid is valid() == true
*/
Uint32 getUint32() const;
char * getString(char * dst) const;
/**
* Print the complete simple properties (for debugging)
*/
void printAll(NdbOut& ndbout);
private:
bool readValue();
Uint16 m_key;
Uint16 m_itemLen;
union {
Uint32 m_ui32_value;
Uint32 m_strLen; // Including 0-byte in words
};
ValueType m_type;
protected:
Reader();
virtual ~Reader() {}
virtual void reset() = 0;
virtual bool step(Uint32 len) = 0;
virtual bool getWord(Uint32 * dst) = 0;
virtual bool peekWord(Uint32 * dst) const = 0;
virtual bool peekWords(Uint32 * dst, Uint32 len) const = 0;
};
/**
* Writer class
*/
class Writer {
public:
bool first();
bool add(Uint16 key, Uint32 value);
bool add(Uint16 key, const char * value);
bool add(Uint16 key, const void* value, int len);
Writer() {}
protected:
virtual ~Writer() {}
virtual bool reset() = 0;
virtual bool putWord(Uint32 val) = 0;
virtual bool putWords(const Uint32 * src, Uint32 len) = 0;
private:
bool add(const char* value, int len);
};
};
/**
* Reader for linear memory
*/
class SimplePropertiesLinearReader : public SimpleProperties::Reader {
public:
SimplePropertiesLinearReader(const Uint32 * src, Uint32 len);
virtual ~SimplePropertiesLinearReader() {}
virtual void reset();
virtual bool step(Uint32 len);
virtual bool getWord(Uint32 * dst);
virtual bool peekWord(Uint32 * dst) const ;
virtual bool peekWords(Uint32 * dst, Uint32 len) const;
private:
Uint32 m_len;
Uint32 m_pos;
const Uint32 * m_src;
};
/**
* Writer for linear memory
*/
class LinearWriter : public SimpleProperties::Writer {
public:
LinearWriter(Uint32 * src, Uint32 len);
virtual ~LinearWriter() {}
virtual bool reset();
virtual bool putWord(Uint32 val);
virtual bool putWords(const Uint32 * src, Uint32 len);
Uint32 getWordsUsed() const;
private:
Uint32 m_len;
Uint32 m_pos;
Uint32 * m_src;
};
/**
* Writer for UtilBuffer
*/
class UtilBufferWriter : public SimpleProperties::Writer {
public:
UtilBufferWriter(class UtilBuffer & buf);
virtual ~UtilBufferWriter() {}
virtual bool reset();
virtual bool putWord(Uint32 val);
virtual bool putWords(const Uint32 * src, Uint32 len);
Uint32 getWordsUsed() const;
private:
class UtilBuffer & m_buf;
};
/**
* Reader for long signal section memory
*
*
* Implemented in kernel/vm/SimplePropertiesSection.cpp
*/
class SimplePropertiesSectionReader : public SimpleProperties::Reader {
public:
SimplePropertiesSectionReader(struct SegmentedSectionPtr &,
class SectionSegmentPool &);
virtual ~SimplePropertiesSectionReader() {}
virtual void reset();
virtual bool step(Uint32 len);
virtual bool getWord(Uint32 * dst);
virtual bool peekWord(Uint32 * dst) const ;
virtual bool peekWords(Uint32 * dst, Uint32 len) const;
Uint32 getSize() const;
bool getWords(Uint32 * dst, Uint32 len);
private:
Uint32 m_pos;
Uint32 m_len;
class SectionSegmentPool & m_pool;
struct SectionSegment * m_head;
struct SectionSegment * m_currentSegment;
};
inline
Uint32 SimplePropertiesSectionReader::getSize() const
{
return m_len;
}
/**
* Writer for long signal section memory
*
*
* Implemented in kernel/vm/SimplePropertiesSection.cpp
*/
class SimplePropertiesSectionWriter : public SimpleProperties::Writer {
public:
SimplePropertiesSectionWriter(class SectionSegmentPool &);
virtual ~SimplePropertiesSectionWriter() {}
virtual bool reset();
virtual bool putWord(Uint32 val);
virtual bool putWords(const Uint32 * src, Uint32 len);
/**
* This "unlinks" the writer from the memory
*/
void getPtr(struct SegmentedSectionPtr & dst);
private:
Int32 m_pos;
Uint32 m_sz;
class SectionSegmentPool & m_pool;
struct SectionSegment * m_head;
Uint32 m_prevPtrI; // Prev to m_currentSegment
struct SectionSegment * m_currentSegment;
};
#endif