// Copyright (C) 2010, Gabriel Dos Reis. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // - Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // - Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // // - Neither the name of The Numerical Algorithms Group Ltd. nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS // IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER // OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include namespace OpenAxiom { // ----------------- // -- SystemError -- // ----------------- // Objects of (type derived from) this type are used to report // error orignating from the OpenAxiom core system. struct SystemError { explicit SystemError(std::string); virtual ~SystemError(); // Return the text of the diagnostic message. virtual const std::string& message() const; protected: const std::string text; }; // Report a file system erro void filesystem_error(std::string); namespace Memory { // Datatype for pointers to data. typedef void* Pointer; // Precision of the host OS storage page unit in byte count size_t page_size(); // Acquire raw memory from the host OS in multiple // of storage page nits. Pointer os_acquire_raw_memory(size_t); // Release raw storage to the hosting OS. The first operand must // be a pointer value previous returned by `os_acquire_raw_memory'. // Otherwise, the result is undefined. void os_release_raw_memory(Pointer, size_t); // ----------------- // -- FileMapping -- // ----------------- struct FileMapping { explicit FileMapping(std::string); ~FileMapping(); const char* begin() const { return static_cast(start); } const char* end() const { return begin() + extent; } std::size_t size() const { return extent; } protected: Pointer start; // address at the mapped storage size_t extent; // length (in bytes) of the storage private: FileMapping(const FileMapping&); // not implemented FileMapping& operator=(const FileMapping&); // idem }; } }