C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
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 3238 of file exprtk.hpp.

Constructor & Destructor Documentation

◆ token_inserter()

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

Definition at line 3242 of file exprtk.hpp.

3243 : stride_(stride)
3244 {
3245 if (stride > 5)
3246 {
3247 throw std::invalid_argument("token_inserter() - Invalid stride value");
3248 }
3249 }
const std::size_t stride_
Definition exprtk.hpp:3344

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

Definition at line 3337 of file exprtk.hpp.

◆ insert() [2/5]

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

Definition at line 3334 of file exprtk.hpp.

◆ insert() [3/5]

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

Definition at line 3331 of file exprtk.hpp.

◆ 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 3328 of file exprtk.hpp.

◆ insert() [5/5]

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

Definition at line 3325 of file exprtk.hpp.

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 3251 of file exprtk.hpp.

3252 {
3253 if (g.token_list_.empty())
3254 return 0;
3255 else if (g.token_list_.size() < stride_)
3256 return 0;
3257
3258 std::size_t changes = 0;
3259
3260 typedef std::pair<std::size_t, token> insert_t;
3261 std::vector<insert_t> insert_list;
3262 insert_list.reserve(10000);
3263
3264 for (std::size_t i = 0; i < (g.token_list_.size() - stride_ + 1); ++i)
3265 {
3266 int insert_index = -1;
3267 token t;
3268
3269 switch (stride_)
3270 {
3271 case 1 : insert_index = insert(g.token_list_[i],t);
3272 break;
3273
3274 case 2 : insert_index = insert(g.token_list_[i], g.token_list_[i + 1], t);
3275 break;
3276
3277 case 3 : insert_index = insert(g.token_list_[i], g.token_list_[i + 1], g.token_list_[i + 2], t);
3278 break;
3279
3280 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);
3281 break;
3282
3283 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);
3284 break;
3285 }
3286
3287 if ((insert_index >= 0) && (insert_index <= (static_cast<int>(stride_) + 1)))
3288 {
3289 insert_list.push_back(insert_t(i, t));
3290 changes++;
3291 }
3292 }
3293
3294 if (!insert_list.empty())
3295 {
3296 generator::token_list_t token_list;
3297
3298 std::size_t insert_index = 0;
3299
3300 for (std::size_t i = 0; i < g.token_list_.size(); ++i)
3301 {
3302 token_list.push_back(g.token_list_[i]);
3303
3304 if (
3305 (insert_index < insert_list.size()) &&
3306 (insert_list[insert_index].first == i)
3307 )
3308 {
3309 token_list.push_back(insert_list[insert_index].second);
3310 insert_index++;
3311 }
3312 }
3313
3314 std::swap(g.token_list_,token_list);
3315 }
3316
3317 return changes;
3318 }
std::vector< token_t > token_list_t
Definition exprtk.hpp:2408
virtual int insert(const token &, token &)
Definition exprtk.hpp:3325

References 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 3344 of file exprtk.hpp.

Referenced by process().


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