C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
exprtk::lexer::token_inserter Class Reference

#include <exprtk.hpp>

Inheritance diagram for exprtk::lexer::token_inserter:
[legend]
Collaboration diagram for exprtk::lexer::token_inserter:
[legend]

Public Member Functions

 token_inserter (const std::size_t &stride)
std::size_t process (generator &g)
virtual int insert (const token &, token &)
virtual int insert (const token &, const token &, token &)
virtual int insert (const token &, const token &, const token &, token &)
virtual int insert (const token &, const token &, const token &, const token &, token &)
virtual int insert (const token &, const token &, const token &, const token &, const token &, token &)
Public Member Functions inherited from exprtk::lexer::helper_interface
virtual void init ()
virtual void reset ()
virtual bool result ()
virtual ~helper_interface ()

Private Attributes

const std::size_t stride_

Detailed Description

Definition at line 3302 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ token_inserter()

exprtk::lexer::token_inserter::token_inserter ( const std::size_t & stride)
inlineexplicit

Definition at line 3306 of file exprtk.hpp.

3307 : stride_(stride)
3308 {
3309 if (stride > 5)
3310 {
3311 throw std::invalid_argument("token_inserter() - Invalid stride value");
3312 }
3313 }
const std::size_t stride_
Definition exprtk.hpp:3408

References stride_.

Referenced by exprtk::lexer::helper::commutative_inserter::commutative_inserter().

Here is the caller graph for this function:

Member Function Documentation

◆ insert() [1/5]

virtual int exprtk::lexer::token_inserter::insert ( const token & ,
const token & ,
const token & ,
const token & ,
const token & ,
token &  )
inlinevirtual

Reimplemented in exprtk::lexer::helper::commutative_inserter.

Definition at line 3401 of file exprtk.hpp.

References token_inserter_empty_body.

◆ insert() [2/5]

virtual int exprtk::lexer::token_inserter::insert ( const token & ,
const token & ,
const token & ,
const token & ,
token &  )
inlinevirtual

Reimplemented in exprtk::lexer::helper::commutative_inserter.

Definition at line 3398 of file exprtk.hpp.

References token_inserter_empty_body.

◆ insert() [3/5]

virtual int exprtk::lexer::token_inserter::insert ( const token & ,
const token & ,
const token & ,
token &  )
inlinevirtual

Reimplemented in exprtk::lexer::helper::commutative_inserter.

Definition at line 3395 of file exprtk.hpp.

References token_inserter_empty_body.

◆ insert() [4/5]

virtual int exprtk::lexer::token_inserter::insert ( const token & ,
const token & ,
token &  )
inlinevirtual

Reimplemented in exprtk::lexer::helper::commutative_inserter.

Definition at line 3392 of file exprtk.hpp.

References token_inserter_empty_body.

◆ insert() [5/5]

virtual int exprtk::lexer::token_inserter::insert ( const token & ,
token &  )
inlinevirtual

Reimplemented in exprtk::lexer::helper::commutative_inserter.

Definition at line 3389 of file exprtk.hpp.

References token_inserter_empty_body.

Referenced by process().

Here is the caller graph for this function:

◆ process()

std::size_t exprtk::lexer::token_inserter::process ( generator & g)
inlinevirtual

Reimplemented from exprtk::lexer::helper_interface.

Definition at line 3315 of file exprtk.hpp.

3316 {
3317 if (g.token_list_.empty())
3318 return 0;
3319 else if (g.token_list_.size() < stride_)
3320 return 0;
3321
3322 std::size_t changes = 0;
3323
3324 typedef std::pair<std::size_t, token> insert_t;
3325 std::vector<insert_t> insert_list;
3326 insert_list.reserve(10000);
3327
3328 for (std::size_t i = 0; i < (g.token_list_.size() - stride_ + 1); ++i)
3329 {
3330 int insert_index = -1;
3331 token t;
3332
3333 switch (stride_)
3334 {
3335 case 1 : insert_index = insert(g.token_list_[i],t);
3336 break;
3337
3338 case 2 : insert_index = insert(g.token_list_[i], g.token_list_[i + 1], t);
3339 break;
3340
3341 case 3 : insert_index = insert(g.token_list_[i], g.token_list_[i + 1], g.token_list_[i + 2], t);
3342 break;
3343
3344 case 4 : insert_index = insert(g.token_list_[i], g.token_list_[i + 1], g.token_list_[i + 2], g.token_list_[i + 3], t);
3345 break;
3346
3347 case 5 : insert_index = insert(g.token_list_[i], g.token_list_[i + 1], g.token_list_[i + 2], g.token_list_[i + 3], g.token_list_[i + 4], t);
3348 break;
3349 }
3350
3351 if ((insert_index >= 0) && (insert_index <= (static_cast<int>(stride_) + 1)))
3352 {
3353 insert_list.push_back(insert_t(i, t));
3354 changes++;
3355 }
3356 }
3357
3358 if (!insert_list.empty())
3359 {
3360 generator::token_list_t token_list;
3361
3362 std::size_t insert_index = 0;
3363
3364 for (std::size_t i = 0; i < g.token_list_.size(); ++i)
3365 {
3366 token_list.push_back(g.token_list_[i]);
3367
3368 if (
3369 (insert_index < insert_list.size()) &&
3370 (insert_list[insert_index].first == i)
3371 )
3372 {
3373 token_list.push_back(insert_list[insert_index].second);
3374 insert_index++;
3375 }
3376 }
3377
3378 std::swap(g.token_list_,token_list);
3379 }
3380
3381 return changes;
3382 }
std::vector< token_t > token_list_t
Definition exprtk.hpp:2462
virtual int insert(const token &, token &)
Definition exprtk.hpp:3389

References exprtk_override, insert(), and stride_.

Referenced by exprtk::lexer::helper::helper_assembly::run_inserters().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ stride_

const std::size_t exprtk::lexer::token_inserter::stride_
private

Definition at line 3408 of file exprtk.hpp.

Referenced by process(), and token_inserter().


The documentation for this class was generated from the following file: