ভেরিয়েবল গাইড

ভূমিকা

ওভারভিউ পৃষ্ঠায় যেমন ব্যাখ্যা করা হয়েছে, হোস্ট কোড স্যান্ডবক্সড লাইব্রেরিতে RPC কল করে। স্যান্ডবক্সিং প্রক্রিয়াগুলির মধ্যে একটি মেমরি পৃথকীকরণের ফলে, এবং এইভাবে হোস্ট কোড স্যান্ডবক্সড লাইব্রেরিতে সরাসরি মেমরি অ্যাক্সেস করতে পারে না।

হোস্ট কোড একটি দূরবর্তী প্রক্রিয়ায় ভেরিয়েবল এবং মেমরি ব্লক অ্যাক্সেস করতে পারে তা নিশ্চিত করার জন্য এবং প্রধান লজিক কোডের বাস্তবায়ন সহজতর করার জন্য, SAPI C++ ক্লাসের একটি বিস্তৃত সেট প্রদান করে। তবে, অনেক ক্ষেত্রে আপনি নেটিভ সি-টাইপগুলিও ব্যবহার করতে পারবেন।

সাধারণ প্রকার এবং মেমরি ব্লকে (স্ট্রাকচার, অ্যারে) পয়েন্টার পাস করার সময় বিশেষ ধরনের (SAPI প্রকার) প্রয়োজনীয়তা দেখা দেয়।

উদাহরণস্বরূপ, একটি পয়েন্টার গ্রহণ করার সময় একটি ফাংশন কল করার সময়, পয়েন্টারটিকে অবশ্যই স্যান্ডবক্সড লাইব্রেরির মেমরির মধ্যে একটি সংশ্লিষ্ট পয়েন্টারে রূপান্তর করতে হবে। নীচের কোড স্নিপেট এই দৃশ্যকল্প visualises. তিনটি পূর্ণসংখ্যার একটি অ্যারের পরিবর্তে, একটি ::sapi::v::Array<int> অবজেক্ট তৈরি করা হয়েছে যা স্যান্ডবক্সড লাইব্রেরির API কলে পাস করা যেতে পারে:

int arr[3] = {1, 2, 3};
sapi::v::Array<int> sarr(arr, ABSL_ARRAYSIZE(arr));

সমস্ত উপলব্ধ SAPI প্রকারের একটি ব্যাপক ওভারভিউয়ের জন্য, SAPI প্রোজেক্ট সোর্স কোডে var_*.h হেডার ফাইলগুলি পর্যালোচনা করুন। এই শিরোনাম ফাইলগুলি বিভিন্ন ধরণের ডেটা উপস্থাপন করে ক্লাস এবং টেমপ্লেট প্রদান করে, যেমন:

  • ::sapi::v::UChar সুপরিচিত স্বাক্ষরবিহীন অক্ষরের প্রতিনিধিত্ব করে
  • ::sapi::v::Array<int> পূর্ণসংখ্যার একটি অ্যারের প্রতিনিধিত্ব করে

SAPI প্রকার

এই বিভাগটি তিনটি SAPI প্রকারের পরিচয় দেয় যা সাধারণত হোস্ট কোডে দেখা যায়।

SAPI পয়েন্টার

যদি একটি ফাংশন স্যান্ডবক্স করার জন্য একটি পয়েন্টার পাস করার প্রয়োজন হয়, তাহলে এই পয়েন্টারটি নীচের PtrXXX() পদ্ধতিগুলির একটি থেকে প্রাপ্ত করা উচিত। এই পদ্ধতিগুলি SAPI ভেরিয়েবল ক্লাস দ্বারা প্রয়োগ করা হয়।

পয়েন্টার প্রকার
::PtrNone() একটি স্যান্ডবক্সড API ফাংশনে পাস করা হলে হোস্ট কোড প্রক্রিয়া এবং স্যান্ডবক্সড লাইব্রেরি প্রক্রিয়ার মধ্যে অন্তর্নিহিত মেমরি সিঙ্ক্রোনাইজ করে না।
::PtrBefore() স্যান্ডবক্সড API ফাংশন কল সঞ্চালিত হওয়ার আগে এটি যে বস্তুর দিকে নির্দেশ করে তার মেমরিকে সিঙ্ক্রোনাইজ করে। এর মানে কল শুরু হওয়ার আগে পয়েন্টেড ভেরিয়েবলের স্থানীয় মেমরি স্যান্ডবক্সড লাইব্রেরি প্রক্রিয়ায় স্থানান্তরিত হবে।
::PtrAfter() স্যান্ডবক্সড API ফাংশন কল সঞ্চালিত হওয়ার পরে এটি যে বস্তুর দিকে নির্দেশ করে তার মেমরি সিঙ্ক্রোনাইজ করে। এর মানে কলটি সম্পন্ন হওয়ার পর পয়েন্টেড ভেরিয়েবলের রিমোট মেমরি হোস্ট কোড প্রসেস মেমরিতে স্থানান্তরিত হবে।
::PtrBoth() ::PtrBefore() এবং ::PtrAfter() এর কার্যকারিতা একত্রিত করে।

SAPI পয়েন্টারগুলির জন্য ডকুমেন্টেশন এখানে পাওয়া যাবে।

SAPI কাঠামো

টেমপ্লেট ::sapi::v::Struct var_struct.h- এ নথিভুক্ত করা হয়েছে। এটি একটি কনস্ট্রাক্টর প্রদান করে যা বিদ্যমান কাঠামোগুলিকে মোড়ানোর জন্য ব্যবহার করা যেতে পারে। SAPI Struct একটি ::sapi::v::Ptr অবজেক্ট পাওয়ার জন্য SAPI পয়েন্টারে বর্ণিত সমস্ত পদ্ধতি সরবরাহ করে যা স্যান্ডবক্সযুক্ত লাইব্রেরি কলের জন্য ব্যবহার করা যেতে পারে।

নীচের কোড স্নিপেটটি দেখায় যে একটি কাঠামো শুরু করা হচ্ছে এবং তারপর zlib উদাহরণে একটি স্যান্ডবক্সড ফাংশন কলে পাস করা হয়েছে:

sapi::v::Struct<sapi::zlib::z_stream> strm;
…
if (ret = api.deflateInit_(strm.PtrBoth(), Z_DEFAULT_COMPRESSION,
                             version.PtrBefore(), sizeof(sapi::zlib::z_stream));
…

যদি আপনার বিদ্যমান স্ট্রাকটে পয়েন্টার থাকে, তাহলে সেই পয়েন্টারগুলি স্যান্ডবক্সিতে ঠিকানাগুলি নির্দেশ করবে। ফলস্বরূপ, হোস্ট কোডে অ্যাক্সেসযোগ্য হওয়ার আগে আপনাকে স্যান্ডবক্সি ডেটা স্থানান্তর করতে হবে।

SAPI অ্যারে

টেমপ্লেট ::sapi::v::Array var_array.h এ নথিভুক্ত করা হয়েছে। এটি দুটি কনস্ট্রাক্টর সরবরাহ করে, একটি যেটি উপাদানগুলির বিদ্যমান অ্যারেগুলিকে মোড়ানোর জন্য ব্যবহার করা যেতে পারে এবং অন্যটি গতিশীলভাবে একটি অ্যারে তৈরি করতে।

এই কোড স্নিপেট ( সমষ্টি উদাহরণ থেকে নেওয়া) কনস্ট্রাক্টরের ব্যবহার দেখায় যা এই বস্তুর মালিকানাধীন নয় এমন একটি অ্যারের চারপাশে মোড়ানো হয়:

int arr[10];
sapi::v::Array<int> iarr(arr, ABSL_ARRAYSIZE(arr));

এই কোড স্নিপেটটি গতিশীলভাবে একটি অ্যারে তৈরি করতে ব্যবহৃত কনস্ট্রাক্টরের একটি উদাহরণ দেখায়:

sapi::v::Array<uint8_t> buffer(PNG_IMAGE_SIZE(*image.mutable_data()));

SAPI অ্যারে একটি ::sapi::v::Ptr অবজেক্ট পাওয়ার জন্য SAPI পয়েন্টারে বর্ণিত সমস্ত পদ্ধতি সরবরাহ করে যা স্যান্ডবক্সযুক্ত লাইব্রেরি কলের জন্য ব্যবহার করা যেতে পারে।