mirror of
https://github.com/ETLCPP/etl.git
synced 2026-04-30 19:09:10 +08:00
Merge remote-tracking branch 'origin/development'
This commit is contained in:
commit
1f91850065
@ -248,18 +248,6 @@
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>3</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\src\c\ecl_timer_list.c</PathWithFileName>
|
||||
<FilenameWithoutPath>ecl_timer_list.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
@ -271,19 +259,7 @@
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>5</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\..\src\c\ecl_timer_list.h</PathWithFileName>
|
||||
<FilenameWithoutPath>ecl_timer_list.h</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
<File>
|
||||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileNumber>4</FileNumber>
|
||||
<FileType>5</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
|
||||
@ -10,8 +10,8 @@
|
||||
<TargetName>Target 1</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<pCCUsed>5060528::V5.06 update 5 (build 528)::ARMCC</pCCUsed>
|
||||
<uAC6>0</uAC6>
|
||||
<pCCUsed>6070000::V6.7::.\ARMCLANG</pCCUsed>
|
||||
<uAC6>1</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>STM32F401RETx</Device>
|
||||
@ -320,7 +320,7 @@
|
||||
<PlainCh>1</PlainCh>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<wLevel>2</wLevel>
|
||||
<wLevel>3</wLevel>
|
||||
<uThumb>0</uThumb>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<uC99>1</uC99>
|
||||
@ -390,21 +390,11 @@
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\src\c\ecl_timer.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>ecl_timer_list.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\..\src\c\ecl_timer_list.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>ecl_timer.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\..\src\c\ecl_timer.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>ecl_timer_list.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
<FilePath>..\..\src\c\ecl_timer_list.h</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>ecl_user.h</FileName>
|
||||
<FileType>5</FileType>
|
||||
|
||||
@ -30,7 +30,174 @@ SOFTWARE.
|
||||
#include <assert.h>
|
||||
|
||||
#include "ecl_timer.h"
|
||||
#include "ecl_timer_list.h"
|
||||
|
||||
//*****************************************************************************
|
||||
// Internal timer list
|
||||
//*****************************************************************************
|
||||
|
||||
static ecl_timer_id_t head;
|
||||
static ecl_timer_id_t tail;
|
||||
static ecl_timer_id_t current;
|
||||
|
||||
static struct ecl_timer_config* ptimers;
|
||||
|
||||
static void ecl_timer_list_init(struct ecl_timer_config* const ptimers_)
|
||||
{
|
||||
ptimers = ptimers_;
|
||||
head = ECL_TIMER_NO_TIMER;
|
||||
tail = ECL_TIMER_NO_TIMER;
|
||||
current = ECL_TIMER_NO_TIMER;
|
||||
}
|
||||
|
||||
//*******************************
|
||||
static struct ecl_timer_config* ecl_timer_list_front()
|
||||
{
|
||||
return &ptimers[head];
|
||||
}
|
||||
|
||||
//*******************************
|
||||
static ecl_timer_id_t ecl_timer_list_begin()
|
||||
{
|
||||
current = head;
|
||||
return current;
|
||||
}
|
||||
|
||||
//*******************************
|
||||
static ecl_timer_id_t ecl_timer_list_next(ecl_timer_id_t last)
|
||||
{
|
||||
current = ptimers[last].next;
|
||||
return current;
|
||||
}
|
||||
|
||||
//*******************************
|
||||
static int ecl_timer_list_empty()
|
||||
{
|
||||
return head == ECL_TIMER_NO_TIMER;
|
||||
}
|
||||
|
||||
//*******************************
|
||||
// Inserts the timer at the correct delta position
|
||||
//*******************************
|
||||
static void ecl_timer_list_insert(ecl_timer_id_t id_)
|
||||
{
|
||||
struct ecl_timer_config* ptimer = &ptimers[id_];
|
||||
|
||||
if (head == ECL_TIMER_NO_TIMER)
|
||||
{
|
||||
// No entries yet.
|
||||
head = id_;
|
||||
tail = id_;
|
||||
ptimer->previous = ECL_TIMER_NO_TIMER;
|
||||
ptimer->next = ECL_TIMER_NO_TIMER;
|
||||
}
|
||||
else
|
||||
{
|
||||
// We already have entries.
|
||||
ecl_timer_id_t test_id = ecl_timer_list_begin();
|
||||
|
||||
while (test_id != ECL_TIMER_NO_TIMER)
|
||||
{
|
||||
struct ecl_timer_config* ptest = &ptimers[test_id];
|
||||
|
||||
// Find the correct place to insert.
|
||||
if (ptimer->delta <= ptest->delta)
|
||||
{
|
||||
if (ptest->id == head)
|
||||
{
|
||||
head = ptimer->id;
|
||||
}
|
||||
|
||||
// Insert before ptest->
|
||||
ptimer->previous = ptest->previous;
|
||||
ptest->previous = ptimer->id;
|
||||
ptimer->next = ptest->id;
|
||||
|
||||
// Adjust the next delta to compensate.
|
||||
ptest->delta -= ptimer->delta;
|
||||
|
||||
if (ptimer->previous != ECL_TIMER_NO_TIMER)
|
||||
{
|
||||
ptimers[ptimer->previous].next = ptimer->id;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptimer->delta -= ptest->delta;
|
||||
}
|
||||
|
||||
test_id = ecl_timer_list_next(test_id);
|
||||
}
|
||||
|
||||
// Reached the end?
|
||||
if (test_id == ECL_TIMER_NO_TIMER)
|
||||
{
|
||||
// Tag on to the tail.
|
||||
ptimers[tail].next = ptimer->id;
|
||||
ptimer->previous = tail;
|
||||
ptimer->next = ECL_TIMER_NO_TIMER;
|
||||
tail = ptimer->id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//*******************************
|
||||
static void ecl_timer_list_remove(ecl_timer_id_t id_, int has_expired)
|
||||
{
|
||||
struct ecl_timer_config* ptimer = &ptimers[id_];
|
||||
|
||||
if (head == id_)
|
||||
{
|
||||
head = ptimer->next;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptimers[ptimer->previous].next = ptimer->next;
|
||||
}
|
||||
|
||||
if (tail == id_)
|
||||
{
|
||||
tail = ptimer->previous;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptimers[ptimer->next].previous = ptimer->previous;
|
||||
}
|
||||
|
||||
if (!has_expired)
|
||||
{
|
||||
// Adjust the next delta.
|
||||
if (ptimer->next != ECL_TIMER_NO_TIMER)
|
||||
{
|
||||
ptimers[ptimer->next].delta += ptimer->delta;
|
||||
}
|
||||
}
|
||||
|
||||
ptimer->previous = ECL_TIMER_NO_TIMER;
|
||||
ptimer->next = ECL_TIMER_NO_TIMER;
|
||||
ptimer->delta = ECL_TIMER_INACTIVE;
|
||||
}
|
||||
|
||||
//*******************************
|
||||
static void ecl_timer_list_clear()
|
||||
{
|
||||
ecl_timer_id_t id = ecl_timer_list_begin();
|
||||
|
||||
while (id != ECL_TIMER_NO_TIMER)
|
||||
{
|
||||
struct ecl_timer_config* ptimer = &ptimers[id];
|
||||
id = ecl_timer_list_next(id);
|
||||
ptimer->next = ECL_TIMER_NO_TIMER;
|
||||
}
|
||||
|
||||
head = ECL_TIMER_NO_TIMER;
|
||||
tail = ECL_TIMER_NO_TIMER;
|
||||
current = ECL_TIMER_NO_TIMER;
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
// Timer Framework
|
||||
//*****************************************************************************
|
||||
|
||||
//*******************************************
|
||||
/// Default initialisation.
|
||||
|
||||
@ -1,201 +0,0 @@
|
||||
/******************************************************************************
|
||||
The MIT License(MIT)
|
||||
|
||||
Embedded Template Library.
|
||||
https://github.com/ETLCPP/etl
|
||||
https://www.etlcpp.com
|
||||
|
||||
Copyright(c) 2017 jwellbelove
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files(the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions :
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
******************************************************************************/
|
||||
|
||||
#include "ecl_timer.h"
|
||||
#include "ecl_timer_list.h"
|
||||
|
||||
//*************************************************************************
|
||||
/// A specialised intrusive linked list for timer data.
|
||||
//*************************************************************************
|
||||
|
||||
static ecl_timer_id_t head;
|
||||
static ecl_timer_id_t tail;
|
||||
static ecl_timer_id_t current;
|
||||
|
||||
struct ecl_timer_config* ptimers;
|
||||
|
||||
void ecl_timer_list_init(struct ecl_timer_config* const ptimers_)
|
||||
{
|
||||
ptimers = ptimers_;
|
||||
head = ECL_TIMER_NO_TIMER;
|
||||
tail = ECL_TIMER_NO_TIMER;
|
||||
current = ECL_TIMER_NO_TIMER;
|
||||
}
|
||||
|
||||
//*******************************
|
||||
struct ecl_timer_config* ecl_timer_list_front()
|
||||
{
|
||||
return &ptimers[head];
|
||||
}
|
||||
|
||||
//*******************************
|
||||
ecl_timer_id_t ecl_timer_list_begin()
|
||||
{
|
||||
current = head;
|
||||
return current;
|
||||
}
|
||||
|
||||
//*******************************
|
||||
ecl_timer_id_t ecl_timer_list_previous(ecl_timer_id_t last)
|
||||
{
|
||||
current = ptimers[last].previous;
|
||||
return current;
|
||||
}
|
||||
|
||||
//*******************************
|
||||
ecl_timer_id_t ecl_timer_list_next(ecl_timer_id_t last)
|
||||
{
|
||||
current = ptimers[last].next;
|
||||
return current;
|
||||
}
|
||||
|
||||
//*******************************
|
||||
int ecl_timer_list_empty()
|
||||
{
|
||||
return head == ECL_TIMER_NO_TIMER;
|
||||
}
|
||||
|
||||
//*******************************
|
||||
// Inserts the timer at the correct delta position
|
||||
//*******************************
|
||||
void ecl_timer_list_insert(ecl_timer_id_t id_)
|
||||
{
|
||||
struct ecl_timer_config* ptimer = &ptimers[id_];
|
||||
|
||||
if (head == ECL_TIMER_NO_TIMER)
|
||||
{
|
||||
// No entries yet.
|
||||
head = id_;
|
||||
tail = id_;
|
||||
ptimer->previous = ECL_TIMER_NO_TIMER;
|
||||
ptimer->next = ECL_TIMER_NO_TIMER;
|
||||
}
|
||||
else
|
||||
{
|
||||
// We already have entries.
|
||||
ecl_timer_id_t test_id = ecl_timer_list_begin();
|
||||
|
||||
while (test_id != ECL_TIMER_NO_TIMER)
|
||||
{
|
||||
struct ecl_timer_config* ptest = &ptimers[test_id];
|
||||
|
||||
// Find the correct place to insert.
|
||||
if (ptimer->delta <= ptest->delta)
|
||||
{
|
||||
if (ptest->id == head)
|
||||
{
|
||||
head = ptimer->id;
|
||||
}
|
||||
|
||||
// Insert before ptest->
|
||||
ptimer->previous = ptest->previous;
|
||||
ptest->previous = ptimer->id;
|
||||
ptimer->next = ptest->id;
|
||||
|
||||
// Adjust the next delta to compensate.
|
||||
ptest->delta -= ptimer->delta;
|
||||
|
||||
if (ptimer->previous != ECL_TIMER_NO_TIMER)
|
||||
{
|
||||
ptimers[ptimer->previous].next = ptimer->id;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptimer->delta -= ptest->delta;
|
||||
}
|
||||
|
||||
test_id = ecl_timer_list_next(test_id);
|
||||
}
|
||||
|
||||
// Reached the end?
|
||||
if (test_id == ECL_TIMER_NO_TIMER)
|
||||
{
|
||||
// Tag on to the tail.
|
||||
ptimers[tail].next = ptimer->id;
|
||||
ptimer->previous = tail;
|
||||
ptimer->next = ECL_TIMER_NO_TIMER;
|
||||
tail = ptimer->id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//*******************************
|
||||
void ecl_timer_list_remove(ecl_timer_id_t id_, int has_expired)
|
||||
{
|
||||
struct ecl_timer_config* ptimer = &ptimers[id_];
|
||||
|
||||
if (head == id_)
|
||||
{
|
||||
head = ptimer->next;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptimers[ptimer->previous].next = ptimer->next;
|
||||
}
|
||||
|
||||
if (tail == id_)
|
||||
{
|
||||
tail = ptimer->previous;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptimers[ptimer->next].previous = ptimer->previous;
|
||||
}
|
||||
|
||||
if (!has_expired)
|
||||
{
|
||||
// Adjust the next delta.
|
||||
if (ptimer->next != ECL_TIMER_NO_TIMER)
|
||||
{
|
||||
ptimers[ptimer->next].delta += ptimer->delta;
|
||||
}
|
||||
}
|
||||
|
||||
ptimer->previous = ECL_TIMER_NO_TIMER;
|
||||
ptimer->next = ECL_TIMER_NO_TIMER;
|
||||
ptimer->delta = ECL_TIMER_INACTIVE;
|
||||
}
|
||||
|
||||
//*******************************
|
||||
void ecl_timer_list_clear()
|
||||
{
|
||||
ecl_timer_id_t id = ecl_timer_list_begin();
|
||||
|
||||
while (id != ECL_TIMER_NO_TIMER)
|
||||
{
|
||||
struct ecl_timer_config* ptimer = &ptimers[id];
|
||||
id = ecl_timer_list_next(id);
|
||||
ptimer->next = ECL_TIMER_NO_TIMER;
|
||||
}
|
||||
|
||||
head = ECL_TIMER_NO_TIMER;
|
||||
tail = ECL_TIMER_NO_TIMER;
|
||||
current = ECL_TIMER_NO_TIMER;
|
||||
}
|
||||
@ -1,44 +0,0 @@
|
||||
/******************************************************************************
|
||||
The MIT License(MIT)
|
||||
|
||||
Embedded Template Library.
|
||||
https://github.com/ETLCPP/etl
|
||||
https://www.etlcpp.com
|
||||
|
||||
Copyright(c) 2017 jwellbelove
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files(the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions :
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __ETL_C_TIMER_FRAMEWORK_LIST__
|
||||
#define __ETL_C_TIMER_FRAMEWORK_LIST__
|
||||
|
||||
#include "ecl_timer.h"
|
||||
|
||||
void ecl_timer_list_init(struct ecl_timer_config* const ptimers_);
|
||||
struct ecl_timer_config* ecl_timer_list_front(void);
|
||||
ecl_timer_id_t ecl_timer_list_begin(void);
|
||||
ecl_timer_id_t ecl_timer_list_previous(ecl_timer_id_t last);
|
||||
ecl_timer_id_t ecl_timer_list_next(ecl_timer_id_t last);
|
||||
int ecl_timer_list_empty(void);
|
||||
void ecl_timer_list_insert(ecl_timer_id_t id_);
|
||||
void ecl_timer_list_remove(ecl_timer_id_t id_, int has_expired);
|
||||
void ecl_timer_list_clear(void);
|
||||
|
||||
#endif
|
||||
@ -318,8 +318,8 @@ namespace etl
|
||||
{
|
||||
do
|
||||
{
|
||||
p_state = p_next_state;
|
||||
fsm_helper::on_exit_state(*p_state);
|
||||
p_state = p_next_state;
|
||||
|
||||
next_state_id = fsm_helper::on_enter_state(*p_state);
|
||||
ETL_ASSERT(next_state_id < number_of_states, ETL_ERROR(etl::fsm_state_id_exception));
|
||||
|
||||
@ -94,7 +94,7 @@ namespace etl
|
||||
bool ok = true;
|
||||
|
||||
// There's no point actually adding null routers.
|
||||
if (router.get_message_router_id() != etl::imessage_router::NULL_MESSAGE_ROUTER)
|
||||
if (!router.is_null_router())
|
||||
{
|
||||
ok = !router_list.full();
|
||||
|
||||
@ -102,7 +102,7 @@ namespace etl
|
||||
|
||||
if (ok)
|
||||
{
|
||||
if (router.get_message_router_id() == etl::imessage_router::MESSAGE_BUS)
|
||||
if (router.is_bus())
|
||||
{
|
||||
// Message busses get added to the end.
|
||||
router_list.push_back(&router);
|
||||
@ -203,7 +203,7 @@ namespace etl
|
||||
{
|
||||
etl::imessage_router& router = **irouter;
|
||||
|
||||
if (router.get_message_router_id() == etl::imessage_router::MESSAGE_BUS)
|
||||
if (router.is_bus())
|
||||
{
|
||||
// The router is actually a bus.
|
||||
etl::imessage_bus& bus = static_cast<etl::imessage_bus&>(router);
|
||||
|
||||
@ -114,6 +114,18 @@ namespace etl
|
||||
return message_router_id;
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return (message_router_id == NULL_MESSAGE_ROUTER);
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_bus() const
|
||||
{
|
||||
return (message_router_id == MESSAGE_BUS);
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
NULL_MESSAGE_ROUTER = 255,
|
||||
|
||||
@ -126,6 +126,18 @@ namespace etl
|
||||
return message_router_id;
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_null_router() const
|
||||
{
|
||||
return (message_router_id != NULL_MESSAGE_ROUTER);
|
||||
}
|
||||
|
||||
//********************************************
|
||||
bool is_bus() const
|
||||
{
|
||||
return (message_router_id != MESSAGE_BUS);
|
||||
}
|
||||
|
||||
enum
|
||||
{
|
||||
NULL_MESSAGE_ROUTER = 255,
|
||||
|
||||
@ -81,7 +81,7 @@ namespace etl
|
||||
next(etl::timer::id::NO_TIMER),
|
||||
repeating(repeating_)
|
||||
{
|
||||
if (irouter_.get_message_router_id() == etl::imessage_router::MESSAGE_BUS)
|
||||
if (irouter_.is_bus())
|
||||
{
|
||||
destination_router_id = destination_router_id_;
|
||||
}
|
||||
@ -330,7 +330,7 @@ namespace etl
|
||||
if (is_space)
|
||||
{
|
||||
// There's no point adding null message routers.
|
||||
if (router_.get_message_router_id() != etl::imessage_router::NULL_MESSAGE_ROUTER)
|
||||
if (!router_.is_null_router())
|
||||
{
|
||||
// Search for the free space.
|
||||
for (uint_least8_t i = 0; i < MAX_TIMERS; ++i)
|
||||
@ -455,7 +455,7 @@ namespace etl
|
||||
|
||||
if (timer.p_router != nullptr)
|
||||
{
|
||||
if (timer.p_router->get_message_router_id() == etl::imessage_router::MESSAGE_BUS)
|
||||
if (timer.p_router->is_bus())
|
||||
{
|
||||
// Send to a message bus.
|
||||
etl::imessage_bus& bus = static_cast<etl::imessage_bus&>(*(timer.p_router));
|
||||
|
||||
@ -428,8 +428,10 @@ namespace etl
|
||||
|
||||
/// is_base_of
|
||||
///\ingroup type_traits
|
||||
template<class TBase, class TDerived>
|
||||
struct is_base_of
|
||||
template<typename TBase,
|
||||
typename TDerived,
|
||||
const bool IsFundamental = (etl::is_fundamental<TBase>::value || etl::is_fundamental<TDerived>::value)>
|
||||
struct is_base_of
|
||||
{
|
||||
private:
|
||||
|
||||
@ -444,6 +446,13 @@ namespace etl
|
||||
static const bool value = (sizeof(check((internal*)0)) == sizeof(TBase*));
|
||||
};
|
||||
|
||||
// For when TBase or TDerived is a fundamental type.
|
||||
template<typename TBase, typename TDerived>
|
||||
struct is_base_of<TBase, TDerived, true>
|
||||
{
|
||||
static const bool value = false;
|
||||
};
|
||||
|
||||
/// Alignment templates.
|
||||
/// These require compiler specific intrinsics.
|
||||
///\ingroup type_traits
|
||||
|
||||
@ -63,10 +63,6 @@
|
||||
<Option compilerVar="CC" />
|
||||
</Unit>
|
||||
<Unit filename="../../src/c/ecl_timer.h" />
|
||||
<Unit filename="../../src/c/ecl_timer_list.c">
|
||||
<Option compilerVar="CC" />
|
||||
</Unit>
|
||||
<Unit filename="../../src/c/ecl_timer_list.h" />
|
||||
<Unit filename="../../src/callback.h" />
|
||||
<Unit filename="../../src/callback_timer.h" />
|
||||
<Unit filename="../../src/char_traits.h" />
|
||||
|
||||
@ -1,175 +1,169 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<CodeBlocks_layout_file>
|
||||
<FileVersion major="1" minor="0" />
|
||||
<ActiveTarget name="Windows" />
|
||||
<File name="..\..\src\type_traits.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="12237" topLine="260" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\test_callback_timer.cpp" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="5922" topLine="109" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\unittest-cpp\UnitTest++\Checks.h" open="0" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="119" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\message_bus.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="11907" topLine="330" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\type_traits.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="12237" topLine="260" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\test_factory.cpp" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="3108" topLine="101" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\unittest-cpp\UnitTest++\HelperMacros.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="0" topLine="35" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\callback_timer.h" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="16444" topLine="558" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\unittest-cpp\UnitTest++\Win32\TimeHelpers.cpp" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="775" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\test_pearson.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1707" topLine="29" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\platform.h" open="1" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<ActiveTarget name="Linux" />
|
||||
<File name="../../src/platform.h" open="1" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1621" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\test_message_timer.cpp" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="../test_pearson.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="5425" topLine="125" />
|
||||
<Cursor1 position="1707" topLine="29" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\error_handler.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="4288" topLine="74" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\test_flat_multimap.cpp" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="3425" topLine="85" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\intrusive_flat_map.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="4065" topLine="242" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\main.cpp" open="0" top="0" tabpos="18" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="141" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\queue.h" open="0" top="0" tabpos="17" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="11193" topLine="229" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\unittest-cpp\UnitTest++\Checks.cpp" open="0" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="0" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\test_endian.cpp" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1392" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\test_type_traits.cpp" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="37662" topLine="472" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\flat_map.h" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="2722" topLine="43" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\vector.h" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="41462" topLine="1108" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\flat_multimap.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="0" topLine="87" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\unittest-cpp\UnitTest++\MemoryOutStream.h" open="0" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="178" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\message_timer.h" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="14673" topLine="484" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\unittest-cpp\UnitTest++\Posix\SignalTranslator.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1062" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\etl_profile.h" open="1" top="1" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1471" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\pearson.h" open="0" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1510" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\static_assert.h" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1460" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\unittest-cpp\UnitTest++\CheckMacros.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="19863" topLine="122" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\test_checksum.cpp" open="0" top="0" tabpos="10" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="../test_checksum.cpp" open="0" top="0" tabpos="10" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="218" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\memory.h" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="../../unittest-cpp/UnitTest++/CheckMacros.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="2221" topLine="0" />
|
||||
<Cursor1 position="19863" topLine="122" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\factory.h" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="../test_endian.cpp" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1392" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../main.cpp" open="0" top="0" tabpos="18" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="141" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/intrusive_flat_map.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="4065" topLine="242" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../unittest-cpp/UnitTest++/Checks.cpp" open="0" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="0" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../unittest-cpp/UnitTest++/Posix/SignalTranslator.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1062" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/factory.h" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="6413" topLine="131" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="..\..\src\deque.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<File name="../../src/message_timer.h" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="14673" topLine="484" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/callback_timer.h" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="16444" topLine="558" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/error_handler.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="4288" topLine="74" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/static_assert.h" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1460" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/deque.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="67574" topLine="2022" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../test_factory.cpp" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="3108" topLine="101" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/flat_multimap.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="0" topLine="87" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/memory.h" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="2221" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/type_traits.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="12237" topLine="260" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../etl_profile.h" open="1" top="1" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1471" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../unittest-cpp/UnitTest++/Win32/TimeHelpers.cpp" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="775" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../test_flat_multimap.cpp" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="3425" topLine="85" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../test_message_timer.cpp" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="5425" topLine="125" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/pearson.h" open="0" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="1510" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/flat_map.h" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="2722" topLine="43" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../test_callback_timer.cpp" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="5922" topLine="109" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/message_bus.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="11907" topLine="330" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/vector.h" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="41462" topLine="1108" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../src/queue.h" open="0" top="0" tabpos="17" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="11193" topLine="229" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../test_type_traits.cpp" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="37662" topLine="472" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../unittest-cpp/UnitTest++/HelperMacros.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="0" topLine="35" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../unittest-cpp/UnitTest++/MemoryOutStream.h" open="0" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="178" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
<File name="../../unittest-cpp/UnitTest++/Checks.h" open="0" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
|
||||
<Cursor>
|
||||
<Cursor1 position="119" topLine="0" />
|
||||
</Cursor>
|
||||
</File>
|
||||
</CodeBlocks_layout_file>
|
||||
|
||||
@ -136,7 +136,6 @@
|
||||
<ClInclude Include="..\..\src\compare.h" />
|
||||
<ClInclude Include="..\..\src\constant.h" />
|
||||
<ClInclude Include="..\..\src\c\ecl_timer.h" />
|
||||
<ClInclude Include="..\..\src\c\ecl_timer_list.h" />
|
||||
<ClInclude Include="..\..\src\factory.h" />
|
||||
<ClInclude Include="..\..\src\fsm.h" />
|
||||
<ClInclude Include="..\..\src\fsm_generator.h" />
|
||||
@ -300,7 +299,6 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\src\c\ecl_timer.c" />
|
||||
<ClCompile Include="..\..\src\c\ecl_timer_list.c" />
|
||||
<ClCompile Include="..\..\unittest-cpp\UnitTest++\AssertException.cpp" />
|
||||
<ClCompile Include="..\..\unittest-cpp\UnitTest++\Checks.cpp" />
|
||||
<ClCompile Include="..\..\unittest-cpp\UnitTest++\CompositeTestReporter.cpp" />
|
||||
|
||||
@ -558,9 +558,6 @@
|
||||
<ClInclude Include="..\..\src\c\ecl_timer.h">
|
||||
<Filter>ECL</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\c\ecl_timer_list.h">
|
||||
<Filter>ECL</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\ecl_user.h">
|
||||
<Filter>Source Files\ECL</Filter>
|
||||
</ClInclude>
|
||||
@ -932,9 +929,6 @@
|
||||
<ClCompile Include="..\..\src\c\ecl_timer.c">
|
||||
<Filter>ECL</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\c\ecl_timer_list.c">
|
||||
<Filter>ECL</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\test_c_timer_framework.cpp">
|
||||
<Filter>Source Files\ECL</Filter>
|
||||
</ClCompile>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user