Commit f6378bbec50d81d7eea4bac5a0051bef21122676

Authored by Perry Werneck
1 parent 653a7cdc
Exists in master and in 1 other branch develop

Working on dynamic typed attributes.

client/src/core/attribute.cc
... ... @@ -72,28 +72,25 @@
72 72 return (bool) attr.get.asInt32(attr, worker) != 0;
73 73 };
74 74  
75   - }
  75 + set.asString = [](const Attribute & attr, const void *worker, const char *value) {
  76 + throw std::system_error(ENOTSUP, std::system_category());
  77 + };
76 78  
77   - Attribute::~Attribute() {
78   - }
  79 + set.asInt32 = [](const Attribute & attr, const void *worker, const int32_t value) {
  80 + throw std::system_error(ENOTSUP, std::system_category());
  81 + };
79 82  
80   - /*
81   - std::string Attribute::getString() const {
82   - printf("*************** %s\n",__FUNCTION__);
83   - throw std::system_error(ENOTSUP, std::system_category());
84   - }
  83 + set.asUint32 = [](const Attribute & attr, const void *worker, const uint32_t value) {
  84 + attr.set.asInt32(attr,worker,(int32_t) value);
  85 + };
85 86  
86   - int32_t Attribute::getInt32() const {
87   - throw std::system_error(ENOTSUP, std::system_category());
88   - }
  87 + set.asBoolean = [](const Attribute & attr, const void *worker, const bool value) {
  88 + attr.set.asInt32(attr,worker,(int32_t) value);
  89 + };
89 90  
90   - uint32_t Attribute::getUint32() const {
91   - throw std::system_error(ENOTSUP, std::system_category());
92 91 }
93 92  
94   - bool Attribute::getBool() const {
95   - throw std::system_error(ENOTSUP, std::system_category());
  93 + Attribute::~Attribute() {
96 94 }
97   - */
98 95  
99 96 }
... ...
client/src/include/lib3270/ipc.h
... ... @@ -272,12 +272,19 @@
272 272 std::function <bool (const Attribute & attr, const void *worker)> asBoolean;
273 273 } get;
274 274  
  275 + struct {
  276 + std::function <void (const Attribute & attr, const void *worker, const char *value)> asString;
  277 + std::function <void (const Attribute & attr, const void *worker, const int32_t value)> asInt32;
  278 + std::function <void (const Attribute & attr, const void *worker, const uint32_t value)> asUint32;
  279 + std::function <void (const Attribute & attr, const void *worker, const bool value)> asBoolean;
  280 + } set;
  281 +
275 282 Attribute(H3270 *hSession, Type type, void * worker);
276 283  
277 284 public:
278 285 ~Attribute();
279 286  
280   - inline const H3270 * getTN3270Session() const {
  287 + inline H3270 * getTN3270Session() const {
281 288 return this->hSession;
282 289 }
283 290  
... ... @@ -301,6 +308,42 @@
301 308 return get.asString(*this, worker);
302 309 }
303 310  
  311 + inline void setString(const char * value) {
  312 + set.asString(*this,worker,value);
  313 + }
  314 +
  315 + inline void setInt32(const int32_t value) {
  316 + set.asInt32(*this,worker,value);
  317 + }
  318 +
  319 + inline void setUint32(const uint32_t value) {
  320 + set.asUint32(*this,worker,value);
  321 + }
  322 +
  323 + inline void setBoolean(const bool value) {
  324 + set.asBoolean(*this,worker,value);
  325 + }
  326 +
  327 + inline Attribute & operator=(const char * value) {
  328 + set.asString(*this,worker,value);
  329 + return *this;
  330 + }
  331 +
  332 + inline Attribute & operator=(const int32_t value) {
  333 + set.asInt32(*this,worker,value);
  334 + return *this;
  335 + }
  336 +
  337 + inline Attribute & operator=(const uint32_t value) {
  338 + set.asUint32(*this,worker,value);
  339 + return *this;
  340 + }
  341 +
  342 + inline Attribute & operator=(const bool value) {
  343 + set.asBoolean(*this,worker,value);
  344 + return *this;
  345 + }
  346 +
304 347 inline bool operator==(Type type) const noexcept {
305 348 return this->type == type;
306 349 }
... ...
client/src/session/local/attribute.cc
... ... @@ -173,31 +173,40 @@
173 173  
174 174 }
175 175  
176   - /*
177   - std::string getString() const override {
178   - }
  176 + };
179 177  
180   - int32_t getInt32() const override {
  178 + // Toggle attribute
  179 + class ToggleAttribute : public Attribute {
  180 + public:
  181 + ToggleAttribute(H3270 *hSession, const LIB3270_TOGGLE_ENTRY *worker) : Attribute(hSession, Attribute::Boolean, (void *) worker) {
181 182  
182   - errno = 0;
183   - int value = ((const LIB3270_INT_PROPERTY *) worker)->get(hSession);
  183 + get.asString = [](const Attribute & attr, const void *worker) {
  184 + return attr.getBoolean() ? "true" : "false";
  185 + };
184 186  
185   - if(errno != 0) {
186   - throw std::system_error(errno, std::system_category());
187   - }
  187 + get.asInt32 = [](const Attribute & attr, const void *worker) {
188 188  
189   - return ((int32_t) value) != 0;
  189 + errno = 0;
190 190  
191   - }
  191 + int value = lib3270_get_toggle(attr.getTN3270Session(),((const LIB3270_TOGGLE_ENTRY *) worker)->id);
192 192  
193   - uint32_t getUint32() const override {
194   - return (uint32_t) descriptor->get(this->hSession);
195   - }
  193 + if(errno != 0) {
  194 + throw std::system_error(errno, std::system_category());
  195 + }
  196 +
  197 + return (int32_t) value;
  198 +
  199 + };
  200 +
  201 + set.asInt32 = [](const Attribute & attr, const void *worker, const int32_t value) {
  202 + lib3270_set_toggle(attr.getTN3270Session(),((const LIB3270_TOGGLE_ENTRY *) worker)->id, (int) value);
  203 + };
  204 +
  205 + set.asBoolean = [](const Attribute & attr, const void *worker, const bool value) {
  206 + lib3270_set_toggle(attr.getTN3270Session(),((const LIB3270_TOGGLE_ENTRY *) worker)->id, (int) value);
  207 + };
196 208  
197   - bool getBool() const override {
198   - return getInt32() != 0;
199 209 }
200   - */
201 210  
202 211 };
203 212  
... ...
client/src/testprogram/testprogram.cc
... ... @@ -98,7 +98,6 @@
98 98 << "\tConnected: " << host["Connected"]
99 99 << std::endl;
100 100  
101   - /*
102 101 host.connect(nullptr);
103 102  
104 103 cout
... ... @@ -130,8 +129,6 @@
130 129  
131 130 host.disconnect();
132 131  
133   - */
134   -
135 132 } catch(const std::exception &e) {
136 133  
137 134 cerr << std::endl << e.what() << std::endl << std::endl;
... ...