// station.h // // Class to hold station information #ifndef _STATION_H_ #define _STATION_H_ class Station : public mcThing { CString name; int zone; // comprised of zones int defaultQuad; // quadrant flags to be used for node if not otherwise specified int alignment; // alignment flag set public: enum zones { ZONE1 = 1, ZONE2 = 1 << 1, ZONE3 = 1 << 2, ZONE4 = 1 << 3, ZONE5 = 1 << 4, ZONE6 = 1 << 5, ZONE7 = 1 << 6 // strictly, no zone... }; enum alignments { NOT_ALIGNED = 0, HORIZONTAL = 1, VERTICAL = 1 << 1, ONE_THREE = 1 << 2, TWO_FOUR = 1 << 3, UNKNOWN = 1 << 4 }; Station(mcContext *mgr, const CString &a_name, int a_zone, int a_defaultQuad = -1) // : mcThing(mgr) ,name(a_name) ,zone(a_zone) ,defaultQuad(a_defaultQuad) ,alignment(NOT_ALIGNED) { } // Accessors CString getName() { return name; } void setName(CString name) { this->name = name; } int getZone() { return zone; } void setZone(int zone) { this->zone = zone; } // BUGBUG Should check validity! int getDefaultQuad() { return defaultQuad; } int getAlignment() { return alignment; } void setAlignment(int a_align) { alignment = a_align; } void setAlignBit(int a_mask) { alignment |= a_mask; } void clearAlignBit(int a_mask) { alignment &= ~a_mask; } mcThing::type getType() { return mcThing::STATION; } // SQL members CString getSqlTable() { return "STATION"; } CString getSqlInsertData() { // STATIONS := ID, NAME, ZONE // BUGBUG How is Zone going to be represented? // How about numeric, +ve for normal zone stations and -ve for boundaries? // Count zone bits for (int i = 1, z = zone; z && !(z & 1); i++, z >>= 1); if (z & 2) i = -i; return CNumString(getId()) + ", " + literal(name) + ", " + CNumString(i) + ", " + literal(stringAlignment(alignment)) + ", " + CNumString(scalarAlignment(alignment)); } static CString stringAlignment(int alignment) { static struct { int align; const char *name; } alignmentValues[] = { { HORIZONTAL, "Horizontal" }, { VERTICAL, "Vertical" }, { ONE_THREE, "One-Three" }, { TWO_FOUR, "Two-Four" }, { 0, 0 } }; CString val; for (int i = 0; alignmentValues[i].align; i++) { if (alignment & alignmentValues[i].align) val += CString(alignmentValues[i].name) + " "; } if (val.GetLength() > 0) return val.Left(val.GetLength() - 1); // trim trailing space else return val; } static int scalarAlignment(int alignment) { static int alignmentValues[][2] = { { HORIZONTAL, 1 }, { VERTICAL, 1 }, { ONE_THREE, -1 }, { TWO_FOUR, -1 }, { 0, 0 } }; for (int i = 0, val = 0; alignmentValues[i][0]; i++) { if (alignment & alignmentValues[i][0]) val += alignmentValues[i][1]; } return val; } }; #endif // _STATION_H_