DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Implementation

Mercurial (e67641c2e4cc)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef GLLIBRARYLOADER_H_
#define GLLIBRARYLOADER_H_

#include <stdio.h>

#include "GLDefs.h"
#include "nscore.h"
#include "prlink.h"

namespace mozilla {
namespace gl {

class GLLibraryLoader {
 public:
  bool OpenLibrary(const char* library);

  typedef PRFuncPtr(GLAPIENTRY* PlatformLookupFunction)(const char*);

  enum { MAX_SYMBOL_NAMES = 6, MAX_SYMBOL_LENGTH = 128 };

  typedef struct {
    PRFuncPtr* symPointer;
    const char* symNames[MAX_SYMBOL_NAMES];
  } SymLoadStruct;

  bool LoadSymbols(const SymLoadStruct* firstStruct, bool tryplatform = false,
                   const char* prefix = nullptr, bool warnOnFailure = true);

  static void ClearSymbols(const SymLoadStruct* firstStruct);

  PRFuncPtr LookupSymbol(const char* symname);

  /*
   * Static version of the functions in this class
   */
  static PRFuncPtr LookupSymbol(
      PRLibrary* lib, const char* symname,
      PlatformLookupFunction lookupFunction = nullptr);
  static bool LoadSymbols(PRLibrary* lib, const SymLoadStruct* firstStruct,
                          PlatformLookupFunction lookupFunction = nullptr,
                          const char* prefix = nullptr,
                          bool warnOnFailure = true);

 protected:
  GLLibraryLoader() {
    mLibrary = nullptr;
    mLookupFunc = nullptr;
  }

  PRLibrary* mLibrary;
  PlatformLookupFunction mLookupFunc;
};

} /* namespace gl */
} /* namespace mozilla */

#endif /* GLLIBRARYLOADER_H_ */