D
Dilip
I was wondering if you guys can help me out with a design issue I am
running into.
I have a class that needs to maintain a mapping between a table name
and its corresponding list of columns.
The column class is defined thusly:
struct Column
{
enum Type
{
BOOL = 1,
INT = 2,
FLOAT = 3
// etc. and so on
};
Type type(); // returns the type of the column
};
There is also an API that gives me the value of a column given a
column pointer. Its overloaded for various types like:
APIPtr->get(Column* c, <overloads_for_various_types>& colvalue);
/*
APIPtr->get(Column* c, int& value);
APIPtr->get(Column* c, char*& value);
// etc
*/
I went down this direction:
class TableHandler
{
std::map<std::string, std::vector<Column*> > Table2ColumnMap;
Table2ColumnMap table2Col_; // this map is set at construction time
public:
TableHandler()
{
Column* c1 = APIPtr->getColDetailsFromSomewhere("COLNAME1");
Column* c2 = APIPtr->getColDetailsFromSomewhere("COLNAME2");
Column* c3 = APIPtr->getColDetailsFromSomewhere("COLNAME3");
vector<Column*> colvec;
colvec.push_back(c1);
colvec.push_back(c2);
colvec.push_back(c3);
tale2Col_.insert(std::make_pair("TABLE1", colvec));
}
};
I was wondering if there is a way to write a method in TableHandler
that can give iteratively extract the values of all the columns given
a table name (using that APIPtr->get() thingy).
So I came all the way here:
void TableHandler::ExtractColValues(std::string const& tablename)
{
// 1. drill into map; 2. locate associated vector of columns
// 3. IT is at this point I am a little confused
}
As I noted in (3), each Column* already maintains an enum that is
indicative of its type. I want to write a clean mechanism to extract
the value of that column using APIPtr->get() and somehow using its
type. I just am not able to translate it into code.
Can someone point me in the right direction? Just a hint would be
appreciated -- I can expand it from there.
running into.
I have a class that needs to maintain a mapping between a table name
and its corresponding list of columns.
The column class is defined thusly:
struct Column
{
enum Type
{
BOOL = 1,
INT = 2,
FLOAT = 3
// etc. and so on
};
Type type(); // returns the type of the column
};
There is also an API that gives me the value of a column given a
column pointer. Its overloaded for various types like:
APIPtr->get(Column* c, <overloads_for_various_types>& colvalue);
/*
APIPtr->get(Column* c, int& value);
APIPtr->get(Column* c, char*& value);
// etc
*/
I went down this direction:
class TableHandler
{
std::map<std::string, std::vector<Column*> > Table2ColumnMap;
Table2ColumnMap table2Col_; // this map is set at construction time
public:
TableHandler()
{
Column* c1 = APIPtr->getColDetailsFromSomewhere("COLNAME1");
Column* c2 = APIPtr->getColDetailsFromSomewhere("COLNAME2");
Column* c3 = APIPtr->getColDetailsFromSomewhere("COLNAME3");
vector<Column*> colvec;
colvec.push_back(c1);
colvec.push_back(c2);
colvec.push_back(c3);
tale2Col_.insert(std::make_pair("TABLE1", colvec));
}
};
I was wondering if there is a way to write a method in TableHandler
that can give iteratively extract the values of all the columns given
a table name (using that APIPtr->get() thingy).
So I came all the way here:
void TableHandler::ExtractColValues(std::string const& tablename)
{
// 1. drill into map; 2. locate associated vector of columns
// 3. IT is at this point I am a little confused
}
As I noted in (3), each Column* already maintains an enum that is
indicative of its type. I want to write a clean mechanism to extract
the value of that column using APIPtr->get() and somehow using its
type. I just am not able to translate it into code.
Can someone point me in the right direction? Just a hint would be
appreciated -- I can expand it from there.