Ejemplo n.º 1
0
 //------------------------------------------------------------------
 structure_processor::structure_processor(const config& cfg, 
                                          const element& e,
                                          content_storage& result) :
     m_cfg(cfg),
     m_result(result)
 {
     m_result.reserve(e.total_len());
     e.process(*this);
 }
Ejemplo n.º 2
0
 //------------------------------------------------------------------
 code_colorer::code_colorer(const config& cfg, 
                            const element& e,
                            content_storage& result) : 
     m_cfg(cfg),
     m_result(result),
     m_coloring_element(0)
 {
     m_result.reserve(e.total_len());
     e.process(*this);
 }
Ejemplo n.º 3
0
 //------------------------------------------------------------------
 table_structurizer::table_structurizer(const config& cfg,
                                        const element& e,
                                        content_storage& result) :
     m_cfg(cfg),
     m_result(result),
     m_skip_element(0)
 {
     m_result.reserve(e.total_len());
     e.process(*this);
 }
Ejemplo n.º 4
0
        double
        element::chemicalMass( const element& e )
        {
            std::pair<double, double> sum
                = std::accumulate( e.isotopes().begin(), e.isotopes().end()
                                   , std::make_pair( 0.0, 0.0 )
                                   , []( const std::pair<double, double>& a, const toe::isotope& i ){
                                       return std::make_pair( a.first + (i.mass * i.abundance), a.second + i.abundance ); });
            
            //assert( adportable::compare<double>::approximatelyEqual( sum.second, 1.0 ) );

            return sum.first;
        }
Ejemplo n.º 5
0
 //------------------------------------------------------------------
 void index_storage::end_element(const element& e)
 {
     if(str_cmp(e.name(), e.name_len(), keyword_dir) == 0)
     {
         if(m_path.size()) m_path.pop_back();
     }
     else
     if(str_cmp(e.name(), e.name_len(), keyword_file) == 0)
     {
         m_file_name.erase();
         m_file_ext.erase();
     }
 }
Ejemplo n.º 6
0
    //------------------------------------------------------------------
    void table_structurizer::start_element(const element& e)
    {
        if(m_skip_element) return;

//        if(m_cfg.keyword_exists(keyword_formatless_elements, e.name(), e.name_len()))
        if(m_cfg.is_solid_element(e.name(), e.name_len()))
        {
            element_serializer s(m_result, e);
            m_skip_element = &e;
            return;
        }

        if(str_cmp(e.name(), e.name_len(), keyword_ssv_table) == 0)
        {
            process_ssv_table(e);
            m_skip_element = &e;
        }
        else
        if(str_cmp(e.name(), e.name_len(), keyword_vbar_table) == 0)
        {
            process_vbar_table(e);
            m_skip_element = &e;
        }
        else
        if(str_cmp(e.name(), e.name_len(), keyword_eln_table) == 0)
        {
            process_eln_table(e);
            m_skip_element = &e;
        }
        else
        {
            m_result.add_element_header(e);
        }
    }
Ejemplo n.º 7
0
		/**
		 * @brief Given the merit function associated with the rezone data, this function is in the correct form for gsl to parse
		 * 
		 * @param i_rezone_data A pointer to the rezone data
		 * @return The merit value that the merit function has returned, summed over all elements
		 */
		static double func (void *i_rezone_data) {
			element *element_ptr = ((rezone_data *) i_rezone_data)->element_ptr;
			mpi::messenger *messenger_ptr = element_ptr->messenger_ptr;
			double value = ((rezone_data *)i_rezone_data)->merit_func (element_ptr, element_ptr->make_rezoned_virtual_file (((rezone_data *)i_rezone_data)->positions, &*(element_ptr->rezone_virtual_file), profile_only));
			messenger_ptr->sum (&value);
			return value;
		}
Ejemplo n.º 8
0
 element_state get_state(void)
 {
   assert(lock_ != nullptr);
   return utils::spinlock_exec([this](void) -> element_state {
     return element_->get_state();
   }, *lock_);
 }
Ejemplo n.º 9
0
    inline
    void update(element& elem)
    {
        boost::optional<HWND> wnd = elem.window();
        if (wnd) {
            ::UpdateWindow(*wnd);
            return;
        }

        boost::optional<element&> pa = elem.parent();
        if (!pa) {
            BOOST_ASSERT(false); // todo
            return;
        }

        hamburger::update(*pa);
    }
Ejemplo n.º 10
0
    //------------------------------------------------------------------
    void structure_processor::end_element(const element& e)
    {
        const string_type* p;
        if(e.name_len())
        {
            m_result.add_element_footer(e);

            p = m_cfg.find(e.name(), e.name_len(), keyword_close_suffix);
            m_result.add(p);
            m_result.add(close_brace);
        }
        else
        {
            p = m_cfg.find(keyword_page_close.name);
            m_result.add(p);
        }
    }
Ejemplo n.º 11
0
 void
 print()
 {
   if (l != NULL)
     l->print();
   cout << el->f() << " " << s << "\n";
   if (r != NULL)
     r->print();
 }
Ejemplo n.º 12
0
 //------------------------------------------------------------------
 index_storage::index_storage(const element& e)
 {
     e.process(*this);
     unsigned i;
     for(i = 0; i < m_data.size(); ++i)
     {
         m_key_anchor.insert(&m_data[i]);
         m_key_category.insert(&m_data[i]);
     }
 }
Ejemplo n.º 13
0
    //------------------------------------------------------------------
    void structure_processor::start_element(const element& e)
    {
        const string_type* p;
        if(e.name_len())
        {
            m_result.add_element_header(e);

            p = m_cfg.find(e.name(), e.name_len(), keyword_open_suffix);
            m_result.add(p);

            m_result.add(backslash);
            m_result.add(keyword_cntn.name, keyword_cntn.len);
            m_result.add(open_brace);
        }
        else
        {
            p = m_cfg.find(keyword_page_open.name);
            m_result.add(p);
        }
    }
Ejemplo n.º 14
0
 //------------------------------------------------------------------
 void code_colorer::start_element(const element& e)
 {
     if(e.name_len())
     {
         if(m_coloring_element == 0)
         {
             if(m_cfg.keyword_exists(keyword_code, e.name(), e.name_len()) ||
                str_cmp(e.name(), e.name_len(), keyword_code) == 0 ||
                str_cmp(e.name(), e.name_len(), keyword_m) == 0)
             {
                 m_coloring_element = &e;
                 color_code(e);
             }
             else
             {
                 m_result.add_element_header(e);
             }
         }
     }
 }
Ejemplo n.º 15
0
 //------------------------------------------------------------------
 void table_structurizer::process_table_header(const element& e)
 {
     m_result.add(backslash);
     m_result.add(keyword_table.name, keyword_table.len);
     if(e.attr_len())
     {
         m_result.add(open_bracket);
         m_result.add(e.attr(), e.attr_len());
         m_result.add(close_bracket);
     }
     m_result.add(open_brace);
     m_result.add(lf);
     if(m_header.length())
     {
         m_result.add(backslash);
         m_result.add(keyword_trh.name, keyword_trh.len);
         m_result.add(open_brace);
         parse_double_vbar(m_header.text(), m_header.length(), &keyword_th);
         m_result.add(close_brace);
     }
 }
Ejemplo n.º 16
0
 //------------------------------------------------------------------
 void table_content_extractor::start_element(const element& e)
 {
     if(m_skip_element) return;
 
     if(str_cmp(e.name(), e.name_len(), keyword_th) == 0)
     {
         element_serializer(m_header, e, false);
         m_skip_element = &e;
     }
     else
     if(str_cmp(e.name(), e.name_len(), keyword_al) == 0)
     {
         content_storage st;
         element_serializer(st, e, false);
         const char_type* str = st.text();
         while(*str)
         {
             char_type c = *str++;
             if(c == open_angle ||
                c == close_angle ||
                c == vbar ||
                c == minus)
             {
                 m_align.push_back(c);
             }
         }
         m_skip_element = &e;
     }
     else
     {
         if(m_level)
         {
             m_table.add_element_header(e);
         }
         ++m_level;
     }
 }
Ejemplo n.º 17
0
 //------------------------------------------------------------------
 table_content_extractor::table_content_extractor(const element& e,
                                                  content_storage& header,
                                                  content_storage& table,
                                                  string_buffer_type& align) :
     m_header(header),
     m_table(table),
     m_align(align),
     m_skip_element(0),
     m_level(0)
 {
     m_header.clear();
     m_table.clear();
     m_align.clear();
     e.process(*this);
 }
Ejemplo n.º 18
0
 //------------------------------------------------------------------
 void code_colorer::end_element(const element& e)
 {
     if(e.name_len())
     {
         if(m_coloring_element == 0)
         {
             m_result.add(close_brace);
         }
         else
         {
             if(m_coloring_element == &e)
             {
                 m_coloring_element = 0;
             }
         }
     }
 }
Ejemplo n.º 19
0
	double match(element elem)
	{
		elements.clear();
		auto elems = elem.elements();
		double res = 1.0;
		assert(subhandler != nullptr);
		while(!elems.empty())
		{
			res *= subhandler->match(elems.front());
			if(res > 0.0)
			{
				elements.push_back(elems.front());
				elems.step_front();
			}
			else return 0.0;
		}
		return res;
	}
Ejemplo n.º 20
0
 void step(F forward_or_backward)
 {
   const auto state = get_state();
   
   if (state == element_state::boundary) {
     auto next_block = 
       utils::spinlock_exec([this](void) -> typename element<T>::next_type {
         return element_->get_next();
       }, *lock_);
       
       element_ = std::get<decltype(element_)>(next_block);
       lock_ = std::get<decltype(lock_)>(next_block);
       
       if (element_ == nullptr) {
         return;
       }
   }
   
   forward_or_backward();
 }
Ejemplo n.º 21
0
        // static
        double
        element::monoIsotopicMass( const element& e, int isotope )
        {
            if ( isotope == 0 ) { 

                // return most abundunt
                auto it = std::max_element( e.isotopes().begin(), e.isotopes().end(), []( const toe::isotope& a, const toe::isotope& b ){ return a.abundance < b.abundance; });
                if ( it != e.isotopes().end() )
                    return it->mass;
            } else {

                // find specified isotope
                auto it = std::find_if( e.isotopes().begin(), e.isotopes().end(), [=]( const toe::isotope& a ){ return int ( a.mass + 0.3 ) == isotope; });
                if ( it != e.isotopes().end() )
                    return it->mass;
            }
            return 0;
        }
Ejemplo n.º 22
0
void dehydrator::dehydrate_element(const intermediate_model& im,
    const element& e, const std::string& meta_type, std::ostream& s) const {

    formatters::utility_formatter uf(s);
    uf.insert_quoted("name");
    s << " : ";
    dehydrate_name(e.name(), s);
    s << comma_space;

    uf.insert_quoted("meta_type");
    s << ": ";
    uf.insert_quoted(meta_type);

    if (!e.documentation().empty()) {
        s << comma_space;
        uf.insert_quoted("documentation");
        s << " : ";
        uf.insert_quoted(tidy_up_string(e.documentation()));
    }

    if (!e.stereotypes().empty()) {
        s << comma_space;
        uf.insert_quoted("stereotypes");
        s << " : [ ";
        bool is_first(true);
        for (const auto& stereotype : e.stereotypes()) {
            if (!is_first)
                s << comma_space;

            uf.insert_quoted(stereotype);

            is_first = false;
        }
        s << " ] ";
    }

    dehydrate_annotations(im, e.name().id(), s);
}
Ejemplo n.º 23
0
bool is_leaf(const element& x) {
  return x.which() == 0;
}
Ejemplo n.º 24
0
 T operator*(void) 
 {
   return utils::spinlock_exec([this](void) {
     return element_->get_data();
   }, *lock_);
 }
Ejemplo n.º 25
0
  void
  add(element<T>* e)
  {
    s++;
    if (this->l == NULL)
      {
	if (el->f() > e->f())
	  {
	    l = new heap(el);
	    l->p = this;
	    l->el->root = l;
	    el = e;
	    el->root = this;
	  }
	else
	  {
	    l = new heap(e);
	    l->p = this;
	    l->el->root = l;
	  }
      }
    else if (r == NULL)
      {
	if (el->f() > e->f())
	  {

	    r = new heap(el);
	    r->p = this;
	    r->el->root = r;
	    el = e;
	    this->el->root = this;
	  }
	else
	  {
	    r = new heap(e);
	    r->p = this;
	    r->el->root = r;
	  }
      }
    else if (l->s > r->s)
      {
	if (el->f() > e->f())
	  {
	    r->add(el);
	    el = e;
	    this->el->root = this;
	  }
	else
	  {
	    r->add(e);
	  }
      }
    else
      {
	if (el->f() > e->f())
	  {
	    l->add(el);
	    el = e;
	    this->el->root = this;
	  }
	else
	  {
	    l->add(e);
	  }
      }
  }
Ejemplo n.º 26
0
    //------------------------------------------------------------------
    void index_storage::start_element(const element& e)
    {
        string_type ts;
        index_element ie;

        if(str_cmp(e.name(), e.name_len(), keyword_dir) == 0)
        {
            parse_and_find_attr_content(e.attr(), e.attr_len(), ts);
            clean_and_trim_string(ts);
            if(ts.empty())
            {
                e.throw_exception(e.name(), "index_storage: \\dir: No directory name");
            }
            trim_ending_slashes(ts);
            m_path.push_back(ts);
        }
        else
        if(str_cmp(e.name(), e.name_len(), keyword_file) == 0)
        {
            parse_and_find_attr_content(e.attr(), e.attr_len(), ts);
            clean_and_trim_string(ts);
            if(ts.empty())
            {
                e.throw_exception(e.name(), "index_storage: \\file: No file name");
            }
            m_file_name = ts;
           
            if(parse_and_find_attr_variable(e.attr(), e.attr_len(), keyword_ext, ts))
            {
                clean_and_trim_string(ts);
                m_file_ext = ts;
            }
            ie.category.assign(keyword_file.name, keyword_file.len);
            ie.anchor.assign(m_file_name);
            ie.comment.erase();
            ie.comment.assign(m_file_name);
            make_full_path(ie.full_path);
            m_data.push_back(ie);
        }
        else
        if(str_cmp(e.name(), e.name_len(), keyword_title) == 0)
        {
            if(m_file_name.empty())
            {
                e.throw_exception(e.name(), "index_storage: \\title: Illegal outside of \\file");
            }
            extract_element_content(e, ts);
            ie.category.assign(keyword_title.name, keyword_title.len);
            ie.anchor.assign(m_file_name);
            ie.comment.assign(ts);
            make_full_path(ie.full_path);
            m_data.push_back(ie);
        }
        else
        if(str_cmp(e.name(), e.name_len(), keyword_label) == 0)
        {
            if(m_file_name.empty())
            {
                e.throw_exception(e.name(), "index_storage: \\title: Illegal outside of \\file");
            }

            if(parse_and_find_attr_variable(e.attr(), e.attr_len(), keyword_category, ts))
            {
                clean_and_trim_string(ts);
                if(ts.empty())
                {
                    e.throw_exception(e.name(), "index_storage: \\label: No 'category' attribute");
                }
                ie.category.assign(ts);
            }

            if(parse_and_find_attr_variable(e.attr(), e.attr_len(), keyword_anchor, ts))
            {
                clean_and_trim_string(ts);
                if(ts.empty())
                {
                    e.throw_exception(e.name(), "index_storage: \\label: No 'anchor' attribute");
                }
                ie.anchor.assign(ts);
            }
            extract_element_content(e, ts);
            ie.comment.assign(ts);
            make_full_path(ie.full_path);
            m_data.push_back(ie);
        }
    }
Ejemplo n.º 27
0
 void set_next(typename vector_list<T>::next_type&& nt)
 {
   utils::spinlock_exec([this](auto nt) -> void {
     element_->set_next(nt);
   }, *lock_, nt);
 }
Ejemplo n.º 28
0
 //------------------------------------------------------------------
 void index_storage::extract_element_content(const element& e, string_type& ret) const
 {
     ret.assign(e.content(), e.content_len());
     clean_and_trim_string(ret);
 }
Ejemplo n.º 29
0
    //------------------------------------------------------------------
    void code_colorer::color_code(const element& e)
    {
        m_language.assign(e.name(), e.name_len());

        m_block_comments   = m_cfg.strlist(string_type(e.name(), e.name_len()), 
                                           keyword_block_comments_suffix);

        m_line_comments    = m_cfg.strlist(string_type(e.name(), e.name_len()), 
                                           keyword_line_comments_suffix);

        m_string_quotation = m_cfg.strlist(string_type(e.name(), e.name_len()), 
                                           keyword_strings_suffix);

        m_string_mask      = m_cfg.strlist(string_type(e.name(), e.name_len()), 
                                           keyword_string_mask_suffix);

        m_operators        = m_cfg.strlist(string_type(e.name(), e.name_len()), 
                                           keyword_operators_suffix);

        replace_strlist_keysym(m_block_comments);
        replace_strlist_keysym(m_line_comments);
        replace_strlist_keysym(m_string_quotation);
        replace_strlist_keysym(m_string_mask);
        replace_strlist_keysym(m_operators);
        
        m_identifier_charset.clear();
        add_to_identifier_charset(keyword_kw1_suffix);
        add_to_identifier_charset(keyword_kw2_suffix);
        add_to_identifier_charset(keyword_kw3_suffix);
        add_to_identifier_charset(keyword_kw4_suffix);

        m_operator_charset.clear();

        unsigned i;
        for(i = 0; i < m_operators.size(); ++i)
        {
            const string_type& str = m_operators[i];
            for(unsigned j = 0; j < str.length(); j++)
            {
                char_type c = str[j];
                if(!is_alnum(c))
                {
                    m_operator_charset.insert(replace_keysym(c));
                }
            }
        }

        content_storage code;
        element_serializer ser(code, e, false, false);
        code.replace_text_keysym();
        m_result.add(backslash);
        if(str_cmp(m_language, keyword_m) == 0)
        {
            m_result.add(keyword_m.name, keyword_m.len);
            m_result.add(open_brace);
            m_result.add(code.text());
            m_result.add(close_brace);
        }
        else
        if(str_cmp(m_language, keyword_code) == 0)
        {
            m_result.add(keyword_code.name, keyword_code.len);
            if(e.attr_len())
            {
                m_result.add(open_bracket);
                m_result.add(e.attr(), e.attr_len());
                m_result.add(close_bracket);
            }
            m_result.add(open_brace);
            m_result.add(code.text());
            m_result.add(close_brace);
        }
        else
        {
            m_result.add(keyword_code.name, keyword_code.len);
            if(e.attr_len())
            {
                m_result.add(open_bracket);
                m_result.add(e.attr(), e.attr_len());
                m_result.add(close_bracket);
            }
            m_result.add(open_brace);
            color_code(code.text());
            m_result.add(close_brace);
        }
    }