Bare Metal Programming Tool Kit
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
context.h
1 //***************************************************************************
2 //
3 // file : bmptk/core/context.h
4 //
5 // LICENSE (MIT expat license, copy of bmptk/license.txt)
6 //
7 // Copyright (c) 2013 Wouter van Ooijen (wouter@voti.nl)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be included
18 // in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
24 // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25 // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE..
27 //
28 //***************************************************************************
29 
30 #ifdef BMPTK_TARGET_win
31  #include <iostream>
32 #else
33  namespace std { class ostream; };
34 #endif
35 
36 namespace bmptk {
37 
39 class context {
40 
42  unsigned char *bottom;
43 
45  //
54  unsigned char *sp;
55 
56  friend std::ostream & bmptk::operator<< ( std::ostream &s, const context &st );
57 
58 public:
59 
61  constexpr context( unsigned char *bottom, unsigned char *size );
62 
64  const unsigned int stack_size;
65 
67  //
71 
72  context( void body(), unsigned int stack_size );
73 
75  //
87  unsigned int stack_unused() const;
88 
90  //
102  unsigned int stack_used() const {
103  return stack_size - stack_unused();
104  }
105 
107  //
115  void resume();
116 };
117 
119 //
122 extern context main_context;
123 
125 //
128 context * current_context();
129 
131 //
135 std::ostream & operator<< ( std::ostream &s, const context &st );
136 
137 }; // namespace bmptk;